viepilot 2.23.0 → 2.41.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 +195 -0
- package/README.md +6 -6
- package/bin/viepilot.cjs +108 -1
- package/bin/vp-tools.cjs +109 -0
- package/docs/brainstorm/session-2026-04-20.md +261 -0
- package/docs/skills-reference.md +22 -0
- package/docs/user/features/adapters.md +2 -2
- package/docs/user/features/scaffold-first.md +62 -0
- package/docs/user/features/skill-registry.md +125 -0
- package/lib/adapters/antigravity.cjs +5 -4
- package/lib/skill-installer.cjs +274 -0
- package/lib/skill-registry.cjs +212 -0
- package/lib/viepilot-update.cjs +113 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +57 -9
- package/skills/vp-auto/SKILL.md +44 -0
- package/skills/vp-brainstorm/SKILL.md +108 -1
- package/skills/vp-crystallize/SKILL.md +72 -0
- package/skills/vp-debug/SKILL.md +27 -0
- package/skills/vp-docs/SKILL.md +27 -0
- package/skills/vp-evolve/SKILL.md +59 -6
- package/skills/vp-info/SKILL.md +27 -0
- package/skills/vp-pause/SKILL.md +27 -0
- package/skills/vp-proposal/SKILL.md +27 -0
- package/skills/vp-request/SKILL.md +52 -6
- package/skills/vp-resume/SKILL.md +27 -0
- package/skills/vp-rollback/SKILL.md +27 -0
- package/skills/vp-skills/SKILL.md +301 -0
- package/skills/vp-status/SKILL.md +27 -0
- package/skills/vp-task/SKILL.md +27 -0
- package/skills/vp-ui-components/SKILL.md +27 -0
- package/skills/vp-update/SKILL.md +27 -0
- package/templates/phase/TASK.md +7 -0
- package/templates/project/PROJECT-CONTEXT.md +76 -0
- package/workflows/audit.md +131 -0
- package/workflows/autonomous.md +140 -0
- package/workflows/brainstorm.md +1025 -9
- package/workflows/crystallize.md +528 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,201 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.41.0] - 2026-04-24
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **ENH-072** — vp-* skill invocation version update check
|
|
14
|
+
- `lib/viepilot-update.cjs`: `checkLatestVersion()` — fetches latest version from npm registry (`https://registry.npmjs.org/viepilot/latest`) with 3s timeout; caches result 24h in `~/.viepilot/update-cache.json`; silent on all failures (network error, timeout, parse error, unreadable cache)
|
|
15
|
+
- `bin/vp-tools.cjs`: `check-update` subcommand — `--silent` exits 1 + prints latest when update available (exits 0 when up-to-date); `--json` prints `{ installed, latest, has_update }`; `--force` bypasses 24h cache
|
|
16
|
+
- All 18 `skills/vp-*/SKILL.md` files: `<version_check>` block inserted after `<greeting>` — runs `vp-tools check-update --silent` after the greeting banner; shows notice banner if exit=1; suppressed by `--no-update-check` flag or `config.json update.check: false`; shown at most once per session via `update_check_done` guard
|
|
17
|
+
|
|
18
|
+
## [2.40.0] - 2026-04-23
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **ENH-071** — vp-brainstorm Embedded Domain Mode (10 gaps addressed)
|
|
22
|
+
- Auto-activates when ≥2 embedded trigger keywords detected (MCU families + firmware concepts); `--domain embedded` flag for manual activation
|
|
23
|
+
- `workflows/brainstorm.md`: `detect_embedded_domain` step (Step 0B) with MCU/concept keyword lists, activation banner, and domain flag
|
|
24
|
+
- Embedded topic probes injected when domain active: MCU/Toolchain (Gap 2), RTOS/Scheduling (Gap 3), Power Budget (Gap 7), Safety/Compliance (Gap 10), Firmware Phase Template (Gap 9)
|
|
25
|
+
- 6 new Architect workspace pages: `hw-topology.html`, `pin-map.html`, `memory-layout.html`, `protocol-matrix.html`, `rtos-scheduler.html`, `power-budget.html` (Gaps 1, 4, 5, 8); linked under Embedded nav section in `index.html`
|
|
26
|
+
- UI Direction false-positive suppression (Gap 6): hardware display keywords (LCD/OLED/TFT) routed to `hw_topology_buffer` instead of `ui_idea_buffer`; `🎨` banner suppressed when all signals have hardware context
|
|
27
|
+
- `workflows/crystallize.md`: Step 1D item 13 — exports 8 embedded YAML sections (`hw_topology`, `pin_map`, `memory_layout`, `protocols`, `rtos_config`, `embedded_toolchain`, `power_budget`, `safety_config`) to ARCHITECTURE.md hardware sections; `## Embedded Domain` written to PROJECT-CONTEXT.md; hardware sections READ-ONLY for vp-auto
|
|
28
|
+
- `workflows/crystallize.md`: Step 7 embedded path — skips UI Coverage Gate; applies Hardware Coverage Check (driver-task completeness warning, non-blocking) + Board Bring-Up Phase 1 auto-add
|
|
29
|
+
- `skills/vp-brainstorm/SKILL.md`: Embedded Domain Mode section with all 6 pages table, topic probes summary, suppression behavior, crystallize exports summary
|
|
30
|
+
|
|
31
|
+
## [2.39.1] - 2026-04-23
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- **BUG-021** — Antigravity adapter install path updated for Google Gemini ecosystem rebrand
|
|
35
|
+
- `lib/adapters/antigravity.cjs`: `skillsDir` → `~/.gemini/antigravity/skills/`
|
|
36
|
+
- `lib/adapters/antigravity.cjs`: `viepilotDir` → `~/.gemini/antigravity/viepilot/`
|
|
37
|
+
- `lib/adapters/antigravity.cjs`: `executionContextBase` → `.gemini/antigravity/viepilot`
|
|
38
|
+
- `lib/adapters/antigravity.cjs`: `isAvailable` checks `.gemini/antigravity/` with `.antigravity/` fallback for pre-update installs
|
|
39
|
+
- `bin/viepilot.cjs`: uninstall help text updated to `~/.gemini/antigravity/skills/vp-*`
|
|
40
|
+
- `docs/user/features/adapters.md`: Antigravity row paths updated
|
|
41
|
+
- `docs/user/features/skill-registry.md`: Antigravity row path updated
|
|
42
|
+
|
|
43
|
+
## [2.39.0] - 2026-04-22
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
- **ENH-070** — vp-audit auto-log gaps as requests + direct vp-evolve routing
|
|
47
|
+
- `workflows/audit.md`: Auto-Log Gate fires after all tiers; each ⚠️/⛔ finding auto-creates `.viepilot/requests/{TYPE}-{N}.md`
|
|
48
|
+
- Duplicate detection: existing open requests with matching title/files are updated (re-detected) instead of creating duplicates
|
|
49
|
+
- TRACKER.md backlog updated automatically after audit
|
|
50
|
+
- Post-audit routing banner shows logged request IDs + recommends `/vp-evolve` as next action
|
|
51
|
+
- AUQ prompt: "Plan fix phase → /vp-evolve" as Recommended option
|
|
52
|
+
- `--no-autolog` flag disables auto-logging for report-only mode
|
|
53
|
+
- `skills/vp-audit/SKILL.md`: documents Auto-Log Behavior + `--no-autolog`
|
|
54
|
+
|
|
55
|
+
## [2.38.0] - 2026-04-22
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- **ENH-069** — crystallize UI→Task binding: 10-gap fix closing the chain where prototype pages remain stubs after all phases complete
|
|
59
|
+
- Gap 1: crystallize Step 1A emits `## UI Pages → Component Map` table binding each pages/*.html to a target component
|
|
60
|
+
- Gap 2: crystallize Step 7 cross-checks generated ROADMAP vs component map; auto-adds missing tasks
|
|
61
|
+
- Gap 3: `templates/phase/TASK.md` and `autonomous.md` populate `## UI Prototype Reference` for frontend component tasks
|
|
62
|
+
- Gap 4: `autonomous.md` phase completion UI Coverage Gate — warns on stub components before phase PASS
|
|
63
|
+
- Gap 5: crystallize Step 1D converts `arch_to_ui_sync` entries with `status: noted` into component map rows
|
|
64
|
+
- Gap 6: crystallize Step 1F makes coverage[] gaps blocking for scoped features (not just warnings)
|
|
65
|
+
- Gap 7: crystallize Step 1D requires explicit resolution of feature-map.html discrepancies before Step 7
|
|
66
|
+
- Gap 8: crystallize emits "design staleness" warning when arch decisions are not reflected in pages/*.html
|
|
67
|
+
- Gap 9: crystallize Step 1A processes `## UX walkthrough log` P0/P1 pain items → UX-fix tasks
|
|
68
|
+
- Gap 10: crystallize Step 1A surfaces `## Background extracted ideas` with resolution gate before Step 7
|
|
69
|
+
|
|
70
|
+
## [2.37.0] - 2026-04-22
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
- **BUG-020** — `vp-auto` scaffold-first gate: when a project setup task is detected for a framework stack (Laravel, Next.js, NestJS, Rails, Django, Spring Boot, Nuxt, React, Electron), vp-auto now MUST run the canonical scaffold command (e.g. `composer create-project laravel/laravel`, `npx create-next-app@latest`) before creating any files. A never-handcraft block list prevents manual creation of framework-native files (`artisan`, `manage.py`, `next.config.*`, `nest-cli.json`, `pom.xml`, `config/application.rb`, etc.) without prior scaffold. Stack `SUMMARY.md` files support an optional `## Scaffold` section with `init_command:` and `marker_file:` fields for override.
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
- `workflows/autonomous.md`: `#### Scaffold-First Gate (BUG-020)` section — framework marker detection table, built-in scaffold command heuristic table (10 stacks), never-handcraft block list, waiver/bypass prompt
|
|
77
|
+
- `docs/user/features/scaffold-first.md` — scaffold-first convention documentation and stack configuration guide
|
|
78
|
+
- `## Scaffold` sections (with `init_command:` + `marker_file:`) added to 6 installed framework stack SUMMARY.md files: laravel, nextjs, nextjs-tailwind-shadcn-threejs, nestjs, spring-boot, spring-boot-3.4
|
|
79
|
+
|
|
80
|
+
## [2.36.1] - 2026-04-22
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
- **BUG-019** — `vp-tools scan-skills` subcommand now implemented; previously threw "Unknown command: scan-skills" even though `lib/skill-registry.cjs` already contained `scanSkills()` from FEAT-020. Wired CLI handler, `help scan-skills` entry, and usage summary line in `bin/vp-tools.cjs`.
|
|
84
|
+
|
|
85
|
+
## [2.36.0] - 2026-04-22
|
|
86
|
+
|
|
87
|
+
### Added (ENH-068)
|
|
88
|
+
- `workflows/brainstorm.md`: Topic 7 "Admin Entity Management" (10 sub-questions: which entities need admin CRUD, list view columns/filter/pagination, bulk ops, create/edit forms, delete semantics hard vs. soft, import/export CSV, audit trail per entity, multi-tenant scoping, read-only vs. editable); proactive 🗄️ heuristic (CRUD/entity/admin panel keywords); entity management coverage gate before /save (cross-references ERD presence); `entity-mgmt.html` Architect page; `notes.md ## entity_mgmt` YAML schema; Content Management → 8, User Data Management → 9, Phase assignment → 10
|
|
89
|
+
- `workflows/crystallize.md`: Step 1D item 10 entity_mgmt export → `## Admin Entity Management` table + Import/Export sub-table in `PROJECT-CONTEXT.md`; `entity-mgmt.html` added to MANDATORY READ GATE as item 15; items 10→11 (feature-map), 11→12 (working notes)
|
|
90
|
+
- `templates/project/PROJECT-CONTEXT.md`: `## Admin Entity Management` section + Import/Export placeholder sub-tables
|
|
91
|
+
- `skills/vp-brainstorm/SKILL.md`, `skills/vp-crystallize/SKILL.md`: ENH-068 documented
|
|
92
|
+
- `tests/unit/vp-enh031-language-standardization.test.js`: exemption for entity_mgmt keyword blockquote (`CRUD` pattern)
|
|
93
|
+
|
|
94
|
+
## [2.35.0] - 2026-04-22
|
|
95
|
+
|
|
96
|
+
### Added (ENH-067)
|
|
97
|
+
- `workflows/brainstorm.md`: Session template adds `workflow_version` + `upgrade_supplement_version` fields to `## Session Info`; **Step 3B: Upgrade Gap Detection** — on `--continue`, compares session `workflow_version` vs. current Topics Template using version threshold table (ENH-063 v2.32, ENH-065 v2.33, ENH-066 v2.34) with false-positive cross-check; shows 🔄 upgrade banner (AUQ: discuss now / remind at /save / skip); runs inline Q&A for missing topics; appends `## Upgrade supplement (vX → vY)` section; stamps `upgrade_supplement_version` for idempotency; suggests `/vp-crystallize --upgrade`
|
|
98
|
+
- `workflows/crystallize.md`: **Step 0-B: Upgrade Re-scan Mode** (`--upgrade` flag + auto-detect from `crystallize_version` stamp); delta computation from version threshold table; AUQ menu — **Patch** (non-destructive: reads architect YAML → appends missing sections, re-stamps version) / **Full re-generate** (backup `.viepilot/backup-pre-regen-{ts}/` → pre-fill Step 0 → overwrite artifacts) / **Skip**; brainstorm supplement integration (folds `## Upgrade supplement` content automatically); soft warn when architect `notes.md` YAML missing; Step 5 writes `<!-- crystallize_version: {semver} -->` as first line of `PROJECT-CONTEXT.md`; `HANDOFF.json` records `crystallize_version` + `crystallized_at`
|
|
99
|
+
- `skills/vp-brainstorm/SKILL.md`: Workflow version stamps + Upgrade gap detection bullets (ENH-067)
|
|
100
|
+
- `skills/vp-crystallize/SKILL.md`: Crystallize version stamps + Upgrade re-scan mode bullets (ENH-067)
|
|
101
|
+
|
|
102
|
+
## [2.34.0] - 2026-04-21
|
|
103
|
+
|
|
104
|
+
### Added (ENH-066)
|
|
105
|
+
- `workflows/brainstorm.md`: Topic 8 "User Data Management" in brainstorm Topics Template (10 sub-questions: profile management, notification preferences, privacy/GDPR controls, activity history, connected OAuth accounts, session/device management, 2FA, consent management, data retention); proactive 👤 heuristic (≥1 user-data keyword at session start, ≥2 during session); user data coverage gate before /save for B2C/SaaS/GDPR projects; `user-data.html` page in Architect workspace; `notes.md ## user_data` YAML schema; Phase assignment renumbered to Topic 9
|
|
106
|
+
- `workflows/crystallize.md`: Step 1D extended — exports `notes.md ## user_data` → `## User Data Management` capabilities table in `PROJECT-CONTEXT.md`; `user-data.html` added to MANDATORY READ GATE list as item 14
|
|
107
|
+
- `templates/project/PROJECT-CONTEXT.md`: `## User Data Management` section with placeholder capability table (8 rows: profile editing, notification prefs, privacy settings, data export, right to erasure, connected accounts, session management, 2FA)
|
|
108
|
+
- `skills/vp-brainstorm/SKILL.md`, `skills/vp-crystallize/SKILL.md`: ENH-066 documented
|
|
109
|
+
|
|
110
|
+
## [2.33.0] - 2026-04-21
|
|
111
|
+
|
|
112
|
+
### Added (ENH-065)
|
|
113
|
+
- `workflows/brainstorm.md`: Topic 7 "Content Management" in brainstorm Topics Template (10 sub-questions: content types, lifecycle, WYSIWYG/markdown, media, taxonomy, localization, search, versioning, SEO); proactive 🗂️ heuristic (≥1 content keyword at session start, ≥2 during session); content coverage gate before /save; `content.html` page in Architect workspace + Page Boundary Rules; `notes.md ## content` YAML schema; Phase assignment renumbered to Topic 8
|
|
114
|
+
- `workflows/crystallize.md`: Step 1D extended — exports `notes.md ## content` → `## Content Management` table (content types, media/storage, localization) in `PROJECT-CONTEXT.md`; `content.html` added to MANDATORY READ GATE list
|
|
115
|
+
- `templates/project/PROJECT-CONTEXT.md`: `## Content Management` section with Content Type, Media & Storage, and Localization placeholder tables
|
|
116
|
+
- `skills/vp-brainstorm/SKILL.md`, `skills/vp-crystallize/SKILL.md`: ENH-065 documented
|
|
117
|
+
|
|
118
|
+
## [2.32.0] - 2026-04-21
|
|
119
|
+
|
|
120
|
+
### Fixed (BUG-018)
|
|
121
|
+
- `workflows/brainstorm.md`: added unified workspace mode-selection AUQ prompt (Step 2B) after scope lock — user now chooses Both / Architect only / UI Direction only / Neither; Architect auto-activate heuristic deferred until after this selection; suppressed when user selects "Neither" or "UI Direction only"
|
|
122
|
+
- `skills/vp-brainstorm/SKILL.md`: objective updated with BUG-018 mode selection reference
|
|
123
|
+
|
|
124
|
+
### Added (ENH-063)
|
|
125
|
+
- `workflows/brainstorm.md`: Topic 6 "Admin & Governance" in brainstorm Topics Template; proactive 🔐 heuristic (≥1 admin keyword at session start, ≥2 during session); admin coverage gate before /save for multi-user/SaaS/compliance projects; `admin.html` page in Architect workspace; `notes.md ## admin` YAML schema
|
|
126
|
+
- `workflows/crystallize.md`: Step 1D extended — exports `notes.md ## admin` → `## Admin & Governance` table (capabilities + personas) in `PROJECT-CONTEXT.md`
|
|
127
|
+
- `templates/project/PROJECT-CONTEXT.md`: `## Admin & Governance` section with placeholder table
|
|
128
|
+
- `skills/vp-brainstorm/SKILL.md`, `skills/vp-crystallize/SKILL.md`: ENH-063 documented
|
|
129
|
+
|
|
130
|
+
### Added (ENH-064)
|
|
131
|
+
- `workflows/brainstorm.md`: cross-workspace HUB links — Architect `index.html` ↔ UI Direction `index.html` when both workspaces active in same session; triggered by arch_to_ui_sync, BUG-018 "Both" selection, or `/sync-links`
|
|
132
|
+
- `workflows/crystallize.md`: Step 1D MANDATORY READ GATE — if architect workspace exists, reads ALL 12 pages front-to-back before extraction; `architect_read_complete: true` required; `notes.md` missing → STOP
|
|
133
|
+
- `workflows/crystallize.md`: Step 1A strengthened — if ui-direction exists, reads ALL pages/*.html + ALL notes.md sections; `ui_direction_read_complete: true` required; pages inventory mismatch → STOP
|
|
134
|
+
- `workflows/crystallize.md`: Step 1F Cross-Reference Gate — validates `## Coverage` matrix when both workspaces present; warns on Phase 1 features with no architect OR UI coverage
|
|
135
|
+
- `skills/vp-crystallize/SKILL.md`: mandatory workspace read gates documented
|
|
136
|
+
|
|
137
|
+
## [2.31.0] - 2026-04-21
|
|
138
|
+
|
|
139
|
+
### Added (ENH-062)
|
|
140
|
+
- `skills/vp-skills/SKILL.md`: new `/vp-skills` slash command — agent-native global skill registry management from any project; commands: scan, list, install, uninstall, update, info; uses installed vp-tools path (`~/.claude/viepilot/bin/vp-tools.cjs`)
|
|
141
|
+
- `bin/vp-tools.cjs`: new `get-registry [--id <id>]` subcommand — outputs registry JSON to stdout; enables workflow shell integration
|
|
142
|
+
|
|
143
|
+
### Fixed (BUG-016)
|
|
144
|
+
- `workflows/autonomous.md`: replaced non-executable `Call loadRegistry()` with `node ~/.claude/viepilot/bin/vp-tools.cjs get-registry --id {id}` shell command
|
|
145
|
+
- `workflows/brainstorm.md`: replaced `Call loadRegistry()` with `node ~/.claude/viepilot/bin/vp-tools.cjs get-registry` shell command + cat fallback
|
|
146
|
+
|
|
147
|
+
### Fixed (BUG-017)
|
|
148
|
+
- `skills/vp-evolve/SKILL.md`: added explicit AUQ call in Step 5 `<process>` body — workflow continuation prompt (Execute /vp-auto / Create request / Done)
|
|
149
|
+
- `skills/vp-request/SKILL.md`: added explicit AUQ call in Step 6 `<process>` body — workflow continuation prompt (Plan /vp-evolve / Create request / Done)
|
|
150
|
+
|
|
151
|
+
## [2.30.0] - 2026-04-20
|
|
152
|
+
|
|
153
|
+
### Changed (FEAT-020 Phase 5 — complete)
|
|
154
|
+
- `workflows/autonomous.md`: Added **Skill Context Load** step at init — reads `PROJECT-CONTEXT.md ## Skills`, builds `SKILL_CONTEXT_MAP`; absent section → silent no-op
|
|
155
|
+
- `workflows/autonomous.md`: Added **Skill Context Injection** per-task rule — required skills whose phases match are prepended silently to execution context; records `skills_applied` in task output; never prompts user
|
|
156
|
+
- `skills/vp-auto/SKILL.md`: FEAT-020 silent skill execution docs
|
|
157
|
+
- **FEAT-020 fully complete** (Phases 90–94): Skill Registry System — scanner + installer + brainstorm integration + crystallize gate + vp-auto execution
|
|
158
|
+
|
|
159
|
+
## [2.29.0] - 2026-04-20
|
|
160
|
+
|
|
161
|
+
### Changed (FEAT-020 Phase 4)
|
|
162
|
+
- `workflows/crystallize.md`: Added **Step 1E — Skill Decision Gate** — reads `## skills_used` from brainstorm notes.md; AUQ confirm required/optional/exclude; writes `## Skills` to PROJECT-CONTEXT.md; silently skipped when no skills_used present
|
|
163
|
+
- `templates/project/PROJECT-CONTEXT.md`: Added `## Skills` template section
|
|
164
|
+
- `skills/vp-crystallize/SKILL.md`: FEAT-020 skill gate docs — AUQ flow, lock semantics, cross-references
|
|
165
|
+
|
|
166
|
+
## [2.28.0] - 2026-04-20
|
|
167
|
+
|
|
168
|
+
### Changed (FEAT-020 Phase 3)
|
|
169
|
+
- `workflows/brainstorm.md`: Added **Skill Registry Integration** step in UI Direction Mode — when active, loads `~/.viepilot/skill-registry.json`, matches skills by `capabilities` to UI signals, silently applies `best_practices` to HTML generation, records matched skills in `notes.md ## skills_used`
|
|
170
|
+
- `skills/vp-brainstorm/SKILL.md`: FEAT-020 skill integration docs — silent apply, crystallize lock reference
|
|
171
|
+
|
|
172
|
+
## [2.27.0] - 2026-04-20
|
|
173
|
+
|
|
174
|
+
### Added (FEAT-020 Phase 2 — Skill Installer)
|
|
175
|
+
- `lib/skill-installer.cjs`: new `installSkill(source, home?)`, `uninstallSkill(id, home?)`, `updateSkill(id, home?)` — multi-channel installer (npm / GitHub / local); writes `skill-meta.json` post-install; auto-runs `scanSkills()`
|
|
176
|
+
- `bin/viepilot.cjs`: new `install-skill`, `uninstall-skill`, `update-skill` subcommands
|
|
177
|
+
|
|
178
|
+
## [2.26.0] - 2026-04-20
|
|
179
|
+
|
|
180
|
+
### Added (FEAT-020 Phase 1 — Skill Registry Foundation)
|
|
181
|
+
- `lib/skill-registry.cjs`: new `scanSkills(home?)` — traverses all adapter `skillsDir` paths, parses SKILL.md (extended + legacy), deduplicates by id, writes `~/.viepilot/skill-registry.json`
|
|
182
|
+
- `lib/skill-registry.cjs`: new `loadRegistry(home?)` — reads and returns registry JSON (null if absent)
|
|
183
|
+
- `bin/viepilot.cjs`: new `scan-skills` subcommand — runs scanner, prints per-adapter summary + total unique skills
|
|
184
|
+
- `bin/viepilot.cjs`: new `list-skills` subcommand — displays indexed skills table from registry
|
|
185
|
+
- `docs/user/features/skill-registry.md`: extended SKILL.md format spec (`## Capabilities`, `## Tags`, `## Best Practices`), scanner behavior, registry JSON schema, commands table
|
|
186
|
+
- Extended SKILL.md format: optional metadata sections — backward compatible (legacy SKILL.md without sections indexed with `[]` fields)
|
|
187
|
+
|
|
188
|
+
## [2.25.0] - 2026-04-18
|
|
189
|
+
|
|
190
|
+
### Changed (ENH-061)
|
|
191
|
+
- `workflows/brainstorm.md`: Added **Recommended Breakdown Ordering** — 8-step idea→architect+UI flow (free collection → scope lock → coverage mapping → architect design → arch→UI sync → UI direction → completeness gate → save)
|
|
192
|
+
- `workflows/brainstorm.md`: Added **Feature → Coverage Mapping** step — after scope lock, maps each Phase 1 feature to an architect page + UI screen; outputs `## Coverage` matrix in `notes.md`; warns on features with no coverage in either mode (non-blocking)
|
|
193
|
+
- `workflows/brainstorm.md`: Added **Section 6C — Architect → UI Direction Sync** (`arch_to_ui_sync`) — reverse sync from Architect workspace to UI Direction; surfaces UI implications of architectural decisions (async flows, auth roles, error codes, constraints); `/sync-ui` command; records `## arch_to_ui_sync` in `notes.md`
|
|
194
|
+
- `workflows/brainstorm.md`: Expanded pre-save completeness gate with **CHECK 4** — non-blocking warning when both workspaces are active but Phase 1 features have no coverage in either mode
|
|
195
|
+
- `skills/vp-brainstorm/SKILL.md`: Breakdown loop documented (coverage matrix, `arch_to_ui_sync` reverse sync, completeness gate, recommended ordering)
|
|
196
|
+
|
|
197
|
+
## [2.24.0] - 2026-04-18
|
|
198
|
+
|
|
199
|
+
### Changed (ENH-060)
|
|
200
|
+
- **`workflows/brainstorm.md`**: UI Direction Mode now proactively suggests itself when ≥1 UI keyword is found in the initial message (early-session detection), matching Architect Design Mode behavior — shows a 🎨 banner before topic selection
|
|
201
|
+
- **`workflows/brainstorm.md`**: Lowered accumulation threshold from ≥3 to ≥1 signal; surface threshold lowered from ≥5 to ≥2 unique signals
|
|
202
|
+
- **`workflows/brainstorm.md`**: Confirmation dialogue updated with 🎨 banner (was plain 💡), wording mirrors the Architect 🏗️ banner style
|
|
203
|
+
- **`skills/vp-brainstorm/SKILL.md`**: Updated Background UI extraction docs — auto-suggestion, lower thresholds, 🎨 banner reference, ENH-060 tagged
|
|
204
|
+
|
|
10
205
|
## [2.23.0] - 2026-04-18
|
|
11
206
|
|
|
12
207
|
### Added
|
package/README.md
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
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
|
-
[](#skills-reference)
|
|
8
8
|
[](#workflows)
|
|
9
9
|
[](#templates)
|
|
10
|
-
[](tests/)
|
|
11
11
|
[](https://github.com/0-CODE/viepilot)
|
|
12
12
|
|
|
13
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.
|
|
@@ -29,7 +29,7 @@ Nếu ViePilot giúp ích cho bạn, bạn có thể ủng hộ một ly cafe:
|
|
|
29
29
|
| Chỉ số / Metric | Giá trị / Value |
|
|
30
30
|
|-----------------|-----------------|
|
|
31
31
|
| Total LOC | **~51,713+** (`.md`, `.js`, `.cjs`, `.yml`, `.json`, `.sh`; không gồm `node_modules`) |
|
|
32
|
-
| Skills | **
|
|
32
|
+
| Skills | **18** |
|
|
33
33
|
| Workflows | **12** |
|
|
34
34
|
| Templates | **17** (Project: 12, Phase: 5) |
|
|
35
35
|
| CLI Commands | **18** (`vp-tools` 17 subcommands + `viepilot` installer) |
|
|
@@ -60,7 +60,7 @@ Tổng thể / Overall: ██████████████████
|
|
|
60
60
|
|
|
61
61
|
| Lĩnh vực / Area | Trạng thái | Chi tiết |
|
|
62
62
|
|-----------------|------------|----------|
|
|
63
|
-
| Core Skills (
|
|
63
|
+
| Core Skills (18) | ✅ Hoàn thiện | brainstorm, crystallize, auto, pause, resume, status, info, request, evolve, docs, update, task, debug, rollback, audit, ui-components, proposal, **skills** |
|
|
64
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 |
|
|
@@ -339,7 +339,7 @@ Full guide: `docs/dev/deployment.md`.
|
|
|
339
339
|
|
|
340
340
|
```
|
|
341
341
|
viepilot/
|
|
342
|
-
├── skills/ #
|
|
342
|
+
├── skills/ # 18 Skill definitions
|
|
343
343
|
│ ├── vp-brainstorm/ # Thu thập ý tưởng
|
|
344
344
|
│ │ └── SKILL.md
|
|
345
345
|
│ ├── vp-crystallize/ # Tạo artifacts
|
package/bin/viepilot.cjs
CHANGED
|
@@ -33,6 +33,11 @@ ViePilot CLI
|
|
|
33
33
|
Usage:
|
|
34
34
|
viepilot install [options]
|
|
35
35
|
viepilot uninstall [options]
|
|
36
|
+
viepilot scan-skills Scan all adapter skill dirs and build skill registry
|
|
37
|
+
viepilot list-skills List all indexed skills from registry
|
|
38
|
+
viepilot install-skill <source> Install a third-party skill (npm:pkg, github:org/repo, ./path)
|
|
39
|
+
viepilot uninstall-skill <id> Remove a skill from all adapter dirs
|
|
40
|
+
viepilot update-skill <id> Re-install skill from its original source
|
|
36
41
|
viepilot --help
|
|
37
42
|
viepilot --list-targets
|
|
38
43
|
|
|
@@ -44,7 +49,7 @@ Install options:
|
|
|
44
49
|
--help Show help
|
|
45
50
|
|
|
46
51
|
Uninstall options:
|
|
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-*)
|
|
52
|
+
--target <id|id,id|all> Remove assets (claude-code: ~/.claude/skills/vp-*; cursor-*: ~/.cursor/skills/vp-*; antigravity: ~/.gemini/antigravity/skills/vp-*; codex: ~/.codex/skills/vp-*; copilot: ~/.config/gh-copilot/skills/vp-*)
|
|
48
53
|
--yes Non-interactive mode (skip confirmations)
|
|
49
54
|
--dry-run Print actions only, do not remove files
|
|
50
55
|
`);
|
|
@@ -460,6 +465,108 @@ async function main() {
|
|
|
460
465
|
printTargets();
|
|
461
466
|
process.exit(0);
|
|
462
467
|
}
|
|
468
|
+
if (command === 'scan-skills') {
|
|
469
|
+
const { scanSkills } = require('../lib/skill-registry.cjs');
|
|
470
|
+
const result = scanSkills();
|
|
471
|
+
const byAdapter = {};
|
|
472
|
+
for (const skill of result.skills) {
|
|
473
|
+
for (const adapter of skill.adapters) {
|
|
474
|
+
byAdapter[adapter] = (byAdapter[adapter] || 0) + 1;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
console.log('Scanning skill directories...');
|
|
478
|
+
for (const p of result.scan_paths) {
|
|
479
|
+
const adapterName = Object.keys(byAdapter).find(a => p.includes(`.${a.replace('claude-code', 'claude')}`)) || '';
|
|
480
|
+
const count = byAdapter[adapterName];
|
|
481
|
+
const prefix = count != null ? ' ✓' : ' -';
|
|
482
|
+
console.log(`${prefix} ${p}${count != null ? ` — ${count} skill${count !== 1 ? 's' : ''} found` : ' — not installed (skipped)'}`);
|
|
483
|
+
}
|
|
484
|
+
const uniqueMulti = result.skills.filter(s => s.adapters.length > 1).length;
|
|
485
|
+
console.log(`\nRegistry written: ~/.viepilot/skill-registry.json`);
|
|
486
|
+
console.log(`Total: ${result.skills.length} unique skill${result.skills.length !== 1 ? 's' : ''}${uniqueMulti > 0 ? ` (${uniqueMulti} in multiple adapters)` : ''}`);
|
|
487
|
+
process.exit(0);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (command === 'list-skills') {
|
|
491
|
+
const { loadRegistry } = require('../lib/skill-registry.cjs');
|
|
492
|
+
const registry = loadRegistry();
|
|
493
|
+
if (!registry) {
|
|
494
|
+
console.log('No registry found. Run vp-tools scan-skills first.');
|
|
495
|
+
process.exit(0);
|
|
496
|
+
}
|
|
497
|
+
console.log(`\nInstalled skills (from ~/.viepilot/skill-registry.json):`);
|
|
498
|
+
console.log(`Last scan: ${registry.last_scan}\n`);
|
|
499
|
+
if (registry.skills.length === 0) {
|
|
500
|
+
console.log('No skills indexed.');
|
|
501
|
+
} else {
|
|
502
|
+
const idW = Math.max(4, ...registry.skills.map(s => s.id.length));
|
|
503
|
+
const adW = Math.max(8, ...registry.skills.map(s => s.adapters.join(', ').length));
|
|
504
|
+
const capW = 30;
|
|
505
|
+
const header = ` ${'ID'.padEnd(idW)} ${'Adapters'.padEnd(adW)} Capabilities`;
|
|
506
|
+
const sep = ` ${'─'.repeat(idW)} ${'─'.repeat(adW)} ${'─'.repeat(capW)}`;
|
|
507
|
+
console.log(header);
|
|
508
|
+
console.log(sep);
|
|
509
|
+
for (const skill of registry.skills) {
|
|
510
|
+
const caps = skill.capabilities.length > 0 ? skill.capabilities.join(', ') : '(legacy — no capabilities)';
|
|
511
|
+
console.log(` ${skill.id.padEnd(idW)} ${skill.adapters.join(', ').padEnd(adW)} ${caps}`);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
console.log('\nRun `vp-tools scan-skills` to refresh.');
|
|
515
|
+
process.exit(0);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
if (command === 'install-skill') {
|
|
519
|
+
const source = rest[0];
|
|
520
|
+
if (!source) { console.error('Usage: vp-tools install-skill <source>'); process.exit(1); }
|
|
521
|
+
const { installSkill } = require('../lib/skill-installer.cjs');
|
|
522
|
+
const channel = source.startsWith('github:') ? 'github' : source.startsWith('./') || source.startsWith('/') ? 'local' : 'npm';
|
|
523
|
+
console.log(`Installing skill: ${source} (${channel})...`);
|
|
524
|
+
const result = await installSkill(source);
|
|
525
|
+
if (result.ok) {
|
|
526
|
+
for (const p of result.installedPaths) console.log(` ✓ ${p} — installed`);
|
|
527
|
+
console.log(`Done. Skill "${result.id}" is ready.`);
|
|
528
|
+
process.exit(0);
|
|
529
|
+
} else {
|
|
530
|
+
console.error(`Error: ${result.error}`);
|
|
531
|
+
process.exit(1);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
if (command === 'uninstall-skill') {
|
|
536
|
+
const id = rest[0];
|
|
537
|
+
if (!id) { console.error('Usage: vp-tools uninstall-skill <id>'); process.exit(1); }
|
|
538
|
+
const { uninstallSkill } = require('../lib/skill-installer.cjs');
|
|
539
|
+
console.log(`Removing skill: ${id}...`);
|
|
540
|
+
const result = uninstallSkill(id);
|
|
541
|
+
if (result.ok) {
|
|
542
|
+
if (result.removedPaths.length === 0) {
|
|
543
|
+
console.log(`Skill "${id}" not found in any adapter dir.`);
|
|
544
|
+
} else {
|
|
545
|
+
for (const p of result.removedPaths) console.log(` ✓ ${p} — removed`);
|
|
546
|
+
}
|
|
547
|
+
process.exit(0);
|
|
548
|
+
} else {
|
|
549
|
+
console.error(`Error: ${result.error}`);
|
|
550
|
+
process.exit(1);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
if (command === 'update-skill') {
|
|
555
|
+
const id = rest[0];
|
|
556
|
+
if (!id) { console.error('Usage: vp-tools update-skill <id>'); process.exit(1); }
|
|
557
|
+
const { updateSkill } = require('../lib/skill-installer.cjs');
|
|
558
|
+
console.log(`Updating skill: ${id}...`);
|
|
559
|
+
const result = await updateSkill(id);
|
|
560
|
+
if (result.ok) {
|
|
561
|
+
for (const p of result.installedPaths) console.log(` ✓ ${p} — updated`);
|
|
562
|
+
console.log(`Done. Skill "${result.id}" updated.`);
|
|
563
|
+
process.exit(0);
|
|
564
|
+
} else {
|
|
565
|
+
console.error(`Error: ${result.error}`);
|
|
566
|
+
process.exit(1);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
|
|
463
570
|
if (command !== 'install' && command !== 'uninstall') {
|
|
464
571
|
console.error(`Unknown command: ${command}`);
|
|
465
572
|
printHelp();
|
package/bin/vp-tools.cjs
CHANGED
|
@@ -1137,6 +1137,83 @@ ${colors.cyan}Examples:${colors.reset}
|
|
|
1137
1137
|
process.exit(1);
|
|
1138
1138
|
},
|
|
1139
1139
|
|
|
1140
|
+
/**
|
|
1141
|
+
* Output global skill registry as JSON (BUG-016 fix — shell-executable alternative to loadRegistry())
|
|
1142
|
+
*/
|
|
1143
|
+
'get-registry': (args) => {
|
|
1144
|
+
const { loadRegistry } = require('../lib/skill-registry.cjs');
|
|
1145
|
+
const registry = loadRegistry();
|
|
1146
|
+
if (!registry) {
|
|
1147
|
+
process.stdout.write('null\n');
|
|
1148
|
+
process.exit(0);
|
|
1149
|
+
}
|
|
1150
|
+
const idFilter = args[0] === '--id' ? args[1] : null;
|
|
1151
|
+
if (idFilter) {
|
|
1152
|
+
const skill = (registry.skills || []).find(s => s.id === idFilter) || null;
|
|
1153
|
+
process.stdout.write(JSON.stringify(skill) + '\n');
|
|
1154
|
+
} else {
|
|
1155
|
+
process.stdout.write(JSON.stringify(registry) + '\n');
|
|
1156
|
+
}
|
|
1157
|
+
process.exit(0);
|
|
1158
|
+
},
|
|
1159
|
+
|
|
1160
|
+
/**
|
|
1161
|
+
* ENH-072: Check npm registry for newer ViePilot version (24h cached).
|
|
1162
|
+
* --silent exit 0 if up-to-date (no output); exit 1 + print latest if update available
|
|
1163
|
+
* --json print { installed, latest, has_update }; always exit 0
|
|
1164
|
+
* --force bypass 24h cache
|
|
1165
|
+
*/
|
|
1166
|
+
'check-update': (args) => {
|
|
1167
|
+
const silent = args.includes('--silent');
|
|
1168
|
+
const json = args.includes('--json');
|
|
1169
|
+
const force = args.includes('--force');
|
|
1170
|
+
const { checkLatestVersion } = require('../lib/viepilot-update.cjs');
|
|
1171
|
+
|
|
1172
|
+
checkLatestVersion({ force })
|
|
1173
|
+
.then(({ upToDate, installed, latest }) => {
|
|
1174
|
+
const has_update = !upToDate;
|
|
1175
|
+
if (json) {
|
|
1176
|
+
process.stdout.write(JSON.stringify({ installed, latest, has_update }) + '\n');
|
|
1177
|
+
process.exit(0);
|
|
1178
|
+
}
|
|
1179
|
+
if (silent) {
|
|
1180
|
+
if (has_update) {
|
|
1181
|
+
process.stdout.write(latest + '\n');
|
|
1182
|
+
process.exit(1);
|
|
1183
|
+
} else {
|
|
1184
|
+
process.exit(0);
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
// default human-readable output
|
|
1188
|
+
if (has_update) {
|
|
1189
|
+
process.stdout.write(
|
|
1190
|
+
`\n┌──────────────────────────────────────────────────────────────────┐\n` +
|
|
1191
|
+
`│ ✨ ViePilot v${latest} available (installed: v${installed})`.padEnd(69) + '│\n' +
|
|
1192
|
+
`│ npm i -g viepilot && vp-tools install`.padEnd(69) + '│\n' +
|
|
1193
|
+
`└──────────────────────────────────────────────────────────────────┘\n`
|
|
1194
|
+
);
|
|
1195
|
+
process.exit(1);
|
|
1196
|
+
} else {
|
|
1197
|
+
process.stdout.write(`ViePilot ${installed} is up to date.\n`);
|
|
1198
|
+
process.exit(0);
|
|
1199
|
+
}
|
|
1200
|
+
})
|
|
1201
|
+
.catch(() => {
|
|
1202
|
+
process.exit(0);
|
|
1203
|
+
});
|
|
1204
|
+
},
|
|
1205
|
+
|
|
1206
|
+
/**
|
|
1207
|
+
* Scan installed skills and rebuild ~/.viepilot/skill-registry.json (BUG-019)
|
|
1208
|
+
*/
|
|
1209
|
+
'scan-skills': (_args) => {
|
|
1210
|
+
const { scanSkills } = require('../lib/skill-registry.cjs');
|
|
1211
|
+
const result = scanSkills();
|
|
1212
|
+
const count = (result && result.skills) ? result.skills.length : 0;
|
|
1213
|
+
process.stdout.write(`✔ Scanned ${count} skill${count !== 1 ? 's' : ''} → ~/.viepilot/skill-registry.json\n`);
|
|
1214
|
+
process.exit(0);
|
|
1215
|
+
},
|
|
1216
|
+
|
|
1140
1217
|
/**
|
|
1141
1218
|
* Help
|
|
1142
1219
|
*/
|
|
@@ -1224,6 +1301,35 @@ ${colors.cyan}Examples:${colors.reset}
|
|
|
1224
1301
|
options: ['--json: Machine-readable JSON output'],
|
|
1225
1302
|
examples: ['vp-tools info', 'vp-tools info --json'],
|
|
1226
1303
|
},
|
|
1304
|
+
'get-registry': {
|
|
1305
|
+
usage: 'vp-tools get-registry [--id <skill-id>]',
|
|
1306
|
+
description: 'Output global skill registry as JSON (enables workflow shell integration)',
|
|
1307
|
+
options: ['--id <id>: Output only the matching skill object (null if not found)'],
|
|
1308
|
+
examples: [
|
|
1309
|
+
'vp-tools get-registry',
|
|
1310
|
+
'vp-tools get-registry --id frontend-design',
|
|
1311
|
+
],
|
|
1312
|
+
},
|
|
1313
|
+
'scan-skills': {
|
|
1314
|
+
usage: 'vp-tools scan-skills',
|
|
1315
|
+
description: 'Scan installed skills and rebuild ~/.viepilot/skill-registry.json',
|
|
1316
|
+
options: [],
|
|
1317
|
+
examples: ['vp-tools scan-skills'],
|
|
1318
|
+
},
|
|
1319
|
+
'check-update': {
|
|
1320
|
+
usage: 'vp-tools check-update [--silent] [--json] [--force]',
|
|
1321
|
+
description: 'Check for latest ViePilot version on npm registry (24h cached)',
|
|
1322
|
+
options: [
|
|
1323
|
+
'--silent Exit 0 if up-to-date (no output); exit 1 + print latest if update available',
|
|
1324
|
+
'--json Print { installed, latest, has_update }; always exit 0',
|
|
1325
|
+
'--force Bypass 24h cache and check now',
|
|
1326
|
+
],
|
|
1327
|
+
examples: [
|
|
1328
|
+
'vp-tools check-update --silent',
|
|
1329
|
+
'vp-tools check-update --json',
|
|
1330
|
+
'vp-tools check-update --force',
|
|
1331
|
+
],
|
|
1332
|
+
},
|
|
1227
1333
|
update: {
|
|
1228
1334
|
usage: 'vp-tools update [--dry-run] [--yes] [--global]',
|
|
1229
1335
|
description: 'Update viepilot to npm latest (local dependency, global install, or explicit --global)',
|
|
@@ -1282,6 +1388,9 @@ ${colors.cyan}Commands:${colors.reset}
|
|
|
1282
1388
|
${colors.bold}hooks${colors.reset} scaffold|install [--adapter] scaffold: print snippet; install: write to settings.json
|
|
1283
1389
|
${colors.bold}config${colors.reset} <get|set|reset> Read/write language config (~/.viepilot/config.json)
|
|
1284
1390
|
${colors.bold}save-state${colors.reset} Save current state for precise resume
|
|
1391
|
+
${colors.bold}get-registry${colors.reset} [--id <id>] Output global skill registry as JSON
|
|
1392
|
+
${colors.bold}scan-skills${colors.reset} Scan installed skills → ~/.viepilot/skill-registry.json
|
|
1393
|
+
${colors.bold}check-update${colors.reset} [--silent] Check for latest ViePilot version on npm (24h cached)
|
|
1285
1394
|
${colors.bold}help${colors.reset} [command] Show help (optionally for specific command)
|
|
1286
1395
|
|
|
1287
1396
|
${colors.cyan}Examples:${colors.reset}
|