viepilot 2.15.0 → 2.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,143 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.23.0] - 2026-04-18
11
+
12
+ ### Added
13
+ - **ENH-059**: AskUserQuestion ToolSearch preload — all vp-* skills and workflow files on Claude Code adapter now instruct the model to call `ToolSearch { query: "select:AskUserQuestion" }` before the first interactive prompt, preventing deferred-tool fallback to text menus
14
+ - 5 SKILL.md files updated: `vp-request`, `vp-evolve`, `vp-auto`, `vp-brainstorm`, `vp-crystallize`
15
+ - 3 workflow files updated: `workflows/request.md`, `workflows/evolve.md`, `workflows/autonomous.md`
16
+ - `vp-auto/SKILL.md` now has a full AUQ adapter compatibility section
17
+
18
+ ## [2.22.1] - 2026-04-18
19
+
20
+ ### Fixed
21
+ - **BUG-015**: `copilot` adapter missing from `bin/viepilot.cjs` CLI — `TARGETS` array and `printHelp()` text now include `copilot`; `viepilot --list-targets` shows GitHub Copilot; `viepilot install --target copilot` no longer fails with "Unknown target"
22
+
23
+ ## [2.22.0] - 2026-04-18
24
+
25
+ ### Added
26
+ - **ENH-058**: Workflow continuation prompt — AskUserQuestion at vp-evolve and vp-request completion
27
+ - `workflows/evolve.md` Step 5: AUQ asks "Execute now / Create request / Done" — selecting Execute invokes `/vp-auto` immediately
28
+ - `workflows/request.md` Step 7: AUQ asks "Plan phase / Create another / Done" — selecting Plan invokes `/vp-evolve` immediately
29
+ - Text fallback for Cursor / Codex / Copilot / Antigravity adapters (static list preserved)
30
+ - `skills/vp-evolve/SKILL.md` + `skills/vp-request/SKILL.md` AUQ prompt tables updated
31
+
32
+ ## [2.21.0] - 2026-04-18
33
+
34
+ ### Added
35
+ - **FEAT-019: GitHub Copilot Adapter** — install and run vp-* skills inside VS Code Copilot Chat and GitHub Copilot CLI
36
+ - `lib/adapters/copilot.cjs` — adapter definition with `~/.config/gh-copilot/` config home
37
+ - Auto-detect via `~/.config/gh-copilot/` directory or `gh` CLI binary presence
38
+ - Skill invocation: `/vp-status`, `/vp-auto`, etc. (same slash syntax as Claude Code / Cursor)
39
+ - Install command: `viepilot install --target copilot`
40
+ - 4 adapter-table SKILL.md files updated with GitHub Copilot row
41
+ - `docs/user/features/adapters.md` — Copilot section with surface matrix, prerequisites, limitations
42
+
43
+ ## [2.20.0] - 2026-04-18
44
+
45
+ ### Added
46
+ - **ENH-057: ViePilot Agents System** — 6 dedicated sub-agents for repetitive/parallelizable skill tasks:
47
+ - `tracker-agent`: TRACKER.md read/write delegation (phase status, task status, decision log)
48
+ - `research-agent`: WebSearch + WebFetch feasibility studies (auto-triggered in request.md Step 2B)
49
+ - `file-scanner-agent`: Glob + Grep repo-wide scanning (Explore subagent on Claude Code)
50
+ - `changelog-agent`: atomic CHANGELOG + version bump — single authority (resolves ENH-053)
51
+ - `test-generator-agent`: contract test scaffolding + run from acceptance criteria
52
+ - `doc-sync-agent`: bulk multi-file `.md` updates (≥5 files → 1 agent call)
53
+ - `agents/` directory with 6 agent definition files (`agents/*-agent.md`)
54
+ - Research-agent feasibility gate in `workflows/request.md` Step 2B — auto-triggered for Feature/platform requests
55
+ - Bulk-edit task detection in `workflows/autonomous.md` — doc-sync-agent invoked when ≥5 identical file types in task Paths
56
+ - Agent delegation table + invoke-agent patterns in `workflows/autonomous.md`
57
+ - `docs/dev/agents.md` — developer reference for agents layer architecture and invocation
58
+
59
+ ### Fixed
60
+ - **ENH-053**: Version bump authority unified in `changelog-agent` — `autonomous.md` and `evolve.md` both invoke it; no more inline duplication
61
+
62
+ ## [2.19.0] - 2026-04-18
63
+
64
+ ### Added
65
+ - **ENH-056: Skill invocation greeting banner** — all 17 `vp-*` skills now output
66
+ a version banner as the very first output on invocation:
67
+ ```
68
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
69
+ VIEPILOT ► VP-AUTO v0.2.2 (fw 2.19.0)
70
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
71
+ ```
72
+ Addresses Claude Code UI change where skill-load indicators are no longer shown;
73
+ users can now confirm which skill version is running. 119 contract tests added.
74
+
75
+ ## [2.18.0] - 2026-04-18
76
+
77
+ ### Fixed
78
+ - **vp-rollback** (BUG-014): `rollback.md` Step 7 now parses enriched tag format
79
+ `{project}-{branch}-{version}-vp-p{N}-t{M}` introduced by ENH-050. Rollback to
80
+ any Phase 57+ checkpoint correctly restores HANDOFF.json phase/task state.
81
+ All 3 formats (legacy, project-scoped, enriched) handled via `grep -oE vp-p[0-9]+`.
82
+
83
+ ### Changed
84
+ - **vp-crystallize** (ENH-051): Added "Brownfield Execution Path" table clarifying
85
+ which sub-steps (1A–1D) run, skip, or are conditional in brownfield mode.
86
+ Steps 1A/1B CONDITIONAL; Steps 1C/1D SKIP with rationale.
87
+ - **vp-brainstorm** (ENH-052): Step 6 now validates phase assignment before saving.
88
+ Scope-locked sessions with features but no phase assignments are blocked with
89
+ actionable message. Exploratory sessions and brownfield stubs bypass the gate.
90
+ - **Version bump rules** (ENH-053): Consolidated into `.viepilot/SYSTEM-RULES.md`
91
+ as single canonical table with precedence rule (MAJOR > MINOR > PATCH) and
92
+ mixed-phase handling. `evolve.md` and `autonomous.md` reference this table
93
+ instead of defining rules inline.
94
+ - **vp-audit post-phase hook** (ENH-054): Auto-hook integration upgraded from
95
+ conceptual note to concrete `<step name="post_phase_audit">` block in
96
+ `autonomous.md`. Runs 3 fast Tier 1+2 checks after every phase-complete event;
97
+ completely silent when no issues found; y/n prompt when issues detected.
98
+ - **AskUserQuestion enforcement** (ENH-055): All 13 AUQ prompt blocks across 4
99
+ workflows (evolve, request, brainstorm, crystallize) now explicitly mark Claude
100
+ Code adapter as REQUIRED. Plain-text menus remain as fallback for non-Claude-Code
101
+ adapters only. `vp-evolve/SKILL.md` gains new Adapter Compatibility section.
102
+
103
+ ### Files
104
+ - `workflows/rollback.md` — Step 7: 3-format tag parse with `grep -oE`
105
+ - `workflows/crystallize.md` — Brownfield Execution Path table (Step 0-C → Step 1)
106
+ - `workflows/brainstorm.md` — Pre-save phase validation gate in Step 6
107
+ - `.viepilot/SYSTEM-RULES.md` — Canonical Version Bump Rules table
108
+ - `workflows/evolve.md` — Version bump ref → SYSTEM-RULES.md; AUQ REQUIRED
109
+ - `workflows/autonomous.md` — Version bump ref + `post_phase_audit` step (5c)
110
+ - `workflows/audit.md` — Auto-hook: concrete integration spec replaces conceptual note
111
+ - `workflows/request.md`, `brainstorm.md`, `crystallize.md` — AUQ REQUIRED
112
+ - `skills/vp-evolve/SKILL.md` — New Adapter Compatibility section
113
+ - `skills/vp-request`, `vp-brainstorm`, `vp-crystallize` SKILL.md — AUQ REQUIRED
114
+ - `tests/unit/vp-workflow-consistency.test.js` — 35 contract tests
115
+
116
+ ## [2.17.0] - 2026-04-17
117
+
118
+ ### Changed
119
+ - **vp-auto** git tags now include active branch and package version for full
120
+ traceability. New format: `{prefix}-{branch}-{version}-vp-p{n}-t{n}`. (ENH-050)
121
+ - Branch resolved via `git rev-parse --abbrev-ref HEAD` (sanitized: `/` → `-`)
122
+ - Version resolved from `package.json` (fallback: `0.0.0`)
123
+ - Legacy tags (`{prefix}-vp-p{n}-*`) continue to be recognized by audit + rollback
124
+
125
+ ### Files
126
+ - `workflows/autonomous.md` — `TAG_PREFIX` resolution block (BRANCH_SAFE + VERSION);
127
+ task start, task done, and phase complete tag patterns updated to enriched format
128
+ - `workflows/audit.md` — `COMPLETE_TAGS` regex: added third alternative for enriched
129
+ format; `PREV_TAG` grep: extended char class to include `.` for version strings
130
+ - `workflows/rollback.md` — tag grep char class extended to include `.` for version strings
131
+ - `tests/unit/vp-enh050-git-tag-format.test.js` — 16 contract tests
132
+
133
+ ## [2.16.0] - 2026-04-17
134
+
135
+ ### Changed
136
+ - **vp-audit** Tier 4 (Framework Integrity) now runs silently — output is suppressed
137
+ when the check passes (✅) or is skipped (non-framework repo). Tier 4 is only
138
+ surfaced in the audit report when issues (⚠️) are found. (ENH-049)
139
+
140
+ ### Files
141
+ - `workflows/audit.md` — Step 4 skip: removed `echo "→ Tier 4 skipped"` message;
142
+ Step 4f report block wrapped in `TIER4_ISSUES > 0` guard; All Clear banner Tier 4
143
+ line removed; Issues Found banner Tier 4 line rendered only when `TIER4_ISSUES > 0`
144
+ - `skills/vp-audit/SKILL.md` — documented silent-by-default Tier 4 behavior (ENH-049)
145
+ - `tests/unit/vp-enh049-audit-tier4-silent.test.js` — 13 contract tests
146
+
10
147
  ## [2.15.0] - 2026-04-13
