viepilot 2.50.1 → 3.7.2
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 +204 -0
- package/README.md +1 -1
- package/bin/viepilot.cjs +1 -0
- package/bin/vp-tools.cjs +123 -1
- package/docs/brainstorm/session-2026-05-22.md +472 -0
- package/docs/dev/agents.md +51 -41
- package/lib/adapter-context.cjs +294 -0
- package/lib/adapters/antigravity.cjs +8 -2
- package/lib/adapters/claude-code.cjs +4 -0
- package/lib/audit/browser-runner.cjs +102 -0
- package/lib/intake/adapters/browser.cjs +58 -0
- package/lib/intake/adapters/excel-m365.cjs +54 -6
- package/lib/intake/auto-intake.cjs +194 -0
- package/lib/intake/classifier.cjs +22 -4
- package/lib/intake/manifest.cjs +81 -0
- package/lib/intake/triage-ux.cjs +10 -2
- package/lib/intake/validator.cjs +97 -0
- package/lib/intake/writeback.cjs +169 -3
- package/lib/request/url-enricher.cjs +69 -0
- package/lib/viepilot-install.cjs +15 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +99 -3
- package/skills/vp-auto/SKILL.md +54 -4
- package/skills/vp-brainstorm/SKILL.md +69 -3
- package/skills/vp-crystallize/SKILL.md +52 -3
- package/skills/vp-debug/SKILL.md +52 -3
- package/skills/vp-design/SKILL.md +52 -3
- package/skills/vp-docs/SKILL.md +52 -3
- package/skills/vp-evolve/SKILL.md +52 -3
- package/skills/vp-info/SKILL.md +52 -3
- package/skills/vp-intake/SKILL.md +306 -7
- package/skills/vp-pause/SKILL.md +52 -3
- package/skills/vp-persona/SKILL.md +52 -3
- package/skills/vp-proposal/SKILL.md +52 -3
- package/skills/vp-request/SKILL.md +72 -3
- package/skills/vp-resume/SKILL.md +52 -3
- package/skills/vp-rollback/SKILL.md +52 -3
- package/skills/vp-skills/SKILL.md +52 -3
- package/skills/vp-status/SKILL.md +52 -3
- package/skills/vp-task/SKILL.md +52 -3
- package/skills/vp-ui-components/SKILL.md +52 -3
- package/skills/vp-update/SKILL.md +52 -3
- package/workflows/autonomous.md +268 -18
- package/workflows/brainstorm.md +222 -7
- package/workflows/crystallize.md +124 -6
- package/workflows/design.md +62 -1
- package/workflows/request.md +54 -8
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,210 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## [3.7.2] - 2026-05-23
|
|
13
|
+
|
|
14
|
+
### Added — ENH-097: vp-auto Full Orchestrator Delegation (Phase 142)
|
|
15
|
+
- **agents/claude-code/vp-git-agent.md** — new agent for phase-level git ops: create-tag, push-branch, push-tags, push-all, git-status; orchestrator spawns instead of running git inline
|
|
16
|
+
- **agents/claude-code/tracker-agent.md** — new ops: `update-handoff` (HANDOFF.json patch), `update-roadmap-phase` (ROADMAP.md phase status update); Write tool added
|
|
17
|
+
|
|
18
|
+
### Changed — ENH-097
|
|
19
|
+
- **workflows/autonomous.md** — ENH-096 whitelist tightened: orchestrator Bash = read-only git checks only; all state writes and git ops now go through tracker-agent / vp-git-agent / changelog-agent
|
|
20
|
+
- **workflows/autonomous.md** — §4 Update State: full tracker-agent spawn patterns for task-status, handoff, roadmap sync
|
|
21
|
+
- **workflows/autonomous.md** — §5 Phase Complete: git tagging and push delegated to vp-git-agent; TRACKER.md sync to tracker-agent
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [3.7.1] - 2026-05-23
|
|
26
|
+
|
|
27
|
+
### Changed — ENH-096: vp-auto Orchestrator Enforcement (Phase 141)
|
|
28
|
+
- **workflows/autonomous.md** — ⛔ hard stop block: explicit prohibition on inline implementation in orchestrator context; lists forbidden ops (Edit/Write on lib/bin/tests/agents/skills); enforces delegation even for single-task phases
|
|
29
|
+
- **workflows/autonomous.md** — orchestrator-only whitelist: Read (state files), Bash (git/vp-tools), Agent (spawn workers), Edit/Write (.viepilot/ state only)
|
|
30
|
+
- **workflows/autonomous.md** — concrete `Agent(vp-task-executor)` spawn template with exact prompt text and all placeholder fields ({task_path}, {phase_dir}, {cwd}, {projectPrefix})
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## [3.7.0] - 2026-05-23
|
|
35
|
+
|
|
36
|
+
### Added — ENH-095: AI-Driven Intake Intelligence — Manifest + Post-task Write-back (Phase 140)
|
|
37
|
+
- **lib/intake/manifest.cjs** — new manifest module: `saveManifest`, `loadManifest`, `isManifestFresh` (TTL-based), `getColumnMap`, `getWriteBackConfig`, `manifestPath`, `slugify`; manifest stored at `.viepilot/intake/{channel_id}-manifest.json`
|
|
38
|
+
- **agents/claude-code/excel-intake-agent.md** — new `Op: analyze_structure` section: AI reads all sheets, determines purpose/header rows/column semantics/write_back config, outputs structured JSON manifest; no hardcoded IDs
|
|
39
|
+
- **agents/claude-code/sheets-intake-agent.md** — matching `Op: analyze_structure` parity section
|
|
40
|
+
- **skills/vp-intake/SKILL.md** — manifest lifecycle workflow (check TTL → `--analyze` op → save manifest → use `getColumnMap`); new `## Intake Source` block embedded in accepted-ticket request files for post-task traceability
|
|
41
|
+
- **lib/intake/writeback.cjs** — new `writebackIntakeResponse(channel, sourceRow, response, projectRoot, sheetName, responseCol)`: writes status back to source row after PASS; `sharing_url` = read-only skip; `workbook_id` = Graph API PATCH; CSV/browser = silent skip
|
|
42
|
+
- **workflows/autonomous.md** — Post-PASS Intake Write-back hook (ENH-095): reads `## Intake Source` block from task.md, loads manifest, calls `writebackIntakeResponse`; non-fatal on failure
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## [3.6.2] - 2026-05-23
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
- **BUG-030** `lib/intake/adapters/excel-m365.cjs` — `parseRowsWithColumnMap` now handles missing `column_map` gracefully: auto-detects columns from header row using Vietnamese/English aliases (`HEADER_ALIASES`), warns to stderr with detected mapping, falls back to empty map instead of crashing with `TypeError`
|
|
50
|
+
- **BUG-030** Export `autoDetectColumnMap` + `HEADER_ALIASES` for testing and external use
|
|
51
|
+
- **ENH-094** `lib/intake/adapters/browser.cjs` — add `sharepoint-xlsx` pattern (`/sharepoint\.com\/:[a-z]:\/r\//`) to `URL_PATTERNS`; SharePoint xlsx sharing URLs now detected correctly instead of falling through as `generic-table`
|
|
52
|
+
- **ENH-094** `skills/vp-intake/SKILL.md` — browser channel dispatch now routes `sharepoint-xlsx` URLs to `excel-intake-agent` (sharing_url mode) instead of `browser-intake-agent`
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## [3.6.0] - 2026-05-23
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **ENH-090** `browser-intake-agent` (agents/claude-code/) — reads publicly shared URLs (Google Sheets, GitHub Issues, Jira, Trello, Notion) for vp-intake via `vercel-labs/agent-browser`
|
|
60
|
+
- **ENH-090** `lib/intake/adapters/browser.cjs` — URL type detector + browser channel dispatcher; supports google-sheets / github-issues / jira / trello / notion / generic
|
|
61
|
+
- **ENH-090** `skills/vp-intake/SKILL.md` — new `browser` channel type with `url` field; fallback chain: agent-browser → WebFetch → manual
|
|
62
|
+
- **ENH-091** `browser-audit-agent` (agents/claude-code/) — visual + functional dev server audit ops: audit_routes, visual_check, accessibility_check
|
|
63
|
+
- **ENH-091** `lib/audit/browser-runner.cjs` — browser audit orchestrator; writes `.viepilot/audit/visual-report-{timestamp}.md`; baseline save/compare
|
|
64
|
+
- **ENH-091** `skills/vp-audit/SKILL.md` — `--visual` / `--browser <url>` flags for runtime browser audit
|
|
65
|
+
- **ENH-092** `agents/claude-code/research-agent.md` upgraded — new ops: `browse_url`, `compare_products`, `extract_pricing` for JS-rendered competitor/doc research
|
|
66
|
+
- **ENH-092** `workflows/brainstorm.md` Step 3 — URL research block: dispatch research-agent with browse_url when reference URL provided
|
|
67
|
+
- **ENH-093** `lib/request/url-enricher.cjs` — URL auto-enricher; routes GitHub/Linear/Jira/Trello/Notion URLs to browser-intake-agent for pre-fill extraction
|
|
68
|
+
- **ENH-093** `workflows/request.md` — URL detection pre-step before Step 1; shows extracted fields with confirm/edit prompt
|
|
69
|
+
- **ENH-093** `skills/vp-request/SKILL.md` — URL auto-enrichment documentation with examples for all 5 tracker sources
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## [3.5.0] - 2026-05-23
|
|
74
|
+
|
|
75
|
+
### Added — ENH-088: `--schedule`/`--unschedule` flags + `--auto` headless intake mode (Phase 138)
|
|
76
|
+
### Added — lib/intake/auto-intake.cjs: `runAutoIntake`, `createSchedule`, `deleteSchedule`, `appendPendingReview`
|
|
77
|
+
### Added — vp-intake SKILL.md: pending-review queue check at manual run start
|
|
78
|
+
### Changed — lib/intake/classifier.cjs: returns `{ classified, confidence: 0.0–1.0 }` (was plain string)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## [3.4.0] - 2026-05-23
|
|
83
|
+
|
|
84
|
+
### Added — ENH-087: parallel codebase validation (Step 4.5) before triage in vp-intake (Phase 137)
|
|
85
|
+
### Added — lib/intake/validator.cjs: `validateTickets`, `extractKeywords`, `validateTicket` (fan-out + duplicate detection)
|
|
86
|
+
### Changed — triage-ux.cjs: `_validation` badge shown per ticket in AUQ display
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## [3.3.0] - 2026-05-23
|
|
91
|
+
|
|
92
|
+
### Added — ENH-089: `excel-intake-agent` + `sheets-intake-agent` native CC agents (Phase 136)
|
|
93
|
+
### Fixed — BUG-029: Excel M365 write-back stub replaced with Graph API PATCH implementation
|
|
94
|
+
### Changed — vp-intake SKILL.md: Excel/Sheets dispatch via native agents on CC adapter (Step 4 + Step 6)
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## [3.2.0] - 2026-05-22
|
|
99
|
+
|
|
100
|
+
### Added — ENH-086: 6 workflow agents promoted to native Claude Code agents (Phase 135)
|
|
101
|
+
- `agents/claude-code/changelog-agent.md`, `tracker-agent.md`, `research-agent.md`,
|
|
102
|
+
`file-scanner-agent.md`, `test-generator-agent.md`, `doc-sync-agent.md` — all 6 now
|
|
103
|
+
installed to `~/.claude/agents/` and visible in Claude Code's `/agents` dialog
|
|
104
|
+
- `research-agent` uses `claude-sonnet-4-6`; other 5 use `claude-haiku-4-5`
|
|
105
|
+
- 11 new tests: `tests/unit/phase135-enh086-native-agents.test.js`
|
|
106
|
+
|
|
107
|
+
### Fixed — BUG-028: test-generator-agent + file-scanner-agent wired (Phase 135)
|
|
108
|
+
- `workflows/autonomous.md`: `test-generator-agent` invocation block added before
|
|
109
|
+
git-persistence gate, triggered on last task of phase when `## Acceptance Criteria` present
|
|
110
|
+
- `skills/vp-audit/SKILL.md`: Tier 1 + Tier 2 scan steps invoke `file-scanner-agent`
|
|
111
|
+
(subagent_type) for repo-wide Glob+Grep; non-Claude-Code fallback retained
|
|
112
|
+
|
|
113
|
+
### Changed
|
|
114
|
+
- `workflows/autonomous.md`: tracker-agent, changelog-agent, doc-sync-agent invocations
|
|
115
|
+
use `subagent_type: "X-agent"` directly (no prompt-injection "Load agents/X.md" preamble)
|
|
116
|
+
- `workflows/request.md`: research-agent feasibility gate uses `subagent_type: "research-agent"`
|
|
117
|
+
- `docs/dev/agents.md`: architecture diagram updated to show all 9 native agents in
|
|
118
|
+
`~/.claude/agents/`; adapter table updated; invocation pattern updated
|
|
119
|
+
|
|
120
|
+
### Fixed — BUG-027 tracking (Phase 135)
|
|
121
|
+
- TRACKER.md and ROADMAP.md updated to reflect BUG-027 as done (code fix shipped in v3.1.1)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## [3.1.1] - 2026-05-22
|
|
126
|
+
|
|
127
|
+
### Fixed — BUG-027: claudeAgentsDir wired into install plan (Phase 134)
|
|
128
|
+
- `lib/viepilot-install.cjs`: `buildInstallPlan` now reads `adapter.claudeAgentsSrc` +
|
|
129
|
+
`adapter.claudeAgentsDir` and adds copy steps for each `.md` in `agents/claude-code/`
|
|
130
|
+
to `~/.claude/agents/` (native Claude Code agents directory)
|
|
131
|
+
- After install: `~/.claude/agents/vp-task-executor.md`, `vp-phase-planner.md`,
|
|
132
|
+
`vp-quality-gate.md` are present and the fan-out orchestration in `autonomous.md` works
|
|
133
|
+
- 5 new tests: `tests/unit/phase134-bug027-claude-agents-install.test.js`
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## [3.1.0] - 2026-05-22
|
|
138
|
+
|
|
139
|
+
### v3.1.0 — vp-auto Orchestration Refactor (FEAT-021 Phase 133)
|
|
140
|
+
|
|
141
|
+
#### Phase 133 — vp-auto Orchestration Refactor ✅
|
|
142
|
+
- `autonomous.md`: orchestration mode selection — `ADAPTER_PARALLEL` flag gates fan-out vs sequential
|
|
143
|
+
- `autonomous.md`: dependency resolution via `vp-phase-planner` agent → `clusters` JSON (can_parallel, sequential_fallback)
|
|
144
|
+
- `autonomous.md`: fan-out dispatch — parallel `Agent(vp-task-executor)` calls per cluster; simultaneous execution
|
|
145
|
+
- `autonomous.md`: model tiering — Haiku workers for routine file edits, Sonnet for planner + quality gate
|
|
146
|
+
- `autonomous.md`: Agent Teams mode for large phases (task count ≥ 8 + `orchestration.teams == true`)
|
|
147
|
+
- `autonomous.md`: sequential fallback for Cursor/Antigravity/Codex/Copilot (`orchestration.parallel == false`)
|
|
148
|
+
- `autonomous.md`: quality gate after each cluster via `Agent(vp-quality-gate)` — PASS/FAIL/PARTIAL routing
|
|
149
|
+
- 13 new tests: `tests/unit/phase133-feat021-vp-auto-orchestration.test.js`
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## [3.0.0] - 2026-05-22
|
|
154
|
+
|
|
155
|
+
### v3.0.0 — Per-Adapter Intelligence Refactor (FEAT-021)
|
|
156
|
+
|
|
157
|
+
**Milestone**: v3.0 — Phases 127–132 → v3.0.0, Phase 133 → v3.1.0
|
|
158
|
+
**Breaking changes**: `cursor_skill_adapter` removed from all SKILL.md; new `<adapter id="...">` 5-block standard
|
|
159
|
+
|
|
160
|
+
#### Phase 127 — Adapter Detection + ADAPTER_CONTEXT + Validate ✅
|
|
161
|
+
- `vp-tools detect-adapter`: heuristic adapter detection at session start (env vars + process parent)
|
|
162
|
+
- `lib/adapter-context.cjs`: ADAPTER_CONTEXT schema with tools{}, interactive, subagent, orchestration{} per adapter (5 adapters)
|
|
163
|
+
- `vp-tools validate --adapter <id>`: checks tool availability, warns on limitations
|
|
164
|
+
- ADAPTER_CONTEXT injection at session start in autonomous.md
|
|
165
|
+
|
|
166
|
+
#### Phase 128 — SKILL.md 5-Block Adapter Standard ✅
|
|
167
|
+
- Replace `<cursor_skill_adapter>` with `<adapter id="claude-code|cursor-agent|antigravity|codex|copilot">` in all 21 SKILL.md files
|
|
168
|
+
- Claude Code now has correct tool names: `Bash` (not Shell), `Read` (not ReadFile), `Grep` (not rg), `Edit`/`Write` (not ApplyPatch), `Agent` (not Subagent)
|
|
169
|
+
- Documented in `docs/dev/adapter-blocks.md`
|
|
170
|
+
|
|
171
|
+
#### Phase 129 — Workflow Adapter-Aware Execution Paths ✅
|
|
172
|
+
- All 4 core workflows (autonomous, brainstorm, crystallize, design) read ADAPTER_CONTEXT
|
|
173
|
+
- Unified fallback chains: AUQ → text list → defaults (interactive); Bash/run_terminal_cmd/shell/container.exec (shell)
|
|
174
|
+
- No more per-workflow inline compat tables
|
|
175
|
+
|
|
176
|
+
#### Phase 130 — Claude Code Agent Definitions + Hooks ✅
|
|
177
|
+
- `.claude/agents/vp-task-executor.md`: Haiku model worker (Read/Edit/Write/Bash/Glob/Grep, maxTurns=30)
|
|
178
|
+
- `.claude/agents/vp-phase-planner.md`: Sonnet dependency resolver
|
|
179
|
+
- `.claude/agents/vp-quality-gate.md`: Sonnet test runner + output checker
|
|
180
|
+
- PreToolUse/PostToolUse hooks as workflow gates via `vp-tools hooks install --adapter claude-code`
|
|
181
|
+
|
|
182
|
+
#### Phase 131 — Antigravity Path Fix + Deprecation Notice ✅
|
|
183
|
+
- Antigravity adapter adds `projectSkillsDir: '.agents/skills'` for project-level skill installs alongside global `~/.gemini/antigravity/skills/`
|
|
184
|
+
- `vp-tools install --target antigravity` shows Gemini CLI deprecation notice (Gemini CLI deprecated June 18, 2026; successor: Antigravity CLI)
|
|
185
|
+
- `isAvailable()` now also detects `.agents/` directory in cwd for project-scoped setups
|
|
186
|
+
- Deprecation notice links to both project (`.agents/skills/`) and global (`~/.gemini/antigravity/skills/`) skill paths
|
|
187
|
+
- 8 new tests: `tests/unit/phase131-feat021-antigravity-path-fix.test.js`
|
|
188
|
+
|
|
189
|
+
#### Phase 132 — Tests + CHANGELOG + v3.0.0 Bump ✅
|
|
190
|
+
- 25 new integration + contract tests covering: ADAPTER_CONTEXT completeness, adapter tool mappings, 5-block standard across all SKILL.md, workflow adapter-aware paths, claude-code agent definitions, antigravity Phase 131 additions
|
|
191
|
+
- `tests/unit/phase132-feat021-integration.test.js`: 13 integration tests (adapter detection, ADAPTER_CONTEXT schema, detect-adapter --json, validate --adapter)
|
|
192
|
+
- `tests/unit/phase132-feat021-contracts.test.js`: 12 contract tests (5-block standard, workflow adapter refs, adapter property contracts)
|
|
193
|
+
- Version bump: 2.51.0 → 3.0.0; CHANGELOG [3.0.0] finalized
|
|
194
|
+
|
|
195
|
+
#### Phase 133 — vp-auto Orchestration Refactor (planned → v3.1.0)
|
|
196
|
+
- autonomous.md: task dependency graph + runnable cluster identification
|
|
197
|
+
- Fan-out dispatch: parallel `Agent` tool calls for independent tasks within a cluster
|
|
198
|
+
- Agent Teams mode for large homogeneous phases (task count ≥8 + ADAPTER_CONTEXT.orchestration.teams)
|
|
199
|
+
- Model tiering: Haiku workers for routine file edits, Sonnet for orchestrator + quality gate
|
|
200
|
+
- Adapter fallback: sequential mode when `orchestration.parallel == false` (Cursor/Copilot/Antigravity/Codex)
|
|
201
|
+
- Target: ≥60% token reduction vs. single-agent for typical 7-task phase
|
|
202
|
+
|
|
203
|
+
## [2.51.0] - 2026-05-22
|
|
204
|
+
|
|
205
|
+
### Added — ENH-085: Mobile UI Direction Breakdown Quality (Phase 126)
|
|
206
|
+
- `design.md` schema: `screens` breakpoints (mobile/tablet/desktop/wide) + `strategy` field + `## Responsive Components` table; `--sync` maps screens → Tailwind `theme.extend.screens`
|
|
207
|
+
- Brainstorm: **Mobile Design Direction sub-phase** — AUQ 1 (viewport strategy: mobile-first/desktop-first/mobile-only/desktop-only) + AUQ 2 multi-select device scope (phone/tablet/desktop/wide), fires when mobile/responsive/breakpoint/viewport/touch keywords detected
|
|
208
|
+
- Brainstorm: Per-breakpoint `<details>` sections in `pages/*.html` — Phone/Tablet/Desktop layout + navigation strategy (lookup table by page type), CSS block for `.responsive-breakdown`
|
|
209
|
+
- Brainstorm: **Component Responsive Map** table auto-generated in `notes.md` (≥7 rows: Nav/Grid/Table/Modal/Forms/Buttons/Images + Navigation Pattern Detail + Tailwind utility reference); guard against duplicate generation
|
|
210
|
+
- Sub-scan A (crystallize): Extracts `theme.screens` / `theme.extend.screens` from `tailwind.config.js` (fallback to Tailwind defaults); scans JSX/TSX/Vue/Svelte for `sm:/md:/lg:/xl:/2xl:` patterns; infers mobile-first vs. desktop-first strategy; emits RESPONSIVE SUMMARY block
|
|
211
|
+
- Crystallize: **Step 1A-iv** — consumes responsive metadata from 4 sources (notes.md Component Responsive Map, session context, pages/*.html breakpoint sections, Sub-scan A); emits `## Responsive Implementation Notes` in ARCHITECTURE.md with per-page responsive target table and high-priority component list
|
|
212
|
+
- 27 tests in `tests/unit/phase126-enh085-mobile-ui-direction.test.js`
|
|
213
|
+
|
|
10
214
|
## [2.50.1] - 2026-05-17
|
|
11
215
|
|
|
12
216
|
### Fixed
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
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
8
|
[](#workflows)
|
package/bin/viepilot.cjs
CHANGED
|
@@ -383,6 +383,7 @@ async function installCommand(rawArgs) {
|
|
|
383
383
|
const a = adapterMap[target];
|
|
384
384
|
if (a && !seenAdapters.has(a.id)) {
|
|
385
385
|
seenAdapters.add(a.id);
|
|
386
|
+
if (a.deprecationNotice) console.log(`\n${a.deprecationNotice}`);
|
|
386
387
|
console.log(`- ${a.name}: ${a.postInstallHint || 'run /vp-status'}`);
|
|
387
388
|
}
|
|
388
389
|
}
|
package/bin/vp-tools.cjs
CHANGED
|
@@ -1303,6 +1303,126 @@ ${colors.cyan}Examples:${colors.reset}
|
|
|
1303
1303
|
console.log('\nEdit .viepilot/intake/channels.json to configure your ticket channels.');
|
|
1304
1304
|
},
|
|
1305
1305
|
|
|
1306
|
+
/**
|
|
1307
|
+
* Detect active adapter from environment heuristics (FEAT-021 Phase 127)
|
|
1308
|
+
* Usage: vp-tools detect-adapter [--json]
|
|
1309
|
+
*/
|
|
1310
|
+
'detect-adapter': (args) => {
|
|
1311
|
+
const { detectAdapter, getAdapterContext } = require('../lib/adapter-context.cjs');
|
|
1312
|
+
const jsonMode = args.includes('--json');
|
|
1313
|
+
const adapterId = detectAdapter();
|
|
1314
|
+
const ctx = getAdapterContext(adapterId);
|
|
1315
|
+
|
|
1316
|
+
if (jsonMode) {
|
|
1317
|
+
const output = {
|
|
1318
|
+
adapter: adapterId,
|
|
1319
|
+
name: ctx.name,
|
|
1320
|
+
interactive_mode: ctx.interactive,
|
|
1321
|
+
subagent: ctx.subagent,
|
|
1322
|
+
orchestration: ctx.orchestration,
|
|
1323
|
+
hooks_count: ctx.hooks.count,
|
|
1324
|
+
mcp: ctx.mcp,
|
|
1325
|
+
capabilities: Object.entries(ctx.tools)
|
|
1326
|
+
.filter(([, v]) => v !== null)
|
|
1327
|
+
.map(([k]) => k),
|
|
1328
|
+
};
|
|
1329
|
+
console.log(JSON.stringify(output, null, 2));
|
|
1330
|
+
return;
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
console.log(`\n${colors.bold}Active Adapter:${colors.reset} ${ctx.name} (${adapterId})`);
|
|
1334
|
+
console.log(`\n${colors.cyan}Interactive:${colors.reset} ${ctx.interactive}`);
|
|
1335
|
+
console.log(`${colors.cyan}Subagent:${colors.reset} ${ctx.subagent}`);
|
|
1336
|
+
console.log(`${colors.cyan}Parallel exec:${colors.reset} ${ctx.orchestration.parallel}`);
|
|
1337
|
+
console.log(`${colors.cyan}Agent Teams:${colors.reset} ${ctx.orchestration.teams}`);
|
|
1338
|
+
console.log(`${colors.cyan}Hooks:${colors.reset} ${ctx.hooks.count} events`);
|
|
1339
|
+
console.log(`${colors.cyan}MCP limit:${colors.reset} ${ctx.mcp.tool_limit !== null ? ctx.mcp.tool_limit + ' tools' : 'none'}`);
|
|
1340
|
+
console.log(`\n${colors.cyan}Tool names:${colors.reset}`);
|
|
1341
|
+
Object.entries(ctx.tools)
|
|
1342
|
+
.filter(([, v]) => v !== null)
|
|
1343
|
+
.forEach(([k, v]) => console.log(` ${k.padEnd(14)} → ${v}`));
|
|
1344
|
+
console.log();
|
|
1345
|
+
},
|
|
1346
|
+
|
|
1347
|
+
/**
|
|
1348
|
+
* Validate adapter capability requirements (FEAT-021 Phase 127)
|
|
1349
|
+
* Usage: vp-tools validate --adapter <id>
|
|
1350
|
+
*/
|
|
1351
|
+
validate: (args) => {
|
|
1352
|
+
const { getAdapterContext, listAdapterIds } = require('../lib/adapter-context.cjs');
|
|
1353
|
+
const adapterIdx = args.indexOf('--adapter');
|
|
1354
|
+
const adapterId = adapterIdx !== -1 ? args[adapterIdx + 1] : null;
|
|
1355
|
+
|
|
1356
|
+
if (!adapterId) {
|
|
1357
|
+
console.error(formatError('--adapter <id> is required', `Known adapters: ${listAdapterIds().join(', ')}`));
|
|
1358
|
+
process.exitCode = 1;
|
|
1359
|
+
return;
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
let ctx;
|
|
1363
|
+
try {
|
|
1364
|
+
ctx = getAdapterContext(adapterId);
|
|
1365
|
+
} catch (e) {
|
|
1366
|
+
console.error(formatError(e.message));
|
|
1367
|
+
process.exitCode = 1;
|
|
1368
|
+
return;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
const warnings = [];
|
|
1372
|
+
const errors = [];
|
|
1373
|
+
|
|
1374
|
+
// Critical tool checks
|
|
1375
|
+
if (!ctx.tools.shell) errors.push('No shell/command execution tool — vp-auto cannot run bash commands');
|
|
1376
|
+
if (!ctx.tools.read && !ctx.tools.write) errors.push('No file read or write tool — skill execution will be severely limited');
|
|
1377
|
+
if (!ctx.tools.edit && !ctx.tools.write) errors.push('No file edit/write tool — cannot implement code changes');
|
|
1378
|
+
|
|
1379
|
+
// AUQ interactive check
|
|
1380
|
+
if (ctx.interactive === 'none') {
|
|
1381
|
+
warnings.push('No interactive prompts (AUQ/AskQuestion) — all prompts will be skipped or use defaults');
|
|
1382
|
+
} else if (ctx.interactive === 'text-plan-only' || ctx.interactive === 'text') {
|
|
1383
|
+
warnings.push(`Interactive mode is "${ctx.interactive}" — AUQ not available; text list fallback will be used`);
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
// Orchestration
|
|
1387
|
+
if (!ctx.orchestration.parallel) {
|
|
1388
|
+
warnings.push('Parallel task execution not supported — vp-auto will run in sequential mode (higher token usage)');
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
// MCP limit
|
|
1392
|
+
if (ctx.mcp.tool_limit !== null) {
|
|
1393
|
+
warnings.push(`MCP tool limit: ${ctx.mcp.tool_limit} tools — verify your MCP server count stays within limit`);
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
// Hooks
|
|
1397
|
+
if (ctx.hooks.count === 0) {
|
|
1398
|
+
warnings.push('No hook events supported — PreToolUse/PostToolUse gates will not fire');
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
// Antigravity deprecation
|
|
1402
|
+
if (ctx.deprecation_notice) {
|
|
1403
|
+
warnings.push(`DEPRECATION: ${ctx.deprecation_notice}`);
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
// Output
|
|
1407
|
+
console.log(`\n${colors.bold}ViePilot Capability Validation${colors.reset}`);
|
|
1408
|
+
console.log(`${colors.cyan}Adapter:${colors.reset} ${ctx.name} (${adapterId})\n`);
|
|
1409
|
+
|
|
1410
|
+
if (errors.length === 0 && warnings.length === 0) {
|
|
1411
|
+
console.log(formatSuccess('All capability checks passed — adapter fully supported'));
|
|
1412
|
+
return;
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
errors.forEach(e => console.log(formatError(`CRITICAL: ${e}`)));
|
|
1416
|
+
warnings.forEach(w => console.log(formatWarning(`WARN: ${w}`)));
|
|
1417
|
+
|
|
1418
|
+
if (errors.length > 0) {
|
|
1419
|
+
console.log(`\n${colors.red}${errors.length} critical gap(s) detected. Some ViePilot features will not work on this adapter.${colors.reset}`);
|
|
1420
|
+
process.exitCode = 1;
|
|
1421
|
+
} else {
|
|
1422
|
+
console.log(`\n${colors.yellow}${warnings.length} warning(s). ViePilot will work with limitations on this adapter.${colors.reset}`);
|
|
1423
|
+
}
|
|
1424
|
+
},
|
|
1425
|
+
|
|
1306
1426
|
/**
|
|
1307
1427
|
* Help
|
|
1308
1428
|
*/
|
|
@@ -1501,6 +1621,8 @@ ${colors.cyan}Commands:${colors.reset}
|
|
|
1501
1621
|
${colors.bold}scan-skills${colors.reset} Scan installed skills → ~/.viepilot/skill-registry.json
|
|
1502
1622
|
${colors.bold}check-update${colors.reset} [--silent] Check for latest ViePilot version on npm (24h cached)
|
|
1503
1623
|
${colors.bold}persona${colors.reset} <op> Manage user personas (get|infer|list|set|auto-switch|context)
|
|
1624
|
+
${colors.bold}detect-adapter${colors.reset} [--json] Detect active adapter (claude-code/cursor/antigravity/codex/copilot)
|
|
1625
|
+
${colors.bold}validate${colors.reset} --adapter <id> Validate adapter capability requirements; exits 1 on critical gaps
|
|
1504
1626
|
${colors.bold}help${colors.reset} [command] Show help (optionally for specific command)
|
|
1505
1627
|
|
|
1506
1628
|
${colors.cyan}Examples:${colors.reset}
|
|
@@ -1517,7 +1639,7 @@ ${colors.gray}Run 'vp-tools help <command>' for detailed help on a specific comm
|
|
|
1517
1639
|
|
|
1518
1640
|
// Helper function for progress bars
|
|
1519
1641
|
function createProgressBar(percent, width = 10) {
|
|
1520
|
-
const filled = Math.round(percent / (100 / width));
|
|
1642
|
+
const filled = Math.min(Math.round(percent / (100 / width)), width);
|
|
1521
1643
|
const empty = width - filled;
|
|
1522
1644
|
return `[${colors.green}${'█'.repeat(filled)}${colors.gray}${'░'.repeat(empty)}${colors.reset}]`;
|
|
1523
1645
|
}
|