viepilot 2.12.0 → 2.15.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 +79 -0
- package/README.md +11 -9
- package/docs/skills-reference.md +12 -0
- package/docs/user/features/interactive-prompts.md +83 -0
- package/package.json +1 -1
- package/skills/vp-brainstorm/SKILL.md +21 -0
- package/skills/vp-crystallize/SKILL.md +38 -1
- package/skills/vp-docs/SKILL.md +16 -6
- package/skills/vp-request/SKILL.md +22 -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/brainstorm.md +26 -0
- package/workflows/crystallize.md +193 -8
- package/workflows/documentation.md +26 -11
- package/workflows/evolve.md +36 -0
- package/workflows/request.md +35 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,85 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.15.0] - 2026-04-13
|
|
11
|
+
|
|
12
|
+
### Changed (ENH-048 — Phase 78: AskUserQuestion Adapter-Aware Integration)
|
|
13
|
+
|
|
14
|
+
All `vp-*` workflows that ask users questions now include adapter-aware interactive prompts.
|
|
15
|
+
Claude Code (terminal) receives a structured click-to-select UI via `AskUserQuestion` tool.
|
|
16
|
+
All other adapters (Cursor Agent/Skills, Codex CLI, Antigravity native) automatically fall back
|
|
17
|
+
to the existing plain-text numbered lists — no configuration required.
|
|
18
|
+
|
|
19
|
+
**Research findings (adapter compatibility):**
|
|
20
|
+
- Claude Code terminal: ✅ `AskUserQuestion` fully supported (native tool)
|
|
21
|
+
- Cursor Agent/Skills Mode: ❌ `AskQuestion` only available in Plan Mode (community feature request)
|
|
22
|
+
- Codex CLI: ❌ not native (community MCP `ask-user-questions-mcp` exists separately)
|
|
23
|
+
- Antigravity native agent: ❌ uses Artifact model, no raw tool calls
|
|
24
|
+
|
|
25
|
+
**`workflows/crystallize.md`:**
|
|
26
|
+
- Added `Adapter Compatibility` table near top
|
|
27
|
+
- License selection (Step 0): AUQ spec with MIT/Apache-2.0/GPL-3.0/Proprietary options
|
|
28
|
+
- Brownfield overwrite confirmation (Step 0-B): AUQ Yes/No prompt
|
|
29
|
+
- Polyrepo related-repos prompt (Step 0-B): AUQ Yes supply/Skip options
|
|
30
|
+
- UI direction gate (Step 1A): AUQ Return-to-brainstorm / Continue-with-assumptions options
|
|
31
|
+
- Architect mode suggestion (Step 1D): AUQ Yes/No architect mode routing
|
|
32
|
+
|
|
33
|
+
**`workflows/brainstorm.md`:**
|
|
34
|
+
- Added `Adapter Compatibility` table near top
|
|
35
|
+
- Session intent (Step 2): AUQ Continue-recent / Review-specific / New-session options
|
|
36
|
+
- Landing page layout (Step 4): AUQ Layout A/B/C/D with descriptions (4-option fit)
|
|
37
|
+
|
|
38
|
+
**`workflows/request.md`:**
|
|
39
|
+
- Added `Adapter Compatibility` table near top
|
|
40
|
+
- Request type detection (Step 2): AUQ Bug/Feature/Enhancement/Tech-Debt (Brainstorm+List remain text)
|
|
41
|
+
- Bug severity (Step 4A): AUQ Critical/High/Medium/Low options
|
|
42
|
+
- Feature priority (Step 4B): AUQ Must-have/Should-have/Nice-to-have options
|
|
43
|
+
|
|
44
|
+
**`workflows/evolve.md`:**
|
|
45
|
+
- Added `Adapter Compatibility` table near top
|
|
46
|
+
- Intent detection (Step 2): AUQ Add-Feature/New-Milestone/Refactor options
|
|
47
|
+
- Complexity question (Step 3A): AUQ S/M/L/XL options
|
|
48
|
+
- Brainstorm routing (Step 3A): AUQ Yes-brainstorm/No-plan-directly options
|
|
49
|
+
|
|
50
|
+
**`skills/vp-crystallize/SKILL.md`, `skills/vp-brainstorm/SKILL.md`, `skills/vp-request/SKILL.md`:**
|
|
51
|
+
- Added `## Adapter Compatibility` section with 6-row adapter support table
|
|
52
|
+
- Listed prompts using AskUserQuestion per skill
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
- `tests/unit/vp-enh048-askuserquestion.test.js` — 33 contract tests verifying AUQ specs + text fallback preservation across all affected files
|
|
56
|
+
|
|
57
|
+
## [2.14.0] - 2026-04-13
|
|
58
|
+
|
|
59
|
+
### Added (ENH-047 — Phase 77: Brownfield Multi-Repo, Submodules & Per-Module Gap Detection)
|
|
60
|
+
|
|
61
|
+
**Gap A — Git Submodule Detection:**
|
|
62
|
+
- `workflows/crystallize.md`: Signal Category 1 now reads `.gitmodules` → parses all `[submodule]` blocks (name, path, url); runs Signal Cat 1+2+4 on each initialized submodule path; records uninitialized paths with `initialized: false` + `primary_language: MISSING`
|
|
63
|
+
- Scan Report `modules[]`: new fields `type` (submodule/workspace/root), `submodule_url`, `initialized`
|
|
64
|
+
- Safety rule: scanner never runs `git submodule update` — local filesystem read-only
|
|
65
|
+
|
|
66
|
+
**Gap B — Polyrepo / Multi-Repo Detection:**
|
|
67
|
+
- `workflows/crystallize.md`: new Polyrepo Detection subsection in Signal Category 1 with 6 signal sources (docker-compose `../` build contexts, `file:../` package.json deps, CI cross-repo clones, README external repo links, Makefile `cd ../` targets)
|
|
68
|
+
- Scan Report: `polyrepo_hints[]` + `related_repos[]` fields (omitted entirely when empty — no empty arrays in clean single-repo reports)
|
|
69
|
+
- Interactive prompt fires when polyrepo signals detected; user can supply related repo URLs with optional role label
|
|
70
|
+
- Gap-fill rule: polyrepo hints without `related_repos` → system-level context fields = ASSUMED tier
|
|
71
|
+
|
|
72
|
+
**Gap C — Per-Module Gap Detection:**
|
|
73
|
+
- `workflows/crystallize.md`: new Per-Module Gap Detection section with MUST-DETECT table (primary_language, framework, module_purpose, entry_point) including source signals and tier-if-absent rules
|
|
74
|
+
- `must_detect_status{}` per module: records `{ value, source, tier }` per MUST-DETECT field; source conventions: `"tsconfig.json"` (file), `"inferred"` (ASSUMED), `"absent"` (MISSING), `"user"` (gap-filled)
|
|
75
|
+
- Root gap tier rollup: worst tier across all modules (MISSING > ASSUMED > DETECTED)
|
|
76
|
+
- Module with `gap_tier: MISSING` blocks artifact generation with targeted per-field user prompt
|
|
77
|
+
- Per-module `open_questions[]` rolled up into root `open_questions[]`
|
|
78
|
+
- Scan summary printout table (module | path | language | framework | gap tier)
|
|
79
|
+
- `skills/vp-crystallize/SKILL.md`: Brownfield Mode section updated with Gaps A+B+C, Scan Report contents list, per-module MUST-DETECT fields
|
|
80
|
+
|
|
81
|
+
## [2.13.0] - 2026-04-13
|
|
82
|
+
|
|
83
|
+
### Changed (ENH-046 — Phase 76)
|
|
84
|
+
- **`workflows/documentation.md`**: replaced GitHub-only URL parser with a forge-agnostic extractor supporting GitHub (SSH/HTTPS), GitLab (SSH/HTTPS), Bitbucket, Azure DevOps (`dev.azure.com`), Gitea, and any self-hosted remote
|
|
85
|
+
- Variables renamed: `GITHUB_OWNER`/`GITHUB_REPO` → `GIT_OWNER`/`GIT_REPO`; added `GIT_HOST`
|
|
86
|
+
- **`skills/vp-docs/SKILL.md`**: Step 0 shell block updated to match — same forge-agnostic parser, same variable names
|
|
87
|
+
- **`workflows/crystallize.md`**: Step 0 prompt label generalized from "GitHub username? (optional)" → "Git remote host / username? (optional — e.g. github.com/johndoe, gitlab.com/org)"
|
|
88
|
+
|
|
10
89
|
## [2.12.0] - 2026-04-13
|
|
11
90
|
|
|
12
91
|
### Added (FEAT-018 — Phase 75)
|
package/README.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
**Autonomous Vibe Coding Framework / Bộ khung phát triển tự động có kiểm soát**
|
|
4
4
|
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](#skills-reference)
|
|
8
|
-
[](#workflows)
|
|
9
9
|
[](#templates)
|
|
10
|
-
[](tests/)
|
|
11
11
|
[](https://github.com/0-CODE/viepilot)
|
|
12
12
|
|
|
13
|
-
**Versioning:** Shield **2.
|
|
13
|
+
**Versioning:** Shield **2.15.0** is the **ViePilot framework SemVer** tracked in `.viepilot/TRACKER.md` and `CHANGELOG.md`. The npm `package.json` field `version` (**2.15.0**) is the Node package identifier for this repo; use the framework version for milestone releases and docs.
|
|
14
14
|
|
|
15
15
|
ViePilot là bộ skill framework cho phép AI assistant (Claude, GPT, etc.) phát triển dự án một cách **tự động**, **có kiểm soát**, và **có thể khôi phục**. Thiết kế theo các tiêu chuẩn chuyên nghiệp: Semantic Versioning, Conventional Commits, Keep a Changelog.
|
|
16
16
|
|
|
@@ -28,7 +28,7 @@ Nếu ViePilot giúp ích cho bạn, bạn có thể ủng hộ một ly cafe:
|
|
|
28
28
|
|
|
29
29
|
| Chỉ số / Metric | Giá trị / Value |
|
|
30
30
|
|-----------------|-----------------|
|
|
31
|
-
| Total LOC | **~
|
|
31
|
+
| Total LOC | **~51,713+** (`.md`, `.js`, `.cjs`, `.yml`, `.json`, `.sh`; không gồm `node_modules`) |
|
|
32
32
|
| Skills | **17** |
|
|
33
33
|
| Workflows | **12** |
|
|
34
34
|
| Templates | **17** (Project: 12, Phase: 5) |
|
|
@@ -61,11 +61,11 @@ Tổng thể / Overall: ██████████████████
|
|
|
61
61
|
| Lĩnh vực / Area | Trạng thái | Chi tiết |
|
|
62
62
|
|-----------------|------------|----------|
|
|
63
63
|
| Core Skills (17) | ✅ Hoàn thiện | brainstorm, crystallize, auto, pause, resume, status, info, request, evolve, docs, update, task, debug, rollback, audit, ui-components, **proposal** |
|
|
64
|
-
| Workflows (
|
|
64
|
+
| Workflows (13) | ✅ Hoàn thiện | Full step-by-step guides với success criteria |
|
|
65
65
|
| Project Templates (12) | ✅ Hoàn thiện | Placeholders cho customization (+ `VIEPILOT-META` FEAT-009) |
|
|
66
66
|
| Phase Templates (5) | ✅ Hoàn thiện | Task tracking, verification, summary |
|
|
67
67
|
| CLI Tools (18) | ✅ Hoàn thiện | vp-tools 17 subcommands + viepilot installer; bundle `info` / `update` |
|
|
68
|
-
| Tests (
|
|
68
|
+
| Tests (957) | ✅ Hoàn thiện | Unit, integration, AI compat, workflow contracts, installer, scope policy, FEAT-009~015, ENH-021~048, BUG-009~013, adapter tests, AskUserQuestion adapter-aware prompts |
|
|
69
69
|
| CI/CD | ✅ Hoàn thiện | GitHub Actions, Node 18/20/22 matrix, coverage >80% |
|
|
70
70
|
| Documentation | ✅ Hoàn thiện | dev/, user/, api/, videos/, examples/, troubleshooting |
|
|
71
71
|
| Standards | ✅ Hoàn thiện | SemVer, Conventional Commits, Keep a Changelog |
|
|
@@ -339,7 +339,7 @@ Full guide: `docs/dev/deployment.md`.
|
|
|
339
339
|
|
|
340
340
|
```
|
|
341
341
|
viepilot/
|
|
342
|
-
├── skills/ #
|
|
342
|
+
├── skills/ # 17 Skill definitions
|
|
343
343
|
│ ├── vp-brainstorm/ # Thu thập ý tưởng
|
|
344
344
|
│ │ └── SKILL.md
|
|
345
345
|
│ ├── vp-crystallize/ # Tạo artifacts
|
|
@@ -357,7 +357,7 @@ viepilot/
|
|
|
357
357
|
│ ├── vp-rollback/ # Checkpoint recovery
|
|
358
358
|
│ └── vp-audit/ # Documentation sync
|
|
359
359
|
│
|
|
360
|
-
├── workflows/ #
|
|
360
|
+
├── workflows/ # 13 Workflow definitions
|
|
361
361
|
│ ├── brainstorm.md # Brainstorm session flow
|
|
362
362
|
│ ├── crystallize.md # Artifact generation flow
|
|
363
363
|
│ ├── autonomous.md # Execution loop
|
|
@@ -368,6 +368,8 @@ viepilot/
|
|
|
368
368
|
│ ├── documentation.md # Docs generation
|
|
369
369
|
│ ├── debug.md # Debug session workflow
|
|
370
370
|
│ ├── rollback.md # Rollback workflow
|
|
371
|
+
│ ├── ui-components.md # UI component workflow
|
|
372
|
+
│ ├── proposal.md # Proposal generation
|
|
371
373
|
│ └── audit.md # Audit workflow
|
|
372
374
|
│
|
|
373
375
|
├── templates/ # 17 Templates
|
package/docs/skills-reference.md
CHANGED
|
@@ -45,6 +45,10 @@ Complete reference for all ViePilot skills.
|
|
|
45
45
|
- **Product horizon:** session file giữ **`## Product horizon`** (MVP / Post-MVP / Future tags, deferred capabilities, hoặc single-release statement) để `/vp-crystallize` không bỏ sót post-MVP — xem `workflows/brainstorm.md`.
|
|
46
46
|
- UI Direction (optional): `.viepilot/ui-direction/{session-id}/` — legacy (`index.html`) hoặc multi-page (`pages/*.html` + hub + `## Pages inventory` trong `notes.md`). Chi tiết: [UI Direction](user/features/ui-direction.md).
|
|
47
47
|
|
|
48
|
+
### Adapter-Aware Interactive Prompts (ENH-048)
|
|
49
|
+
- **Claude Code (terminal)**: dùng `AskUserQuestion` tool — click-to-select UI cho session intent + landing page layout
|
|
50
|
+
- **Cursor / Codex / Antigravity / other**: tự động fallback về text list — không cần cấu hình
|
|
51
|
+
|
|
48
52
|
---
|
|
49
53
|
|
|
50
54
|
## /vp-crystallize
|
|
@@ -101,6 +105,10 @@ LICENSE
|
|
|
101
105
|
README.md
|
|
102
106
|
```
|
|
103
107
|
|
|
108
|
+
### Adapter-Aware Interactive Prompts (ENH-048)
|
|
109
|
+
- **Claude Code (terminal)**: dùng `AskUserQuestion` tool cho license selection, brownfield overwrite confirm, polyrepo prompt, UI direction gate, architect suggestion
|
|
110
|
+
- **Cursor / Codex / Antigravity / other**: tự động fallback về text list — không cần cấu hình
|
|
111
|
+
|
|
104
112
|
---
|
|
105
113
|
|
|
106
114
|
## /vp-auto
|
|
@@ -313,6 +321,10 @@ CHANGELOG.md (updated)
|
|
|
313
321
|
4. Add to backlog
|
|
314
322
|
5. Offer routing options (fix now, add to phase, etc.)
|
|
315
323
|
|
|
324
|
+
### Adapter-Aware Interactive Prompts (ENH-048)
|
|
325
|
+
- **Claude Code (terminal)**: dùng `AskUserQuestion` tool cho request type detection, bug severity, feature priority
|
|
326
|
+
- **Cursor / Codex / Antigravity / other**: tự động fallback về text list — không cần cấu hình
|
|
327
|
+
|
|
316
328
|
---
|
|
317
329
|
|
|
318
330
|
## /vp-debug
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Interactive Prompts (AskUserQuestion)
|
|
2
|
+
|
|
3
|
+
> **ENH-048** — Introduced in v2.15.0
|
|
4
|
+
|
|
5
|
+
ViePilot skills that ask user questions now use **adapter-aware interactive prompts**.
|
|
6
|
+
In Claude Code (terminal), questions appear as structured click-to-select UI.
|
|
7
|
+
All other adapters fall back to plain-text numbered lists automatically.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## How It Works
|
|
12
|
+
|
|
13
|
+
When a vp-* skill needs input (e.g. "What type of request?"), it checks whether
|
|
14
|
+
the `AskUserQuestion` tool is available in the current adapter:
|
|
15
|
+
|
|
16
|
+
| Adapter | Experience |
|
|
17
|
+
|---------|------------|
|
|
18
|
+
| **Claude Code (terminal)** | Click-to-select options with descriptions, optional multi-select, preview panels |
|
|
19
|
+
| **Claude Code (VS Code ext)** | Terminal mode — same as above (VS Code interactive UI pending [#12609](https://github.com/anthropics/claude-code/issues/12609)) |
|
|
20
|
+
| **Cursor — Plan Mode** | `AskQuestion` available in Plan Mode only |
|
|
21
|
+
| **Cursor — Agent/Skills** | Text fallback (AskQuestion not in Agent Mode) |
|
|
22
|
+
| **Codex CLI** | Text fallback (native tool N/A) |
|
|
23
|
+
| **Antigravity native** | Text fallback (Artifact model, no raw tool calls) |
|
|
24
|
+
|
|
25
|
+
No configuration needed. The fallback is automatic.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Affected Skills and Prompts
|
|
30
|
+
|
|
31
|
+
### /vp-crystallize
|
|
32
|
+
| Prompt | AUQ Options |
|
|
33
|
+
|--------|-------------|
|
|
34
|
+
| License selection | MIT / Apache-2.0 / GPL-3.0 / Proprietary |
|
|
35
|
+
| Brownfield overwrite confirm | Yes, continue / No, abort |
|
|
36
|
+
| Polyrepo related-repos | Yes, I'll list them / Skip for now |
|
|
37
|
+
| UI direction gate | Return to brainstorm / Continue with assumptions |
|
|
38
|
+
| Architect mode suggestion | Yes, architect mode / No, continue now |
|
|
39
|
+
|
|
40
|
+
### /vp-brainstorm
|
|
41
|
+
| Prompt | AUQ Options |
|
|
42
|
+
|--------|-------------|
|
|
43
|
+
| Session intent | Continue recent / Review specific / New session |
|
|
44
|
+
| Landing page layout | Layout A (Hero) / Layout B (Problem-Solution) / Layout C (Storytelling) / Layout D (SaaS) |
|
|
45
|
+
|
|
46
|
+
### /vp-request
|
|
47
|
+
| Prompt | AUQ Options |
|
|
48
|
+
|--------|-------------|
|
|
49
|
+
| Request type | Bug / Feature / Enhancement / Tech Debt |
|
|
50
|
+
| Bug severity | Critical / High / Medium / Low |
|
|
51
|
+
| Feature priority | Must-have / Should-have / Nice-to-have |
|
|
52
|
+
|
|
53
|
+
### /vp-evolve
|
|
54
|
+
| Prompt | AUQ Options |
|
|
55
|
+
|--------|-------------|
|
|
56
|
+
| Evolve intent | Add Feature / New Milestone / Refactor |
|
|
57
|
+
| Complexity | S (Small) / M (Medium) / L (Large) / XL (Extra Large) |
|
|
58
|
+
| Brainstorm routing | Yes, brainstorm first / No, plan directly |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## AskUserQuestion Tool Constraints
|
|
63
|
+
|
|
64
|
+
When using Claude Code, the tool has these constraints:
|
|
65
|
+
- **1–4 questions** per call
|
|
66
|
+
- **2–4 options** per question
|
|
67
|
+
- Optional `multiSelect: true` for non-exclusive choices
|
|
68
|
+
- Optional `preview` field for visual comparisons (code/layout mockups)
|
|
69
|
+
- Automatic "Other" option always appended by the UI
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Research Notes (Adapter Support)
|
|
74
|
+
|
|
75
|
+
Research conducted 2026-04-13 confirmed:
|
|
76
|
+
|
|
77
|
+
- **Cursor Agent/Skills Mode** does not expose `AskQuestion` — it only works in Plan Mode
|
|
78
|
+
([community request](https://forum.cursor.com/t/allow-askquestion-tool-calls-in-agent-mode-or-any-mode/152517))
|
|
79
|
+
- **Codex CLI** `ask_user_question` is a community MCP skill, not a native tool
|
|
80
|
+
([openai/codex#9926](https://github.com/openai/codex/issues/9926))
|
|
81
|
+
- **Antigravity** uses an "Artifacts" model for agent output — no raw tool execution for interactive UI
|
|
82
|
+
|
|
83
|
+
All non-Claude-Code adapters receive identical plain-text prompts as before ENH-048.
|
package/package.json
CHANGED
|
@@ -107,3 +107,24 @@ Key steps:
|
|
|
107
107
|
- [ ] **FEAT-009**: intake completed, binding already present, **or** waiver with reason before Completed; session records **`## Project meta intake (FEAT-009)`**
|
|
108
108
|
- [ ] Next steps suggested
|
|
109
109
|
</success_criteria>
|
|
110
|
+
|
|
111
|
+
## Adapter Compatibility
|
|
112
|
+
|
|
113
|
+
### AskUserQuestion Tool (ENH-048)
|
|
114
|
+
This skill uses adapter-aware interactive prompts. Behavior depends on your adapter:
|
|
115
|
+
|
|
116
|
+
| Adapter | Interactive Prompts | Notes |
|
|
117
|
+
|---------|---------------------|-------|
|
|
118
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` tool | Click-to-select UI, multi-select, preview panels |
|
|
119
|
+
| Claude Code (VS Code ext) | ⚠️ Partial | Terminal yes; VS Code UI pending [anthropics/claude-code#12609](https://github.com/anthropics/claude-code/issues/12609) |
|
|
120
|
+
| Cursor (Plan Mode) | ⚠️ Partial | `AskQuestion` in Plan Mode only — not in Agent/Skills Mode |
|
|
121
|
+
| Cursor (Agent/Skills) | ❌ Text fallback | AskQuestion not available in Agent Mode |
|
|
122
|
+
| Codex CLI | ❌ Text fallback | Native tool N/A; community MCP available |
|
|
123
|
+
| Antigravity (native agent) | ❌ Text fallback | Artifact model, no raw tool calls |
|
|
124
|
+
|
|
125
|
+
When `AskUserQuestion` is not available, the skill automatically falls back to
|
|
126
|
+
plain-text numbered list prompts — no configuration required.
|
|
127
|
+
|
|
128
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
129
|
+
- Session intent (continue / review / new — Step 2)
|
|
130
|
+
- Landing page layout selection (Step 4 — Layout A/B/C/D)
|
|
@@ -100,8 +100,21 @@ Scanner runs 12 signal categories across the existing codebase:
|
|
|
100
100
|
11. **Git history** — commit convention, version pattern, contributors, repo URL
|
|
101
101
|
12. **Language survey** — file extension glob → language distribution
|
|
102
102
|
|
|
103
|
+
**Multi-repo / monorepo support (ENH-047):**
|
|
104
|
+
|
|
105
|
+
- **Git submodule detection** — reads `.gitmodules`; scans each initialized submodule path (Signal Cat 1+2+4); records uninitialized paths as `primary_language: MISSING`. Never runs `git submodule update` — read-only.
|
|
106
|
+
- **Polyrepo hints** — detects docker-compose `../` build contexts, `file:../` deps, CI cross-repo clones, README external links, Makefile `cd ../` targets; outputs `polyrepo_hints[]`; prompts user to supply `related_repos[]` (optional).
|
|
107
|
+
- **Per-module gap detection** — every `modules[]` entry carries `gap_tier` (DETECTED/ASSUMED/MISSING), `must_detect_status{}` (evidence per field: value + source + tier), and `open_questions[]`. A module with `gap_tier: MISSING` blocks artifact generation with a targeted per-field prompt.
|
|
108
|
+
|
|
109
|
+
**Scan Report contains:**
|
|
110
|
+
- Root `gap_tier` (= worst tier across all modules: MISSING > ASSUMED > DETECTED)
|
|
111
|
+
- `modules[]` — one entry per workspace/submodule/root with `gap_tier`, `must_detect_status{}`, `open_questions[]`
|
|
112
|
+
- `polyrepo_hints[]` — polyrepo signals (omitted when empty, no empty arrays)
|
|
113
|
+
- `related_repos[]` — user-supplied sibling repos (omitted when empty)
|
|
114
|
+
- Root `open_questions[]` — includes rollup from all modules
|
|
115
|
+
|
|
103
116
|
Produces **Scan Report** (YAML) with DETECTED / ASSUMED / MISSING classification.
|
|
104
|
-
MUST-DETECT gaps (project_name, primary_language, ≥1 framework, current_version) block artifact generation until user fills interactively.
|
|
117
|
+
MUST-DETECT gaps (root: project_name, primary_language, ≥1 framework, current_version; per-module: primary_language, framework, module_purpose, entry_point) block artifact generation until user fills interactively.
|
|
105
118
|
Generates `docs/brainstorm/session-brownfield-import.md` stub for `vp-audit` compatibility.
|
|
106
119
|
Safety: never reads `.env`; skips `node_modules/`, `.git/`, `target/`, `build/`, `dist/`.
|
|
107
120
|
</objective>
|
|
@@ -250,3 +263,27 @@ Ask user for (confirm proposals from profile if present):
|
|
|
250
263
|
- [ ] **ENH-022:** Every generated Mermaid diagram has a `.viepilot/architecture/<canonical-name>.mermaid` file in sync with `ARCHITECTURE.md` (no extra files created for N/A)
|
|
251
264
|
- [ ] **FEAT-009:** When profile is bound — ARCHITECTURE + PROJECT-CONTEXT record the profile source; if not — state none / not configured explicitly
|
|
252
265
|
</success_criteria>
|
|
266
|
+
|
|
267
|
+
## Adapter Compatibility
|
|
268
|
+
|
|
269
|
+
### AskUserQuestion Tool (ENH-048)
|
|
270
|
+
This skill uses adapter-aware interactive prompts. Behavior depends on your adapter:
|
|
271
|
+
|
|
272
|
+
| Adapter | Interactive Prompts | Notes |
|
|
273
|
+
|---------|---------------------|-------|
|
|
274
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` tool | Click-to-select UI, multi-select, preview panels |
|
|
275
|
+
| Claude Code (VS Code ext) | ⚠️ Partial | Terminal yes; VS Code UI pending [anthropics/claude-code#12609](https://github.com/anthropics/claude-code/issues/12609) |
|
|
276
|
+
| Cursor (Plan Mode) | ⚠️ Partial | `AskQuestion` in Plan Mode only — not in Agent/Skills Mode |
|
|
277
|
+
| Cursor (Agent/Skills) | ❌ Text fallback | AskQuestion not available in Agent Mode |
|
|
278
|
+
| Codex CLI | ❌ Text fallback | Native tool N/A; community MCP available |
|
|
279
|
+
| Antigravity (native agent) | ❌ Text fallback | Artifact model, no raw tool calls |
|
|
280
|
+
|
|
281
|
+
When `AskUserQuestion` is not available, the skill automatically falls back to
|
|
282
|
+
plain-text numbered list prompts — no configuration required.
|
|
283
|
+
|
|
284
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
285
|
+
- License selection (Step 0 metadata)
|
|
286
|
+
- Brownfield overwrite confirmation (Step 0-B)
|
|
287
|
+
- Polyrepo related-repos prompt (Step 0-B)
|
|
288
|
+
- UI direction gate choice (Step 1A)
|
|
289
|
+
- Architect mode suggestion (Step 1D)
|
package/skills/vp-docs/SKILL.md
CHANGED
|
@@ -80,19 +80,29 @@ Optional flags:
|
|
|
80
80
|
|
|
81
81
|
### Step 0: Resolve Project Context (ALWAYS first)
|
|
82
82
|
```bash
|
|
83
|
-
#
|
|
83
|
+
# Forge-agnostic remote URL parser — supports GitHub, GitLab, Bitbucket, Azure DevOps, Gitea, self-hosted
|
|
84
84
|
REMOTE_URL=$(git remote get-url origin 2>/dev/null || echo "")
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
if echo "$REMOTE_URL" | grep -q 'dev\.azure\.com'; then
|
|
86
|
+
GIT_HOST="dev.azure.com"
|
|
87
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|.*dev\.azure\.com/||; s|/.*||')
|
|
88
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|.*/_git/||; s|\.git$||; s|/$||')
|
|
89
|
+
elif echo "$REMOTE_URL" | grep -q '^git@'; then
|
|
90
|
+
GIT_HOST=$(echo "$REMOTE_URL" | sed 's|^git@||; s|:.*||')
|
|
91
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|^git@[^:]*:||; s|/.*||')
|
|
92
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|^git@[^:]*:[^/]*/||; s|\.git$||')
|
|
93
|
+
else
|
|
94
|
+
GIT_HOST=$(echo "$REMOTE_URL" | sed 's|^https\?://||; s|/.*||')
|
|
95
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|^https\?://[^/]*/||; s|/.*||')
|
|
96
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|^https\?://[^/]*/[^/]*/||; s|\.git$||; s|/$||')
|
|
97
|
+
fi
|
|
88
98
|
# Fallback: use searchable placeholder, not 'your-org'
|
|
89
|
-
[ -z "$
|
|
99
|
+
[ -z "$GIT_OWNER" ] && GIT_HOST="{GIT_HOST}" && GIT_OWNER="{GIT_OWNER}" && GIT_REPO="{GIT_REPO}"
|
|
90
100
|
|
|
91
101
|
ACTUAL_SKILLS=$(ls skills/*/SKILL.md 2>/dev/null | wc -l | tr -d ' ')
|
|
92
102
|
ACTUAL_WORKFLOWS=$(ls workflows/*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
93
103
|
```
|
|
94
104
|
|
|
95
|
-
> Use `$
|
|
105
|
+
> Use `$GIT_HOST`, `$GIT_OWNER`, `$GIT_REPO` in all generated files.
|
|
96
106
|
> Use `$ACTUAL_SKILLS` and `$ACTUAL_WORKFLOWS` for counts.
|
|
97
107
|
> **Never write** `your-org`, `YOUR_USERNAME`, `YOUR_ORG` into generated files.
|
|
98
108
|
|
|
@@ -265,3 +265,25 @@ Update `.viepilot/TRACKER.md`:
|
|
|
265
265
|
- [ ] TRACKER.md updated
|
|
266
266
|
- [ ] Appropriate routing suggested
|
|
267
267
|
</success_criteria>
|
|
268
|
+
|
|
269
|
+
## Adapter Compatibility
|
|
270
|
+
|
|
271
|
+
### AskUserQuestion Tool (ENH-048)
|
|
272
|
+
This skill uses adapter-aware interactive prompts. Behavior depends on your adapter:
|
|
273
|
+
|
|
274
|
+
| Adapter | Interactive Prompts | Notes |
|
|
275
|
+
|---------|---------------------|-------|
|
|
276
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` tool | Click-to-select UI, multi-select, preview panels |
|
|
277
|
+
| Claude Code (VS Code ext) | ⚠️ Partial | Terminal yes; VS Code UI pending [anthropics/claude-code#12609](https://github.com/anthropics/claude-code/issues/12609) |
|
|
278
|
+
| Cursor (Plan Mode) | ⚠️ Partial | `AskQuestion` in Plan Mode only — not in Agent/Skills Mode |
|
|
279
|
+
| Cursor (Agent/Skills) | ❌ Text fallback | AskQuestion not available in Agent Mode |
|
|
280
|
+
| Codex CLI | ❌ Text fallback | Native tool N/A; community MCP available |
|
|
281
|
+
| Antigravity (native agent) | ❌ Text fallback | Artifact model, no raw tool calls |
|
|
282
|
+
|
|
283
|
+
When `AskUserQuestion` is not available, the skill automatically falls back to
|
|
284
|
+
plain-text numbered list prompts — no configuration required.
|
|
285
|
+
|
|
286
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
287
|
+
- Request type detection (Bug / Feature / Enhancement / Tech Debt — Step 2)
|
|
288
|
+
- Bug severity selection (Critical / High / Medium / Low — Step 4A)
|
|
289
|
+
- Feature priority selection (Must-have / Should-have / Nice-to-have — Step 4B)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/workflows/brainstorm.md
CHANGED
|
@@ -3,6 +3,14 @@ Interactive brainstorm session to gather ideas, requirements, and decisions for
|
|
|
3
3
|
Allows research inline within the same brainstorm session when needed.
|
|
4
4
|
</purpose>
|
|
5
5
|
|
|
6
|
+
## Adapter Compatibility
|
|
7
|
+
|
|
8
|
+
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
9
|
+
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
10
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
11
|
+
|
|
12
|
+
When `AskUserQuestion` is not available, each prompt block falls back to the plain-text numbered list shown below it — no configuration needed.
|
|
13
|
+
|
|
6
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
7
15
|
|
|
8
16
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -37,6 +45,15 @@ Parse results to get list of existing sessions.
|
|
|
37
45
|
## 2. Ask User Intent
|
|
38
46
|
|
|
39
47
|
**If previous sessions exist:**
|
|
48
|
+
|
|
49
|
+
> **Adapter-aware prompt:**
|
|
50
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
51
|
+
> - question: "Previous brainstorm sessions found. What would you like to do?"
|
|
52
|
+
> - header: "Session"
|
|
53
|
+
> - 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
|
+
> - multiSelect: false
|
|
55
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below
|
|
56
|
+
|
|
40
57
|
```
|
|
41
58
|
I found previous brainstorm sessions:
|
|
42
59
|
{list sessions with dates}
|
|
@@ -118,6 +135,15 @@ If the user is brainstorming a landing page / homepage / marketing page:
|
|
|
118
135
|
- Visual tone? (minimal, modern, bold, enterprise, playful)
|
|
119
136
|
- Primary CTA and secondary CTA?
|
|
120
137
|
2. Present a layout menu for the user to choose from:
|
|
138
|
+
|
|
139
|
+
> **Adapter-aware prompt:**
|
|
140
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
141
|
+
> - question: "Which landing page layout fits your goals and audience?"
|
|
142
|
+
> - header: "Layout"
|
|
143
|
+
> - 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
|
+
> - multiSelect: false
|
|
145
|
+
> - **Cursor / Codex / Antigravity / other:** use list below
|
|
146
|
+
|
|
121
147
|
- Layout A: Hero centric + trust logos + features + CTA
|
|
122
148
|
- Layout B: Problem/Solution + social proof + pricing + FAQ
|
|
123
149
|
- Layout C: Product storytelling + screenshots + testimonials + final CTA
|
package/workflows/crystallize.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
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 | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
11
|
+
When `AskUserQuestion` is not available, each prompt block falls back to the plain-text numbered list shown below it — no configuration needed.
|
|
12
|
+
|
|
5
13
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
14
|
|
|
7
15
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -80,7 +88,7 @@ Ask the user for project information:
|
|
|
80
88
|
|
|
81
89
|
9. Lead developer email?
|
|
82
90
|
|
|
83
|
-
10.
|
|
91
|
+
10. Git remote host / username? (optional — e.g. github.com/johndoe, gitlab.com/org, bitbucket.org/team)
|
|
84
92
|
```
|
|
85
93
|
|
|
86
94
|
### Repository Info
|
|
@@ -92,6 +100,15 @@ Ask the user for project information:
|
|
|
92
100
|
```
|
|
93
101
|
|
|
94
102
|
### License & Year
|
|
103
|
+
|
|
104
|
+
> **Adapter-aware prompt (question 13):**
|
|
105
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
106
|
+
> - question: "Which license for this project?"
|
|
107
|
+
> - header: "License"
|
|
108
|
+
> - 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
|
+
> - multiSelect: false
|
|
110
|
+
> - **Cursor / Codex / Antigravity / other:** use text list below
|
|
111
|
+
|
|
95
112
|
```
|
|
96
113
|
13. License?
|
|
97
114
|
Options: MIT, Apache-2.0, GPL-3.0, BSD-3-Clause, Proprietary
|
|
@@ -115,7 +132,16 @@ Store all metadata for template generation.
|
|
|
115
132
|
|
|
116
133
|
**If brownfield triggered AND `.viepilot/` already exists:**
|
|
117
134
|
- Warn: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts."
|
|
118
|
-
|
|
135
|
+
|
|
136
|
+
> **Adapter-aware prompt:**
|
|
137
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
138
|
+
> - question: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts. Continue?"
|
|
139
|
+
> - header: "Overwrite?"
|
|
140
|
+
> - options: [{ label: "Yes, continue", description: "Overwrite existing .viepilot/ artifacts with new scan results" }, { label: "No, abort", description: "Stop here — keep existing artifacts unchanged" }]
|
|
141
|
+
> - multiSelect: false
|
|
142
|
+
> - **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
143
|
+
>
|
|
144
|
+
> Ask: "Continue? (y/n)" — abort if n.
|
|
119
145
|
|
|
120
146
|
**When brownfield mode is active:**
|
|
121
147
|
1. Run the full 12-category codebase scanner (Signal Categories 1–12 below).
|
|
@@ -165,6 +191,64 @@ Probe the following files in order of priority (first match per language wins):
|
|
|
165
191
|
|
|
166
192
|
If monorepo detected → scan each module separately; aggregate into `modules[]` in Scan Report.
|
|
167
193
|
|
|
194
|
+
**Git Submodule Detection** (run after monorepo check):
|
|
195
|
+
- Check for `.gitmodules` file at repo root
|
|
196
|
+
- If present: parse all `[submodule "name"]` blocks → extract `name`, `path`, `url`
|
|
197
|
+
- For each submodule path:
|
|
198
|
+
- If path exists on disk (initialized):
|
|
199
|
+
- Run Signal Cat 1 (manifest scan) on `{path}/`
|
|
200
|
+
- Run Signal Cat 2 (framework) on `{path}/`
|
|
201
|
+
- Run Signal Cat 4 (DB signals) on `{path}/`
|
|
202
|
+
- Record `initialized: true`
|
|
203
|
+
- If path absent (not initialized):
|
|
204
|
+
- Record `initialized: false`, `primary_language: MISSING`
|
|
205
|
+
- Add open question: "Submodule '{name}' not initialized — run `git submodule update --init {path}` to scan it"
|
|
206
|
+
- Add each submodule to `modules[]` with `type: submodule`
|
|
207
|
+
|
|
208
|
+
> **SAFETY RULE**: Never run `git submodule update`, `git submodule init`, or any git network command during scan. Read the local filesystem only.
|
|
209
|
+
|
|
210
|
+
**Polyrepo / Multi-Repo Detection** (run after submodule check):
|
|
211
|
+
|
|
212
|
+
Scan the following signals to determine if this repo is part of a larger multi-repo system:
|
|
213
|
+
|
|
214
|
+
| Signal Source | Pattern | Interpretation |
|
|
215
|
+
|--------------|---------|----------------|
|
|
216
|
+
| `docker-compose.yml` / `docker-compose*.yml` | `build: ../path` or `context: ../path` (value starts with `../`) | Sibling repo used as build context |
|
|
217
|
+
| `docker-compose.yml` | Multiple services with external `image:` and no local `build:` | External microservices — possible sibling repos |
|
|
218
|
+
| `package.json` | `"dependencies"` or `"devDependencies"` value matching `"file:../..."` | Local `file:` sibling repo dependency |
|
|
219
|
+
| `.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 |
|
|
220
|
+
| `README.md` / `CONTRIBUTING.md` | Lines containing a repo URL whose path differs from the current repo's remote | Related repo link in docs |
|
|
221
|
+
| `Makefile` / `justfile` | Targets containing `cd ../` followed by build/test commands | Cross-repo build orchestration |
|
|
222
|
+
|
|
223
|
+
For each match: record `{ source, hint, inferred_repo }` in `polyrepo_hints[]`.
|
|
224
|
+
Deduplicate by `inferred_repo` name.
|
|
225
|
+
If `polyrepo_hints` is empty → skip this section entirely (no empty array in clean single-repo Scan Reports).
|
|
226
|
+
|
|
227
|
+
**Interactive prompt** (fire when `polyrepo_hints` non-empty):
|
|
228
|
+
|
|
229
|
+
> **Adapter-aware prompt:**
|
|
230
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
231
|
+
> - question: "Polyrepo signals detected — this repo may be part of a multi-repo system. Would you like to provide related repo URLs?"
|
|
232
|
+
> - header: "Polyrepo?"
|
|
233
|
+
> - 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
|
+
> - multiSelect: false
|
|
235
|
+
> - **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
⚠️ Polyrepo signals detected:
|
|
239
|
+
{list polyrepo_hints}
|
|
240
|
+
|
|
241
|
+
This repo appears to be part of a multi-repo system.
|
|
242
|
+
Would you like to list related repos? (optional — press Enter to skip)
|
|
243
|
+
Format: one URL per line, e.g. https://github.com/org/api-service [backend]
|
|
244
|
+
```
|
|
245
|
+
- User-supplied repos → stored in `related_repos[]` as `{ url, role }`
|
|
246
|
+
- If user skips → `related_repos: []`; system-level context fields set to **ASSUMED** tier
|
|
247
|
+
|
|
248
|
+
**Gap-fill rule for polyrepo:**
|
|
249
|
+
- `polyrepo_hints` non-empty AND `related_repos` empty → system-level fields (e.g. `deployment_topology`) = ASSUMED (not MISSING; single-repo scan is still valid)
|
|
250
|
+
- `related_repos` populated → system-level fields = DETECTED for user-supplied context
|
|
251
|
+
|
|
168
252
|
If no manifest found → `primary_language` = MISSING; user must provide.
|
|
169
253
|
|
|
170
254
|
---
|
|
@@ -487,8 +571,34 @@ frameworks:
|
|
|
487
571
|
build_tool: string
|
|
488
572
|
package_manager: string
|
|
489
573
|
monorepo: bool
|
|
490
|
-
|
|
574
|
+
gap_tier: DETECTED | ASSUMED | MISSING # root rollup = worst tier across all modules
|
|
575
|
+
modules: # if monorepo or submodules detected
|
|
576
|
+
- name: string # workspace package name or submodule name
|
|
577
|
+
type: workspace | submodule | root # workspace = monorepo member; submodule = git submodule
|
|
578
|
+
path: string # repo-relative path
|
|
579
|
+
submodule_url: string | null # remote URL from .gitmodules (null if not submodule)
|
|
580
|
+
initialized: bool # true if path exists on disk (submodules only)
|
|
581
|
+
primary_language: string
|
|
582
|
+
framework: string | null
|
|
583
|
+
module_purpose: string # inferred from dir name + manifest description
|
|
584
|
+
entry_point: string | null # main entry file path
|
|
585
|
+
gap_tier: DETECTED | ASSUMED | MISSING
|
|
586
|
+
must_detect_status: # evidence record per MUST-DETECT field
|
|
587
|
+
primary_language: { value: string, source: string, tier: string }
|
|
588
|
+
framework: { value: string, source: string, tier: string }
|
|
589
|
+
module_purpose: { value: string, source: string, tier: string }
|
|
590
|
+
entry_point: { value: string, source: string, tier: string }
|
|
591
|
+
open_questions: [] # per-module open questions
|
|
592
|
+
polyrepo_hints: # present only when polyrepo signals detected
|
|
593
|
+
- source: string # e.g. docker-compose.yml
|
|
594
|
+
hint: string # raw signal text
|
|
595
|
+
inferred_repo: string # guessed sibling repo name
|
|
596
|
+
related_repos: # present only when user supplied input after prompt
|
|
597
|
+
- url: string
|
|
598
|
+
role: string # backend | frontend | shared-library | infra | etc.
|
|
491
599
|
architecture_layers: [] # { layer, evidence_path }
|
|
600
|
+
module_dependencies: [] # { from, to, type, evidence_path } — Gap D (Phase 78)
|
|
601
|
+
dependency_cycles: [] # cycle paths detected — Gap D (Phase 78)
|
|
492
602
|
database_signals: [] # { type, evidence_path, migration_tool }
|
|
493
603
|
api_contracts: [] # { style, file_path }
|
|
494
604
|
api_style: string # REST | GraphQL | gRPC | mixed | unknown
|
|
@@ -505,7 +615,7 @@ repo_url: string
|
|
|
505
615
|
top_contributors: []
|
|
506
616
|
docs_extracted: [] # { file, summary, key_facts[] }
|
|
507
617
|
language_distribution: {} # { ts: 142, java: 38, ... }
|
|
508
|
-
open_questions: [] #
|
|
618
|
+
open_questions: [] # root-level open questions (includes rollup from modules)
|
|
509
619
|
```
|
|
510
620
|
|
|
511
621
|
---
|
|
@@ -540,15 +650,73 @@ Every field in Scan Report is classified as:
|
|
|
540
650
|
|
|
541
651
|
---
|
|
542
652
|
|
|
653
|
+
### Per-Module Gap Detection
|
|
654
|
+
|
|
655
|
+
Applies to every entry in `modules[]` (monorepo workspace members, git submodules, and root if single-repo). Each module is assessed independently.
|
|
656
|
+
|
|
657
|
+
**Per-module MUST-DETECT fields:**
|
|
658
|
+
|
|
659
|
+
| Field | Source signals | Tier if absent |
|
|
660
|
+
|-------|---------------|----------------|
|
|
661
|
+
| `primary_language` | Manifest extension, file survey (Signal Cat 12), `tsconfig.json`, `pyproject.toml` | MISSING — must ask user |
|
|
662
|
+
| `framework` | Signal Cat 2 dep patterns scanned on module path | ASSUMED if no dep match; MISSING if no manifest found |
|
|
663
|
+
| `module_purpose` | Manifest `description` field, directory name convention, README first line | ASSUMED (infer from dir name); MISSING if none of the above |
|
|
664
|
+
| `entry_point` | `main` in `package.json`; `src/index.*`; `cmd/main.go`; `*Application.java` | ASSUMED if standard path exists; MISSING otherwise |
|
|
665
|
+
|
|
666
|
+
**Gap tier assignment per module:**
|
|
667
|
+
```
|
|
668
|
+
DETECTED — all MUST-DETECT fields sourced directly from file evidence (no inference)
|
|
669
|
+
ASSUMED — ≥1 MUST-DETECT field inferred by convention (no direct file evidence, but plausible)
|
|
670
|
+
MISSING — ≥1 MUST-DETECT field has no evidence and cannot be inferred
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
**`must_detect_status` evidence conventions:**
|
|
674
|
+
- `source: "tsconfig.json"` — read from a specific file
|
|
675
|
+
- `source: "inferred"` — derived by directory name / naming convention (tier = ASSUMED)
|
|
676
|
+
- `source: "absent"` — no evidence found (tier = MISSING)
|
|
677
|
+
- `source: "user"` — provided by user during gap-filling (tier = DETECTED)
|
|
678
|
+
|
|
679
|
+
**Root gap tier rollup:**
|
|
680
|
+
```
|
|
681
|
+
root gap_tier = worst tier across all modules
|
|
682
|
+
Priority order: MISSING > ASSUMED > DETECTED
|
|
683
|
+
```
|
|
684
|
+
If any module is MISSING → root `gap_tier` = MISSING → artifact generation blocked until resolved.
|
|
685
|
+
If all modules are DETECTED or ASSUMED → root `gap_tier` matches the worst module tier.
|
|
686
|
+
|
|
687
|
+
**Scan summary printout** (show after all modules scanned):
|
|
688
|
+
```
|
|
689
|
+
Module scan summary:
|
|
690
|
+
┌─────────────────┬──────────────────┬────────────┬──────────────┬───────────┐
|
|
691
|
+
│ Module │ Path │ Language │ Framework │ Gap Tier │
|
|
692
|
+
├─────────────────┼──────────────────┼────────────┼──────────────┼───────────┤
|
|
693
|
+
│ api-service │ apps/api │ TypeScript │ NestJS │ DETECTED │
|
|
694
|
+
│ web-client │ apps/web │ TypeScript │ React │ DETECTED │
|
|
695
|
+
│ shared-lib │ libs/shared │ TypeScript │ — │ ASSUMED │
|
|
696
|
+
│ legacy-worker │ services/worker │ MISSING │ MISSING │ MISSING │
|
|
697
|
+
└─────────────────┴──────────────────┴────────────┴──────────────┴───────────┘
|
|
698
|
+
Root gap tier: MISSING (worst across modules)
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
543
703
|
### Interactive Gap-Filling (Step 0-B-ii)
|
|
544
704
|
|
|
545
705
|
After scanner completes:
|
|
546
706
|
|
|
547
707
|
1. Display Scan Report summary table to user (field | value | status).
|
|
548
|
-
2.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
708
|
+
2. **Per-module MISSING fields** — for each module with `gap_tier: MISSING`, pause and ask per field:
|
|
709
|
+
```
|
|
710
|
+
⛔ Module '{name}' (path: {path}) has MISSING required fields:
|
|
711
|
+
- {field}: no evidence found
|
|
712
|
+
Please provide {field}:
|
|
713
|
+
```
|
|
714
|
+
Record answer as `{ value: user_input, source: "user", tier: DETECTED }`.
|
|
715
|
+
Do NOT proceed to artifact generation until all MISSING module fields are filled.
|
|
716
|
+
3. For each root-level MUST-DETECT field that is MISSING → **pause and ask user to provide value**.
|
|
717
|
+
4. Present ASSUMED fields (root + per-module) in a confirmation table → user may accept all with "y" or override individually.
|
|
718
|
+
5. Capture all user responses; update Scan Report fields accordingly.
|
|
719
|
+
6. All remaining unresolved items → `open_questions[]` (roll up per-module `open_questions[]` into root).
|
|
552
720
|
|
|
553
721
|
---
|
|
554
722
|
|
|
@@ -673,6 +841,14 @@ Check if `.viepilot/ui-direction/` exists and contains any session artifacts.
|
|
|
673
841
|
|
|
674
842
|
If `ui_scope_detected = true` **AND** artifacts are missing → **STOP** and present:
|
|
675
843
|
|
|
844
|
+
> **Adapter-aware prompt:**
|
|
845
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
846
|
+
> - question: "UI Direction artifacts missing. The brainstorm indicates UI scope but `.viepilot/ui-direction/` has no artifacts. How to proceed?"
|
|
847
|
+
> - header: "UI Direction"
|
|
848
|
+
> - 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
|
+
> - multiSelect: false
|
|
850
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below
|
|
851
|
+
|
|
676
852
|
```
|
|
677
853
|
⚠️ UI Direction artifacts missing
|
|
678
854
|
|
|
@@ -838,6 +1014,15 @@ If `.viepilot/architect/` exists with at least one session directory:
|
|
|
838
1014
|
|
|
839
1015
|
If `.viepilot/architect/` does **not** exist but brainstorm shows complex architecture (≥5 services/components detected):
|
|
840
1016
|
- Suggest (soft prompt — not a hard block):
|
|
1017
|
+
|
|
1018
|
+
> **Adapter-aware prompt:**
|
|
1019
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
1020
|
+
> - question: "Complex architecture detected (≥5 services/components). Would you like to create architecture visualizations first with /vp-brainstorm --architect?"
|
|
1021
|
+
> - header: "Architect?"
|
|
1022
|
+
> - 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
|
+
> - multiSelect: false
|
|
1024
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below
|
|
1025
|
+
|
|
841
1026
|
```
|
|
842
1027
|
💡 Would you like to return to /vp-brainstorm --architect to create visualizations first?
|
|
843
1028
|
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,14 @@
|
|
|
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 | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
11
|
+
When `AskUserQuestion` is not available, each prompt block falls back to the plain-text numbered list shown below it — no configuration needed.
|
|
12
|
+
|
|
5
13
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
14
|
|
|
7
15
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -44,7 +52,17 @@ Determine:
|
|
|
44
52
|
Version: {version}
|
|
45
53
|
|
|
46
54
|
How would you like to evolve the project?
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> **Adapter-aware prompt:**
|
|
58
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
59
|
+
> - question: "How would you like to evolve the project?"
|
|
60
|
+
> - header: "Evolve mode"
|
|
61
|
+
> - 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" }]
|
|
62
|
+
> - multiSelect: false
|
|
63
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below
|
|
47
64
|
|
|
65
|
+
```
|
|
48
66
|
1. Add Feature - Add new feature to current milestone
|
|
49
67
|
2. New Milestone - Start a new milestone (archive current)
|
|
50
68
|
3. Refactor - Improve existing code without new features
|
|
@@ -62,7 +80,25 @@ Describe the new feature:
|
|
|
62
80
|
2. What does it do? (1-2 sentences)
|
|
63
81
|
3. Which services/modules affected?
|
|
64
82
|
4. Dependencies on existing code?
|
|
83
|
+
|
|
84
|
+
> **Adapter-aware prompt (question 5 — complexity):**
|
|
85
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
86
|
+
> - question: "Estimated implementation complexity?"
|
|
87
|
+
> - header: "Complexity"
|
|
88
|
+
> - 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
|
+
> - multiSelect: false
|
|
90
|
+
> - **Cursor / Codex / Antigravity / other:** use text below
|
|
91
|
+
|
|
65
92
|
5. Estimated complexity? (S/M/L/XL)
|
|
93
|
+
|
|
94
|
+
> **Adapter-aware prompt (question 6 — brainstorm routing):**
|
|
95
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
96
|
+
> - question: "Does this feature need a brainstorm session first?"
|
|
97
|
+
> - header: "Brainstorm?"
|
|
98
|
+
> - 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
|
+
> - multiSelect: false
|
|
100
|
+
> - **Cursor / Codex / Antigravity / other:** use text below
|
|
101
|
+
|
|
66
102
|
6. Need deep brainstorm? (landing page / UX / growth ideas / research-heavy)
|
|
67
103
|
```
|
|
68
104
|
|
package/workflows/request.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
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 | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
11
|
+
When `AskUserQuestion` is not available, each prompt block falls back to the plain-text numbered list shown below it — no configuration needed.
|
|
12
|
+
|
|
5
13
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
14
|
|
|
7
15
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -53,6 +61,15 @@ Parse `{{VP_ARGS}}` for type flag:
|
|
|
53
61
|
- `--list` → List Requests
|
|
54
62
|
|
|
55
63
|
If no flag, ask user:
|
|
64
|
+
|
|
65
|
+
> **Adapter-aware prompt:**
|
|
66
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
67
|
+
> - question: "What type of request would you like to create?"
|
|
68
|
+
> - header: "Request type"
|
|
69
|
+
> - 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" }]
|
|
70
|
+
> - multiSelect: false
|
|
71
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below (Brainstorm and List options remain text-only)
|
|
72
|
+
|
|
56
73
|
```
|
|
57
74
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
75
|
VIEPILOT ► REQUEST
|
|
@@ -117,6 +134,15 @@ Options:
|
|
|
117
134
|
>
|
|
118
135
|
|
|
119
136
|
6. Severity?
|
|
137
|
+
|
|
138
|
+
> **Adapter-aware prompt:**
|
|
139
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
140
|
+
> - question: "What is the bug severity?"
|
|
141
|
+
> - header: "Severity"
|
|
142
|
+
> - 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" }]
|
|
143
|
+
> - multiSelect: false
|
|
144
|
+
> - **Cursor / Codex / Antigravity / other:** use text list below
|
|
145
|
+
|
|
120
146
|
1. Critical - System down, data loss
|
|
121
147
|
2. High - Major feature broken
|
|
122
148
|
3. Medium - Feature impaired
|
|
@@ -191,6 +217,15 @@ Create `BUG-{N}.md`:
|
|
|
191
217
|
>
|
|
192
218
|
|
|
193
219
|
5. Priority?
|
|
220
|
+
|
|
221
|
+
> **Adapter-aware prompt:**
|
|
222
|
+
> - **Claude Code (terminal):** use `AskUserQuestion` tool — spec:
|
|
223
|
+
> - question: "What is the feature priority?"
|
|
224
|
+
> - header: "Priority"
|
|
225
|
+
> - 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" }]
|
|
226
|
+
> - multiSelect: false
|
|
227
|
+
> - **Cursor / Codex / Antigravity / other:** use text list below
|
|
228
|
+
|
|
194
229
|
1. Must-have - Critical for release
|
|
195
230
|
2. Should-have - Important but not blocking
|
|
196
231
|
3. Nice-to-have - Can defer
|