11
148
 
12
149
  ### Changed (ENH-048 — Phase 78: AskUserQuestion Adapter-Aware Integration)
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
- [![Version](https://img.shields.io/badge/version-2.15.0-blue.svg)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-2.23.0-blue.svg)](CHANGELOG.md)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
7
7
  [![Skills](https://img.shields.io/badge/skills-17-purple.svg)](#skills-reference)
8
8
  [![Workflows](https://img.shields.io/badge/workflows-13-orange.svg)](#workflows)
9
9
  [![Templates](https://img.shields.io/badge/templates-17-cyan.svg)](#templates)
10
- [![Tests](https://img.shields.io/badge/tests-957%20passing-brightgreen.svg)](tests/)
10
+ [![Tests](https://img.shields.io/badge/tests-1140%20passing-brightgreen.svg)](tests/)
11
11
  [![GitHub](https://img.shields.io/github/stars/0-CODE/viepilot?style=social)](https://github.com/0-CODE/viepilot)
12
12
 
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.
13
+ **Versioning:** Shield **2.19.0** is the **ViePilot framework SemVer** tracked in `.viepilot/TRACKER.md` and `CHANGELOG.md`. The npm `package.json` field `version` (**2.19.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
 
package/bin/viepilot.cjs CHANGED
@@ -23,6 +23,7 @@ const TARGETS = [
23
23
  { id: 'cursor-ide', label: 'Cursor IDE' },
24
24
  { id: 'antigravity', label: adapterMap['antigravity'].name },
25
25
  { id: 'codex', label: adapterMap['codex'].name },
26
+ { id: 'copilot', label: adapterMap['copilot'].name },
26
27
  ];
27
28
 
28
29
  function printHelp() {
@@ -36,14 +37,14 @@ Usage:
36
37
  viepilot --list-targets
37
38
 
38
39
  Install options:
39
- --target <id|id,id|all> Target profile(s): claude-code (mirrors vp-* to ~/.claude/skills), cursor-agent, cursor-ide, antigravity, codex
40
+ --target <id|id,id|all> Target profile(s): claude-code, cursor-agent, cursor-ide, antigravity, codex, copilot
40
41
  --yes Non-interactive mode (skip confirmations)
41
42
  --dry-run Print actions only (Node installer; no bash)
42
43
  --list-targets Print supported targets and exit
43
44
  --help Show help
44
45
 
45
46
  Uninstall options:
46
- --target <id|id,id|all> Remove assets (claude-code: ~/.claude/skills/vp-*; cursor-*: ~/.cursor/skills/vp-*; antigravity: ~/.antigravity/skills/vp-*; codex: ~/.codex/skills/vp-*)
47
+ --target <id|id,id|all> Remove assets (claude-code: ~/.claude/skills/vp-*; cursor-*: ~/.cursor/skills/vp-*; antigravity: ~/.antigravity/skills/vp-*; codex: ~/.codex/skills/vp-*; copilot: ~/.config/gh-copilot/skills/vp-*)
47
48
  --yes Non-interactive mode (skip confirmations)
48
49
  --dry-run Print actions only, do not remove files
49
50
  `);
@@ -0,0 +1,131 @@
1
+ # ViePilot Agents Layer
2
+
3
+ Developer reference for the agents system introduced in ENH-057 (v2.20.0).
4
+
5
+ ## Why Agents?
6
+
7
+ Before v2.20.0, vp-* skills handled everything inline: research web fetches, TRACKER.md
8
+ updates, CHANGELOG writes, file scans, test generation, and doc updates all ran
9
+ sequentially in the main LLM context. This caused:
10
+
11
+ 1. **Context bloat** — long skill runs exhausted context with intermediate data
12
+ 2. **Sequential bottleneck** — research + write + verify ran one-at-a-time
13
+ 3. **Skill coupling** — each skill re-implemented the same patterns (tracker update, version bump)
14
+ 4. **No parallelism** — vp-auto tasks that could run concurrently didn't
15
+
16
+ The agents layer delegates these operations to dedicated sub-agents — isolated contexts
17
+ that run in parallel or in sequence without polluting the calling skill's conversation.
18
+
19
+ ## Architecture
20
+
21
+ ```
22
+ vp-* skill (orchestrator)
23
+
24
+ ├── tracker-agent ← .viepilot/TRACKER.md read/write
25
+ ├── research-agent ← WebSearch + WebFetch (isolated context)
26
+ ├── file-scanner-agent ← Glob + Grep (repo-wide scanning)
27
+ ├── changelog-agent ← CHANGELOG + version bump (single authority)
28
+ ├── test-generator-agent ← tests/*.test.js generation + run
29
+ └── doc-sync-agent ← skills/*/SKILL.md bulk update
30
+ ```
31
+
32
+ Agent definitions live in `agents/` at the repo root. They are installed to
33
+ `{viepilotDir}/agents/` alongside workflows and templates.
34
+
35
+ ## Agent Catalog
36
+
37
+ ### tracker-agent
38
+ **File**: `agents/tracker-agent.md`
39
+ **Purpose**: Read/write TRACKER.md — phase status, task status, decision log, request table.
40
+ **When to invoke**: vp-auto (task start/complete/phase complete), vp-request (Step 5), vp-evolve (phase creation).
41
+ **Claude Code subagent_type**: `general-purpose`
42
+
43
+ ### research-agent
44
+ **File**: `agents/research-agent.md`
45
+ **Purpose**: WebSearch + WebFetch + summarize for feasibility studies and tech research.
46
+ **When to invoke**: vp-request (Step 2B — auto-triggered for Feature/platform requests), vp-brainstorm (external validation).
47
+ **Claude Code subagent_type**: `general-purpose`
48
+
49
+ ### file-scanner-agent
50
+ **File**: `agents/file-scanner-agent.md`
51
+ **Purpose**: Glob + Grep across repo to find affected files, detect stale refs.
52
+ **When to invoke**: vp-audit (Tier 1–4), vp-evolve (impact analysis), vp-rollback (state restore).
53
+ **Claude Code subagent_type**: `Explore` (specialized for codebase scanning)
54
+
55
+ ### changelog-agent
56
+ **File**: `agents/changelog-agent.md`
57
+ **Purpose**: Atomically append CHANGELOG entry + bump package.json version.
58
+ **When to invoke**: vp-auto post-phase (last task), vp-evolve (milestone ship).
59
+ **Claude Code subagent_type**: `general-purpose`
60
+ **Note**: Single authority for version bumps — resolves ENH-053.
61
+
62
+ ### test-generator-agent
63
+ **File**: `agents/test-generator-agent.md`
64
+ **Purpose**: Generate contract tests from acceptance criteria, run suite, report pass/fail.
65
+ **When to invoke**: Last task of each phase (the `N.last` contract-test task pattern).
66
+ **Claude Code subagent_type**: `general-purpose`
67
+
68
+ ### doc-sync-agent
69
+ **File**: `agents/doc-sync-agent.md`
70
+ **Purpose**: Bulk-apply the same change to ≥5 `.md` files (adapter rows, banners, etc.).
71
+ **When to invoke**: Auto-triggered by autonomous.md when task Paths block has ≥5 identical file types.
72
+ **Claude Code subagent_type**: `general-purpose`
73
+
74
+ ## Invocation Patterns
75
+
76
+ ### Claude Code (terminal)
77
+
78
+ Use the `Agent` tool with the appropriate `subagent_type`:
79
+
80
+ ```js
81
+ Agent({
82
+ subagent_type: "general-purpose", // or "Explore" for file-scanner
83
+ description: "{agent-name}: {operation-summary}",
84
+ prompt: `
85
+ Load agents/{agent-name}.md for the full specification.
86
+ Execute operation: {operation}
87
+ Inputs: {inputs}
88
+ `
89
+ })
90
+ ```
91
+
92
+ ### Cursor / Codex / Antigravity
93
+
94
+ Execute the equivalent operation inline in the same session. The agent `.md` file
95
+ describes the exact steps — follow them as a scoped sub-prompt.
96
+
97
+ ## Adapter Behavior Table
98
+
99
+ | Agent | Claude Code | Cursor | Codex | Antigravity |
100
+ |-------|------------|--------|-------|-------------|
101
+ | tracker-agent | Subagent (general-purpose) | Inline | Inline | Inline |
102
+ | research-agent | Subagent (general-purpose) | Inline if web available | Inline if web available | Inline if web available |
103
+ | file-scanner-agent | Subagent (Explore) | Inline | Inline | Inline |
104
+ | changelog-agent | Subagent (general-purpose) | Inline | Inline | Inline |
105
+ | test-generator-agent | Subagent (general-purpose) | Inline | Inline | Inline |
106
+ | doc-sync-agent | Subagent (general-purpose) | Sequential inline | Sequential inline | Sequential inline |
107
+
108
+ ## Adding a New Agent
109
+
110
+ 1. Create `agents/{name}-agent.md` with all required sections:
111
+ - `## Purpose`
112
+ - `## Inputs`
113
+ - `## Outputs`
114
+ - `## Invocation Pattern` (Claude Code + text fallback)
115
+ - `## Adapter Behavior` (table covering all 4 adapters)
116
+ - `## Notes`
117
+
118
+ 2. Add the agent to the delegation table in `workflows/autonomous.md`
119
+ under `## Agent Delegation`.
120
+
121
+ 3. Wire invocation into the relevant workflow steps.
122
+
123
+ 4. Add to `installSubdirs` in the adapter that should include `agents/`.
124
+
125
+ 5. Write a contract test in `tests/unit/` verifying the file exists and has required sections.
126
+
127
+ ## Naming Conventions
128
+
129
+ - File: `agents/{name}-agent.md` (kebab-case, always ends in `-agent`)
130
+ - Reference: `{name}-agent` (e.g., `tracker-agent`, not `tracker`)
131
+ - Invocation: `Load agents/{name}-agent.md for full spec.`
@@ -10,6 +10,7 @@ ViePilot supports multiple AI coding platforms via its adapter system (FEAT-013)
10
10
  | `cursor-agent` / `cursor-ide` | Cursor | `~/.cursor/skills/` | `~/.cursor/viepilot/` | — | `/vp-status` |
11
11
  | `antigravity` | Google Antigravity | `~/.antigravity/skills/` | `~/.antigravity/viepilot/` | — | `/vp-status` |
12
12
  | `codex` | OpenAI Codex CLI | `~/.codex/skills/` | `~/.codex/viepilot/` | — | `$vp-status` |
13
+ | `copilot` | GitHub Copilot | `~/.config/gh-copilot/skills/` | `~/.config/gh-copilot/viepilot/` | — | `/vp-status` |
13
14
 
14
15
  > **Note — Codex invocation syntax:** OpenAI Codex CLI uses `$skill-name` to invoke skills (e.g. `$vp-status`, `$vp-brainstorm`). The `/command` prefix is reserved for Codex built-in controls (`/plan`, `/clear`, `/diff`, etc.). SKILL.md file format is fully compatible — no changes needed to skill content.
15
16
 
@@ -28,6 +29,9 @@ viepilot install --target antigravity
28
29
  # OpenAI Codex CLI
29
30
  viepilot install --target codex
30
31
 
32
+ # GitHub Copilot
33
+ viepilot install --target copilot
34
+
31
35
  # Multiple targets at once
32
36
  viepilot install --target claude-code,antigravity
33
37
  ```
@@ -45,6 +49,53 @@ At install time, `{envToolDir}` is replaced with each adapter's `executionContex
45
49
  - `cursor` → `.cursor/viepilot`
46
50
  - `antigravity` → `.antigravity/viepilot`
47
51
  - `codex` → `.codex/viepilot`
52
+ - `copilot` → `.config/gh-copilot/viepilot`
53
+
54
+ ## GitHub Copilot
55
+
56
+ GitHub Copilot adapter (FEAT-019) enables vp-* skills to run inside VS Code Copilot Chat and the GitHub Copilot CLI.
57
+
58
+ ### Surface support
59
+
60
+ | Surface | Status | Notes |
61
+ |---------|--------|-------|
62
+ | VS Code Copilot Chat | ✅ Supported | Invoke with `/vp-status`, `/vp-auto`, etc. |
63
+ | GitHub Copilot CLI | ✅ Supported | Invoke with `/vp-status` in CLI chat |
64
+ | Copilot Cloud Agents | ⚠️ Preview | GitHub Copilot Extensions (Public Preview); subject to change |
65
+ | JetBrains Copilot | ⚠️ Pending | Copilot Chat for JetBrains — skills not yet validated |
66
+
67
+ ### Prerequisites
68
+
69
+ - **gh CLI** installed (`brew install gh` or [cli.github.com](https://cli.github.com))
70
+ - **GitHub Copilot subscription** (Individual, Business, or Enterprise)
71
+ - **GitHub Copilot extension** for VS Code (marketplace ID: `GitHub.copilot-chat`)
72
+
73
+ ### Installation
74
+
75
+ ```bash
76
+ npx viepilot install --target copilot
77
+ ```
78
+
79
+ Files are installed to:
80
+ - Skills: `~/.config/gh-copilot/skills/`
81
+ - Workflows + lib: `~/.config/gh-copilot/viepilot/`
82
+
83
+ After install, open VS Code, open Copilot Chat (`Ctrl+Shift+I` / `Cmd+Shift+I`), and type `/vp-status`.
84
+
85
+ ### Availability detection
86
+
87
+ The installer detects Copilot by checking (in order):
88
+
89
+ 1. `~/.config/gh-copilot/` directory exists (primary)
90
+ 2. `gh` binary found at `/usr/local/bin/gh`, `/opt/homebrew/bin/gh`, or `~/.local/bin/gh` (secondary)
91
+
92
+ ### Known limitations
93
+
94
+ | Feature | Status |
95
+ |---------|--------|
96
+ | `AskUserQuestion` interactive prompts | ❌ Not available — skills use text-based menus |
97
+ | Hooks (PreToolUse, Stop, etc.) | ❌ Copilot uses `.agent.md` convention, not programmatic hooks |
98
+ | MCP server integration | 🔜 Planned for Phase 2 |
48
99
 
49
100
  ## Adding a new adapter
50
101
 
@@ -24,7 +24,8 @@ module.exports = {
24
24
  path.join('templates', 'architect'),
25
25
  'bin',
26
26
  'lib',
27
- 'ui-components'
27
+ 'ui-components',
28
+ 'agents'
28
29
  ],
29
30
  isAvailable: (home) => {
30
31
  const h = home || os.homedir();
@@ -32,7 +32,8 @@ module.exports = {
32
32
  path.join('templates', 'architect'),
33
33
  'bin',
34
34
  'lib',
35
- 'ui-components'
35
+ 'ui-components',
36
+ 'agents'
36
37
  ],
37
38
  // Detection: is this platform available on the current machine?
38
39
  isAvailable: (home) => {
@@ -25,7 +25,8 @@ module.exports = {
25
25
  path.join('templates', 'architect'),
26
26
  'bin',
27
27
  'lib',
28
- 'ui-components'
28
+ 'ui-components',
29
+ 'agents'
29
30
  ],
30
31
  isAvailable: (home) => {
31
32
  const h = home || os.homedir();
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+ const os = require('os');
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+
6
+ module.exports = {
7
+ id: 'copilot',
8
+ name: 'GitHub Copilot',
9
+ // Paths (home-relative; resolved at install time)
10
+ skillsDir: (home) => path.join(home, '.config', 'gh-copilot', 'skills'),
11
+ viepilotDir: (home) => path.join(home, '.config', 'gh-copilot', 'viepilot'),
12
+ // {envToolDir} in SKILL.md files resolves to this value at install time (ENH-035)
13
+ executionContextBase: '.config/gh-copilot/viepilot',
14
+ // Copilot Chat uses /skill-name (same as Claude Code / Cursor)
15
+ postInstallHint: 'Open Copilot Chat in VS Code and type /vp-status to get started',
16
+ hooks: {
17
+ configFile: null, // Copilot uses .agent.md convention, not programmatic hooks
18
+ schema: 'copilot',
19
+ supportedEvents: []
20
+ },
21
+ installSubdirs: [
22
+ 'workflows',
23
+ path.join('templates', 'project'),
24
+ path.join('templates', 'phase'),
25
+ path.join('templates', 'architect'),
26
+ 'bin',
27
+ 'lib',
28
+ 'ui-components',
29
+ 'agents'
30
+ ],
31
+ isAvailable: (home) => {
32
+ const h = home || os.homedir();
33
+ // Primary: gh-copilot config dir exists
34
+ if (fs.existsSync(path.join(h, '.config', 'gh-copilot'))) return true;
35
+ // Secondary: gh CLI installed at common paths (user likely has Copilot access)
36
+ const ghPaths = [
37
+ '/usr/local/bin/gh',
38
+ '/opt/homebrew/bin/gh',
39
+ '/usr/bin/gh',
40
+ path.join(h, '.local', 'bin', 'gh'),
41
+ ];
42
+ return ghPaths.some((p) => fs.existsSync(p));
43
+ },
44
+ };
@@ -23,7 +23,8 @@ module.exports = {
23
23
  path.join('templates', 'architect'),
24
24
  'bin',
25
25
  'lib',
26
- 'ui-components'
26
+ 'ui-components',
27
+ 'agents'
27
28
  ],
28
29
  isAvailable: (home) => {
29
30
  const h = home || os.homedir();
@@ -6,6 +6,7 @@ const adapters = {
6
6
  'cursor-ide': require('./cursor.cjs'), // alias
7
7
  'antigravity': require('./antigravity.cjs'),
8
8
  'codex': require('./codex.cjs'),
9
+ 'copilot': require('./copilot.cjs'),
9
10
  };
10
11
 
11
12
  /**
@@ -191,6 +191,15 @@ function buildInstallPlan(packageRoot, envSource = process.env, opts = {}) {
191
191
  steps.push(ent.isDirectory() ? { kind: 'copy_dir', from: src, to: dest } : { kind: 'copy_file', from: src, to: dest });
192
192
  }
193
193
  }
194
+ // ENH-057: copy agents/ directory (agents layer added in v2.20.0)
195
+ const agentsRoot = path.join(root, 'agents');
196
+ if (fs.existsSync(agentsRoot)) {
197
+ for (const ent of listDirEntries(root, 'agents')) {
198
+ const src = path.join(root, 'agents', ent.name);
199
+ const dest = path.join(vpDir, 'agents', ent.name);
200
+ steps.push(ent.isDirectory() ? { kind: 'copy_dir', from: src, to: dest } : { kind: 'copy_file', from: src, to: dest });
201
+ }
202
+ }
194
203
  // BUG-007: copy package.json so resolveViepilotPackageRoot() finds the root
195
204
  steps.push({ kind: 'copy_file', from: path.join(root, 'package.json'), to: path.join(vpDir, 'package.json') });
196
205
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viepilot",
3
- "version": "2.15.0",
3
+ "version": "2.23.0",
4
4
  "description": "**Autonomous Vibe Coding Framework / Bộ khung phát triển tự động có kiểm soát**",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -4,6 +4,18 @@ description: "Audit state, docs drift, and stack best-practice compliance — wo
4
4
  version: 0.3.2
5
5
  ---
6
6
 
7
+ <greeting>
8
+ ## Invocation Banner
9
+
10
+ Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
11
+
12
+ ```
13
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14
+ VIEPILOT ► VP-AUDIT v0.3.2 (fw 2.19.0)
15
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ ```
17
+ </greeting>
18
+
7
19
  <cursor_skill_adapter>
8
20
  ## A. Skill Invocation
9
21
  - Skill được gọi khi user mention `vp-audit`, `/vp-audit`, "audit", "kiểm tra", "check docs"
@@ -74,6 +86,9 @@ When auditing a project bootstrapped via `vp-crystallize --brownfield`:
74
86
  - `ARCHITECTURE.md` counts vs actual `skills/`, `workflows/`, CLI
75
87
  - `README.md` viepilot-specific badges (version, skills-N, workflows-N)
76
88
  - `docs/skills-reference.md` sections vs `skills/` directory
89
+ - **Silent by default (ENH-049):** Tier 4 output is suppressed when all checks pass (✅)
90
+ or when the check is skipped (non-framework repo). Output only appears when issues (⚠️)
91
+ are found. Non-framework repos: Tier 4 skipped silently with no message.
77
92
 
78
93
  **Output:**
79
94
  - Report by 4 tiers, each tier with its own status
@@ -4,6 +4,18 @@ description: "Autonomous execution loop with control points and recovery"
4
4
  version: 0.2.2
5
5
  ---
6
6
 
7
+ <greeting>
8
+ ## Invocation Banner
9
+
10
+ Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
11
+
12
+ ```
13
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14
+ VIEPILOT ► VP-AUTO v0.2.2 (fw 2.19.0)
15
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ ```
17
+ </greeting>
18
+
7
19
  <cursor_skill_adapter>
8
20
  ## A. Skill Invocation
9
21
  - Skill được gọi khi user mention `vp-auto`, `/vp-auto`, "auto", "vibe", "chạy tự động"
@@ -230,6 +242,22 @@ At any control point, offer:
230
242
  Display progress summary on stop.
231
243
  </process>
232
244
 
245
+ ## Adapter Compatibility
246
+
247
+ ### AskUserQuestion Tool (ENH-059)
248
+ Control-point prompts use `AskUserQuestion` on Claude Code (terminal).
249
+
250
+ | Adapter | Interactive Prompts | Notes |
251
+ |---------|---------------------|-------|
252
+ | Claude Code (terminal) | ✅ `AskUserQuestion` — **REQUIRED** at control points | Preload schema via ToolSearch first |
253
+ | Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list |
254
+
255
+ **Claude Code (terminal) — AUQ preload required (ENH-059):**
256
+ Before the first interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"` to load the deferred tool schema. Only after `ToolSearch` succeeds can `AskUserQuestion` be invoked. If `ToolSearch` returns an error, fall back to plain-text numbered list for that session.
257
+
258
+ **Prompts using AskUserQuestion in this skill:**
259
+ - Control point decisions (retry / skip / rollback / stop — Step 7)
260
+
233
261
  <success_criteria>
234
262
  - [ ] Phases executed in dependency order
235
263
  - [ ] Tasks tracked with git tags
@@ -4,6 +4,18 @@ description: "Brainstorm session to collect ideas and decisions for the project"
4
4
  version: 1.1.0
5
5
  ---
6
6
 
7
+ <greeting>
8
+ ## Invocation Banner
9
+
10
+ Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
11
+
12
+ ```
13
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14
+ VIEPILOT ► VP-BRAINSTORM v1.1.0 (fw 2.19.0)
15
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ ```
17
+ </greeting>
18
+
7
19
  <cursor_skill_adapter>
8
20
  ## A. Skill Invocation
9
21
  - Skill được gọi khi user mention `vp-brainstorm`, `/vp-brainstorm`, hoặc yêu cầu "brainstorm"
@@ -115,14 +127,18 @@ This skill uses adapter-aware interactive prompts. Behavior depends on your adap
115
127
 
116
128
  | Adapter | Interactive Prompts | Notes |
117
129
  |---------|---------------------|-------|
118
- | Claude Code (terminal) | ✅ `AskUserQuestion` tool | Click-to-select UI, multi-select, preview panels |
130
+ | Claude Code (terminal) | ✅ `AskUserQuestion` tool — **REQUIRED** | Must call AUQ; plain-text only if tool errors or is unavailable |
119
131
  | 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
132
  | Cursor (Plan Mode) | ⚠️ Partial | `AskQuestion` in Plan Mode only — not in Agent/Skills Mode |
121
133
  | Cursor (Agent/Skills) | ❌ Text fallback | AskQuestion not available in Agent Mode |
122
134
  | Codex CLI | ❌ Text fallback | Native tool N/A; community MCP available |
123
135
  | Antigravity (native agent) | ❌ Text fallback | Artifact model, no raw tool calls |
136
+ | GitHub Copilot | ✅ `/skill-name` in Chat | Via `.agent.md` custom agent; AUQ not available — text fallback |
137
+
138
+ **Claude Code (terminal) — AUQ preload required (ENH-059):**
139
+ Before the first interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"` to load the deferred tool schema. Only after `ToolSearch` succeeds can `AskUserQuestion` be invoked. If `ToolSearch` returns an error, fall back to plain-text numbered list for that session.
124
140
 
125
- When `AskUserQuestion` is not available, the skill automatically falls back to
141
+ When `AskUserQuestion` is not available on other adapters, the skill automatically falls back to
126
142
  plain-text numbered list prompts — no configuration required.
127
143
 
128
144
  **Prompts using AskUserQuestion in this skill:**