viepilot 1.6.1 → 1.8.1
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 +41 -1
- package/bin/viepilot.cjs +54 -22
- package/docs/dev/deployment.md +3 -4
- package/docs/skills-reference.md +8 -0
- package/docs/troubleshooting.md +37 -0
- package/docs/user/features/autonomous-mode.md +6 -0
- package/docs/user/features/debug-mode.md +1 -0
- package/docs/user/quick-start.md +8 -0
- package/install.sh +23 -101
- package/lib/viepilot-install.cjs +427 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +14 -1
- package/skills/vp-auto/SKILL.md +7 -0
- package/skills/vp-brainstorm/SKILL.md +7 -0
- package/skills/vp-crystallize/SKILL.md +15 -0
- package/skills/vp-debug/SKILL.md +19 -5
- package/skills/vp-docs/SKILL.md +7 -0
- package/skills/vp-evolve/SKILL.md +7 -0
- package/skills/vp-info/SKILL.md +7 -0
- package/skills/vp-pause/SKILL.md +7 -0
- package/skills/vp-request/SKILL.md +7 -0
- package/skills/vp-resume/SKILL.md +7 -0
- package/skills/vp-rollback/SKILL.md +7 -0
- package/skills/vp-status/SKILL.md +7 -0
- package/skills/vp-task/SKILL.md +7 -0
- package/skills/vp-ui-components/SKILL.md +7 -0
- package/skills/vp-update/SKILL.md +7 -0
- package/templates/project/ARCHITECTURE.md +53 -0
- package/workflows/audit.md +7 -0
- package/workflows/autonomous.md +20 -0
- package/workflows/brainstorm.md +25 -0
- package/workflows/crystallize.md +24 -0
- package/workflows/debug.md +7 -0
- package/workflows/documentation.md +7 -0
- package/workflows/evolve.md +7 -0
- package/workflows/request.md +7 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Planned
|
|
11
|
+
|
|
12
|
+
- None.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- None yet.
|
|
17
|
+
|
|
18
|
+
## [1.8.1] - 2026-04-01
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **M1.26 / Phase 30 (BUG-004) completed** — enforced vp-only namespace behavior across the framework: all `vp-*` skills include scope guard rules, core workflows default to `vp-*` routing only, and external skills are allowed only via explicit user opt-in.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- `tests/unit/vp-scope-policy-contracts.test.js` — regression tests to ensure all bundled skills/workflows retain the BUG-004 scope policy contract.
|
|
27
|
+
|
|
28
|
+
### Documentation
|
|
29
|
+
|
|
30
|
+
- `docs/skills-reference.md`, `docs/user/features/autonomous-mode.md`, `docs/user/features/debug-mode.md`, `docs/user/quick-start.md` — clarified default `vp-*` scope and added explicit opt-in examples for external skills.
|
|
31
|
+
|
|
32
|
+
## [1.8.0] - 2026-04-01
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- **M1.25 / Phase 29 (ENH-018) completed** — complexity-gated Mermaid architecture contract shipped: brainstorm inputs + crystallize matrix (`required|optional|N/A`) for six diagram types, architecture template sections with N/A rationale policy, and skill/workflow alignment across `vp-crystallize`, `vp-audit`, `vp-debug`, and `autonomous`.
|
|
37
|
+
|
|
38
|
+
## [1.7.0] - 2026-04-01
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **M1.24 / Phase 28 (ENH-017) completed** — Node-native installer flow shipped: `lib/viepilot-install.cjs` (`buildInstallPlan`/`applyInstallPlan`), `bin/viepilot.cjs install` no longer spawns `bash`, `install.sh` now thin wrapper to Node, and Jest coverage for dry-run/apply/wrapper paths.
|
|
43
|
+
|
|
44
|
+
### Documentation
|
|
45
|
+
|
|
46
|
+
- `docs/troubleshooting.md`, `docs/dev/deployment.md` — updated install engine behavior (`npx viepilot install` Node-native, `install.sh` wrapper), Windows guidance, and reinstall semantics with `dev-install.sh`.
|
|
47
|
+
|
|
10
48
|
## [1.6.1] - 2026-04-01
|
|
11
49
|
|
|
12
50
|
### Enhanced
|
|
@@ -252,7 +290,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
252
290
|
|
|
253
291
|
---
|
|
254
292
|
|
|
255
|
-
[Unreleased]: https://github.com/0-CODE/viepilot/compare/
|
|
293
|
+
[Unreleased]: https://github.com/0-CODE/viepilot/compare/v1.8.1...HEAD
|
|
294
|
+
[1.8.1]: https://github.com/0-CODE/viepilot/compare/v1.8.0...v1.8.1
|
|
295
|
+
[1.8.0]: https://github.com/0-CODE/viepilot/compare/v1.7.0...v1.8.0
|
|
256
296
|
[0.10.0]: https://github.com/0-CODE/viepilot/compare/v0.9.0...v0.10.0
|
|
257
297
|
[0.9.0]: https://github.com/0-CODE/viepilot/compare/v0.8.2...v0.9.0
|
|
258
298
|
[0.8.2]: https://github.com/0-CODE/viepilot/compare/v0.8.1...v0.8.2
|
package/bin/viepilot.cjs
CHANGED
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
const path = require('path');
|
|
8
|
-
const { spawnSync } = require('child_process');
|
|
9
8
|
const readline = require('readline');
|
|
10
9
|
const fs = require('fs');
|
|
10
|
+
const os = require('os');
|
|
11
|
+
const { buildInstallPlan, applyInstallPlan, resolveViepilotPackageRoot } = require(path.join(
|
|
12
|
+
__dirname,
|
|
13
|
+
'..',
|
|
14
|
+
'lib',
|
|
15
|
+
'viepilot-install.cjs',
|
|
16
|
+
));
|
|
11
17
|
|
|
12
18
|
const TARGETS = [
|
|
13
19
|
{ id: 'claude-code', label: 'Claude Code' },
|
|
@@ -28,7 +34,7 @@ Usage:
|
|
|
28
34
|
Install options:
|
|
29
35
|
--target <id|id,id|all> Target profile(s): claude-code,cursor-agent,cursor-ide
|
|
30
36
|
--yes Non-interactive mode (skip confirmations)
|
|
31
|
-
--dry-run Print actions only
|
|
37
|
+
--dry-run Print actions only (Node installer; no bash)
|
|
32
38
|
--list-targets Print supported targets and exit
|
|
33
39
|
--help Show help
|
|
34
40
|
|
|
@@ -239,28 +245,48 @@ async function interactiveTargetSelection() {
|
|
|
239
245
|
return runKeyboardSelector(TARGETS, 'multi', 'Select install targets');
|
|
240
246
|
}
|
|
241
247
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
248
|
+
/**
|
|
249
|
+
* One install applies the same file bundle for every target id (profiles are informational).
|
|
250
|
+
* @param {string[]} selectedTargets
|
|
251
|
+
* @param {boolean} dryRun
|
|
252
|
+
* @returns {{ ok: boolean, code: number }}
|
|
253
|
+
*/
|
|
254
|
+
function runInstallViaNode(selectedTargets, dryRun) {
|
|
255
|
+
const fallbackRoot = path.join(__dirname, '..');
|
|
256
|
+
const pkgRoot = resolveViepilotPackageRoot(fallbackRoot) || fallbackRoot;
|
|
257
|
+
const profile = selectedTargets[0] || 'cursor-ide';
|
|
258
|
+
const env = {
|
|
259
|
+
...process.env,
|
|
260
|
+
VIEPILOT_AUTO_YES: '1',
|
|
261
|
+
VIEPILOT_INSTALL_PROFILE: profile,
|
|
247
262
|
};
|
|
248
|
-
|
|
263
|
+
const wantPathShim = env.VIEPILOT_ADD_PATH === '1';
|
|
249
264
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
console.
|
|
255
|
-
return { ok:
|
|
265
|
+
let plan;
|
|
266
|
+
try {
|
|
267
|
+
plan = buildInstallPlan(pkgRoot, env, { wantPathShim });
|
|
268
|
+
} catch (err) {
|
|
269
|
+
console.error(err.message);
|
|
270
|
+
return { ok: false, code: 1 };
|
|
256
271
|
}
|
|
257
272
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
273
|
+
console.log('');
|
|
274
|
+
console.log('ViePilot install (Node — no bash required)');
|
|
275
|
+
console.log(` Package: ${pkgRoot}`);
|
|
276
|
+
console.log(` Targets (informational): ${selectedTargets.join(', ')}`);
|
|
277
|
+
|
|
278
|
+
const applied = applyInstallPlan(plan, { dryRun });
|
|
279
|
+
if (applied.logs.length > 0) {
|
|
280
|
+
console.log('');
|
|
281
|
+
console.log(applied.logs.join('\n'));
|
|
282
|
+
}
|
|
283
|
+
if (!applied.ok && applied.errors.length > 0) {
|
|
284
|
+
const first = applied.errors[0];
|
|
285
|
+
const msg = first.error && first.error.message ? first.error.message : String(first.error);
|
|
286
|
+
console.error(msg);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return { ok: applied.ok, code: applied.ok ? 0 : 1 };
|
|
264
290
|
}
|
|
265
291
|
|
|
266
292
|
async function installCommand(rawArgs) {
|
|
@@ -290,7 +316,13 @@ async function installCommand(rawArgs) {
|
|
|
290
316
|
}
|
|
291
317
|
|
|
292
318
|
console.log(`\nSelected targets: ${selectedTargets.join(', ')}`);
|
|
293
|
-
const
|
|
319
|
+
const run = runInstallViaNode(selectedTargets, options.dryRun);
|
|
320
|
+
const results = selectedTargets.map((target) => ({
|
|
321
|
+
ok: run.ok,
|
|
322
|
+
target,
|
|
323
|
+
dryRun: options.dryRun,
|
|
324
|
+
code: run.code,
|
|
325
|
+
}));
|
|
294
326
|
const failed = results.filter((r) => !r.ok);
|
|
295
327
|
|
|
296
328
|
console.log('\nInstall summary:');
|
|
@@ -307,7 +339,7 @@ async function installCommand(rawArgs) {
|
|
|
307
339
|
}
|
|
308
340
|
|
|
309
341
|
function computeUninstallPaths(targets) {
|
|
310
|
-
const home = process.env.HOME || '';
|
|
342
|
+
const home = process.env.HOME || os.homedir() || '';
|
|
311
343
|
const cursorSkills = path.join(home, '.cursor', 'skills');
|
|
312
344
|
const vpRoot = path.join(home, '.cursor', 'viepilot');
|
|
313
345
|
const paths = [];
|
package/docs/dev/deployment.md
CHANGED
|
@@ -24,11 +24,10 @@ cd viepilot
|
|
|
24
24
|
./install.sh
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`install.sh`
|
|
27
|
+
`install.sh` is a thin **bash** wrapper: optional **cloc** / **PATH** prompts, then **`node bin/viepilot.cjs install`** (same **Node** engine as `npx viepilot install`). It installs to:
|
|
28
28
|
- `skills/vp-*/` → `~/.cursor/skills/`
|
|
29
|
-
- `workflows/` → `~/.cursor/viepilot
|
|
30
|
-
-
|
|
31
|
-
- `bin/vp-tools.cjs` → `~/.local/bin/vp-tools`
|
|
29
|
+
- `workflows/`, `templates/`, `bin/`, `lib/` → `~/.cursor/viepilot/…`
|
|
30
|
+
- Optional PATH symlinks (Unix) via `VIEPILOT_ADD_PATH=1`
|
|
32
31
|
|
|
33
32
|
### Method 3: Development Mode
|
|
34
33
|
|
package/docs/skills-reference.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Complete reference for all ViePilot skills.
|
|
4
4
|
|
|
5
|
+
## ViePilot Scope Policy
|
|
6
|
+
|
|
7
|
+
- **Default behavior**: ViePilot workflows and responses only use skills under `vp-*`.
|
|
8
|
+
- **Out-of-scope by default**: skills outside the ViePilot namespace are ignored, even if present in the runtime environment.
|
|
9
|
+
- **Explicit opt-in**: external skills are considered only when the user explicitly asks to expand beyond ViePilot scope.
|
|
10
|
+
- **Routing fallback**: if an external skill is mentioned accidentally, prefer the closest built-in `vp-*` command instead.
|
|
11
|
+
- **Opt-in example**: "Trong bước này, cho phép dùng thêm external skills ngoài ViePilot để tham khảo."
|
|
12
|
+
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
## /vp-brainstorm
|
package/docs/troubleshooting.md
CHANGED
|
@@ -68,6 +68,43 @@ chmod +x install.sh
|
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
71
|
+
### `npx viepilot install` vs dev clone — upgrade / cài lại có “conflict” không?
|
|
72
|
+
|
|
73
|
+
**Không có** giao diện merge từng file. Hành vi phụ thuộc **script nào** chạy:
|
|
74
|
+
|
|
75
|
+
| Cách cài | Script | Trước khi ghi file mới |
|
|
76
|
+
|----------|--------|-------------------------|
|
|
77
|
+
| **`npx viepilot install`** (mọi `--target`) | **`bin/viepilot.cjs`** + `lib/viepilot-install.cjs` (Node, **không** bash) | **Không** xóa `~/.cursor/skills/vp-*` hay `~/.cursor/viepilot`; copy đè tương đương **`cp -r`**. File cùng tên bị ghi đè; file **chỉ còn ở bản cũ** có thể **vẫn nằm lại** (orphan). |
|
|
78
|
+
| **`./install.sh`** từ clone / tarball | Thin **bash** wrapper → gọi `node bin/viepilot.cjs install` | Cùng engine Node như NPX; bash chỉ còn prompt (cloc, PATH) khi không `VIEPILOT_AUTO_YES=1`. |
|
|
79
|
+
| **`./dev-install.sh`** từ clone repo | `dev-install.sh` | **Có** xóa sạch `vp-*` skills + **`rm -rf ~/.cursor/viepilot`** rồi cài lại → gần như cài mới hoàn toàn. |
|
|
80
|
+
|
|
81
|
+
`npx viepilot install` chạy **trực tiếp** Node installer — **không** spawn `bash install.sh`. `install.sh` dùng khi bạn chạy tay từ repo và muốn prompt cloc/PATH giống trước.
|
|
82
|
+
|
|
83
|
+
**Muốn cài sạch sau bản cũ** (tránh sót file):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx viepilot uninstall --yes
|
|
87
|
+
npx viepilot install --target cursor-agent --yes
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
(Chọn lại `--target` đúng profile bạn dùng.)
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### Windows / đa OS: `install.sh` và `npx viepilot install` chạy thế nào?
|
|
95
|
+
|
|
96
|
+
**`npx viepilot install`** dùng **Node** (`lib/viepilot-install.cjs`) — **không** cần Bash. **`./install.sh`** là wrapper Bash (prompt cloc/PATH) rồi gọi `node bin/viepilot.cjs install …`. **`dev-install.sh`** vẫn là Bash đầy đủ (xóa + copy).
|
|
97
|
+
|
|
98
|
+
| OS | `npx viepilot install` | `./install.sh` |
|
|
99
|
+
|----|------------------------|----------------|
|
|
100
|
+
| **macOS**, **Linux** | Chỉ cần Node trên PATH | Bash → Node (cùng engine với NPX) |
|
|
101
|
+
| **Windows (CMD/PowerShell)** | Chạy được với Node | Cần Git Bash / WSL cho file `.sh`, hoặc: `node bin\viepilot.cjs install --target cursor-agent --yes` |
|
|
102
|
+
| **PATH `/usr/local/bin`** | Tùy chọn trong installer (Unix); Windows bỏ qua / PATH thủ công | |
|
|
103
|
+
|
|
104
|
+
Với ViePilot **Node-native install**, lỗi **`bash: command not found`** khi chạy **`npx viepilot install`** không còn điển hình — nếu vẫn gặp trên bản cũ, hãy nâng ViePilot hoặc dùng `node bin/viepilot.cjs install …` từ source.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
71
108
|
### `vp-tools: command not found`
|
|
72
109
|
|
|
73
110
|
**Cause**: ViePilot bin not in PATH.
|
|
@@ -30,6 +30,12 @@ Mỗi task:
|
|
|
30
30
|
/vp-auto --dry-run # Preview, không execute
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
## ViePilot Scope Policy (BUG-004)
|
|
34
|
+
|
|
35
|
+
- Mặc định, `/vp-auto` chỉ route/gợi ý các skill thuộc namespace `vp-*`.
|
|
36
|
+
- Nếu môi trường runtime có skills ngoài framework, workflow sẽ bỏ qua và ưu tiên skill ViePilot tương đương.
|
|
37
|
+
- Chỉ khi bạn ghi rõ yêu cầu mở rộng (explicit opt-in), agent mới được phép dùng external skills.
|
|
38
|
+
|
|
33
39
|
### Doc-first gate (v0.8.2 / BUG-001)
|
|
34
40
|
|
|
35
41
|
Workflow `autonomous.md` yêu cầu **ghi nhận kế hoạch trong file task** và **`PHASE-STATE` → `in_progress`** trước khi chỉnh sửa deliverable. Xem `workflows/autonomous.md` — *Pre-execution documentation gate*.
|
|
@@ -75,3 +75,4 @@ Active debug sessions:
|
|
|
75
75
|
- Mô tả problem cụ thể: "X happens when Y" thay vì "something is broken"
|
|
76
76
|
- Một session per issue — không mix nhiều bugs
|
|
77
77
|
- Dùng `/vp-debug continue` sau context reset để không mất progress
|
|
78
|
+
- Theo policy BUG-004, `/vp-debug` mặc định chỉ dùng hệ skill `vp-*`; external skills chỉ dùng khi bạn explicit opt-in.
|
package/docs/user/quick-start.md
CHANGED
|
@@ -182,6 +182,14 @@ Hiển thị:
|
|
|
182
182
|
|
|
183
183
|
---
|
|
184
184
|
|
|
185
|
+
## Skill Scope (BUG-004)
|
|
186
|
+
|
|
187
|
+
- Theo mặc định, ViePilot chỉ dùng hệ lệnh/skill `vp-*` trong toàn bộ workflow.
|
|
188
|
+
- Nếu bạn thấy đề cập skill ngoài framework, hãy coi đó là out-of-scope trừ khi bạn đã explicit opt-in.
|
|
189
|
+
- Ví dụ opt-in hợp lệ: "Cho phép dùng thêm external skills ngoài ViePilot trong bước research này."
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
185
193
|
## Next Steps
|
|
186
194
|
|
|
187
195
|
- [Skills Reference](../skills-reference.md) — Chi tiết tất cả commands
|
package/install.sh
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
-
# ViePilot
|
|
4
|
-
#
|
|
3
|
+
# ViePilot installation — thin wrapper around the Node installer (bin/viepilot.cjs).
|
|
4
|
+
# Implements prompts + optional cloc install here; file copy/symlink/chmod/path is in lib/viepilot-install.cjs.
|
|
5
5
|
#
|
|
6
|
-
# Optional: VIEPILOT_SYMLINK_SKILLS=1 — symlink skills
|
|
6
|
+
# Optional: VIEPILOT_SYMLINK_SKILLS=1 — passed through to Node (symlink skills into ~/.cursor/skills/)
|
|
7
|
+
# Optional: VIEPILOT_INSTALL_DRY_RUN=1 — runs `viepilot install --dry-run` (for CI/tests)
|
|
7
8
|
|
|
8
9
|
set -e
|
|
9
10
|
|
|
10
|
-
# Colors for output
|
|
11
11
|
RED='\033[0;31m'
|
|
12
12
|
GREEN='\033[0;32m'
|
|
13
13
|
YELLOW='\033[1;33m'
|
|
14
14
|
BLUE='\033[0;34m'
|
|
15
|
-
NC='\033[0m'
|
|
15
|
+
NC='\033[0m'
|
|
16
16
|
|
|
17
|
-
# Get script directory
|
|
18
17
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
cd "$SCRIPT_DIR" || exit 1
|
|
19
19
|
|
|
20
|
-
# Default installation paths
|
|
21
20
|
CURSOR_SKILLS_DIR="$HOME/.cursor/skills"
|
|
22
21
|
VIEPILOT_DIR="$HOME/.cursor/viepilot"
|
|
23
22
|
AUTO_YES="${VIEPILOT_AUTO_YES:-0}"
|
|
@@ -30,7 +29,6 @@ echo " VIEPILOT INSTALLER"
|
|
|
30
29
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
31
30
|
echo -e "${NC}"
|
|
32
31
|
|
|
33
|
-
# Check if running from viepilot directory
|
|
34
32
|
if [ ! -f "$SCRIPT_DIR/README.md" ] || [ ! -d "$SCRIPT_DIR/skills" ]; then
|
|
35
33
|
echo -e "${RED}Error: Please run this script from the viepilot directory${NC}"
|
|
36
34
|
exit 1
|
|
@@ -40,6 +38,7 @@ echo -e "${YELLOW}Installation paths:${NC}"
|
|
|
40
38
|
echo " Skills: $CURSOR_SKILLS_DIR"
|
|
41
39
|
echo " ViePilot: $VIEPILOT_DIR"
|
|
42
40
|
echo " Profile: $INSTALL_PROFILE"
|
|
41
|
+
echo " Engine: Node (bin/viepilot.cjs) — no bash copy logic"
|
|
43
42
|
echo ""
|
|
44
43
|
|
|
45
44
|
install_cloc_best_effort() {
|
|
@@ -86,7 +85,6 @@ install_cloc_best_effort() {
|
|
|
86
85
|
fi
|
|
87
86
|
}
|
|
88
87
|
|
|
89
|
-
# Confirm installation
|
|
90
88
|
if [ "$AUTO_YES" != "1" ]; then
|
|
91
89
|
read -p "Continue with installation? (y/n) " -n 1 -r
|
|
92
90
|
echo
|
|
@@ -99,105 +97,29 @@ else
|
|
|
99
97
|
fi
|
|
100
98
|
|
|
101
99
|
echo ""
|
|
102
|
-
echo -e "${BLUE}
|
|
103
|
-
|
|
104
|
-
# Create directories
|
|
105
|
-
echo " Creating directories..."
|
|
106
|
-
mkdir -p "$CURSOR_SKILLS_DIR"
|
|
107
|
-
mkdir -p "$VIEPILOT_DIR/workflows"
|
|
108
|
-
mkdir -p "$VIEPILOT_DIR/templates/project"
|
|
109
|
-
mkdir -p "$VIEPILOT_DIR/templates/phase"
|
|
110
|
-
mkdir -p "$VIEPILOT_DIR/bin"
|
|
111
|
-
mkdir -p "$VIEPILOT_DIR/lib"
|
|
112
|
-
mkdir -p "$VIEPILOT_DIR/ui-components"
|
|
113
|
-
|
|
114
|
-
# Install skills (copy default; VIEPILOT_SYMLINK_SKILLS=1 for dev-style live links)
|
|
115
|
-
echo " Installing skills..."
|
|
116
|
-
for skill_dir in "$SCRIPT_DIR/skills"/*; do
|
|
117
|
-
if [ -d "$skill_dir" ]; then
|
|
118
|
-
skill_name=$(basename "$skill_dir")
|
|
119
|
-
if [ "${VIEPILOT_SYMLINK_SKILLS:-0}" = "1" ]; then
|
|
120
|
-
if command -v realpath >/dev/null 2>&1; then
|
|
121
|
-
skill_abs=$(realpath "$skill_dir")
|
|
122
|
-
else
|
|
123
|
-
skill_abs=$(cd "$skill_dir" && pwd)
|
|
124
|
-
fi
|
|
125
|
-
ln -sfn "$skill_abs" "$CURSOR_SKILLS_DIR/$skill_name"
|
|
126
|
-
echo " ✓ $skill_name (symlink)"
|
|
127
|
-
else
|
|
128
|
-
cp -r "$skill_dir" "$CURSOR_SKILLS_DIR/"
|
|
129
|
-
echo " ✓ $skill_name"
|
|
130
|
-
fi
|
|
131
|
-
fi
|
|
132
|
-
done
|
|
133
|
-
|
|
134
|
-
# Install workflows
|
|
135
|
-
echo " Installing workflows..."
|
|
136
|
-
cp -r "$SCRIPT_DIR/workflows"/* "$VIEPILOT_DIR/workflows/"
|
|
137
|
-
echo " ✓ workflows"
|
|
138
|
-
|
|
139
|
-
# Install templates
|
|
140
|
-
echo " Installing templates..."
|
|
141
|
-
cp -r "$SCRIPT_DIR/templates/project"/* "$VIEPILOT_DIR/templates/project/"
|
|
142
|
-
cp -r "$SCRIPT_DIR/templates/phase"/* "$VIEPILOT_DIR/templates/phase/"
|
|
143
|
-
echo " ✓ templates"
|
|
144
|
-
|
|
145
|
-
# Install stock UI components
|
|
146
|
-
echo " Installing stock UI components..."
|
|
147
|
-
if [ -d "$SCRIPT_DIR/ui-components" ]; then
|
|
148
|
-
cp -r "$SCRIPT_DIR/ui-components"/* "$VIEPILOT_DIR/ui-components/"
|
|
149
|
-
echo " ✓ ui-components"
|
|
150
|
-
fi
|
|
151
|
-
|
|
152
|
-
# Install CLI tools
|
|
153
|
-
echo " Installing CLI tools..."
|
|
154
|
-
cp "$SCRIPT_DIR/bin/vp-tools.cjs" "$VIEPILOT_DIR/bin/"
|
|
155
|
-
cp "$SCRIPT_DIR/bin/viepilot.cjs" "$VIEPILOT_DIR/bin/"
|
|
156
|
-
cp "$SCRIPT_DIR/lib/cli-shared.cjs" "$VIEPILOT_DIR/lib/"
|
|
157
|
-
chmod +x "$VIEPILOT_DIR/bin/vp-tools.cjs"
|
|
158
|
-
chmod +x "$VIEPILOT_DIR/bin/viepilot.cjs"
|
|
159
|
-
echo " ✓ vp-tools.cjs + viepilot.cjs + lib/cli-shared.cjs"
|
|
160
|
-
|
|
161
|
-
echo " Checking optional dependency for README metric sync..."
|
|
100
|
+
echo -e "${BLUE}Preparing Node installer...${NC}"
|
|
162
101
|
install_cloc_best_effort
|
|
163
102
|
|
|
164
|
-
# Create symlink in PATH (optional)
|
|
165
103
|
echo ""
|
|
166
104
|
if [ "$AUTO_YES" != "1" ]; then
|
|
167
|
-
read -p "Add vp-tools + viepilot to PATH? (
|
|
105
|
+
read -p "Add vp-tools + viepilot to PATH? (symlinks via Node installer, often /usr/local/bin) (y/n) " -n 1 -r
|
|
168
106
|
echo
|
|
107
|
+
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
108
|
+
export VIEPILOT_ADD_PATH=1
|
|
109
|
+
fi
|
|
169
110
|
else
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
173
|
-
if [ -w "/usr/local/bin" ]; then
|
|
174
|
-
ln -sf "$VIEPILOT_DIR/bin/vp-tools.cjs" "/usr/local/bin/vp-tools"
|
|
175
|
-
ln -sf "$VIEPILOT_DIR/bin/viepilot.cjs" "/usr/local/bin/viepilot"
|
|
176
|
-
echo " ✓ vp-tools + viepilot added to PATH"
|
|
177
|
-
else
|
|
178
|
-
echo -e "${YELLOW} Note: Need sudo to create symlink${NC}"
|
|
179
|
-
sudo ln -sf "$VIEPILOT_DIR/bin/vp-tools.cjs" "/usr/local/bin/vp-tools"
|
|
180
|
-
sudo ln -sf "$VIEPILOT_DIR/bin/viepilot.cjs" "/usr/local/bin/viepilot"
|
|
181
|
-
echo " ✓ vp-tools + viepilot added to PATH"
|
|
111
|
+
if [ "$ADD_PATH_CHOICE" = "1" ]; then
|
|
112
|
+
export VIEPILOT_ADD_PATH=1
|
|
182
113
|
fi
|
|
183
114
|
fi
|
|
184
115
|
|
|
116
|
+
export VIEPILOT_AUTO_YES=1
|
|
117
|
+
|
|
118
|
+
NODE_ARGS=(install --target "$INSTALL_PROFILE" --yes)
|
|
119
|
+
if [ "${VIEPILOT_INSTALL_DRY_RUN:-0}" = "1" ]; then
|
|
120
|
+
NODE_ARGS+=(--dry-run)
|
|
121
|
+
fi
|
|
122
|
+
|
|
185
123
|
echo ""
|
|
186
|
-
echo -e "${
|
|
187
|
-
|
|
188
|
-
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
189
|
-
echo ""
|
|
190
|
-
echo "Installed:"
|
|
191
|
-
echo " - Skills: $CURSOR_SKILLS_DIR/vp-*"
|
|
192
|
-
echo " - Workflows: $VIEPILOT_DIR/workflows/"
|
|
193
|
-
echo " - Templates: $VIEPILOT_DIR/templates/"
|
|
194
|
-
echo " - CLI: $VIEPILOT_DIR/bin/vp-tools.cjs"
|
|
195
|
-
echo ""
|
|
196
|
-
echo "Quick Start:"
|
|
197
|
-
echo " 1. Open your project in Cursor"
|
|
198
|
-
echo " 2. Run: /vp-brainstorm"
|
|
199
|
-
echo " 3. After brainstorm: /vp-crystallize"
|
|
200
|
-
echo " 4. Start coding: /vp-auto"
|
|
201
|
-
echo ""
|
|
202
|
-
echo "Documentation: $SCRIPT_DIR/docs/getting-started.md"
|
|
203
|
-
echo ""
|
|
124
|
+
echo -e "${BLUE}Running: node bin/viepilot.cjs ${NODE_ARGS[*]}${NC}"
|
|
125
|
+
exec node "$SCRIPT_DIR/bin/viepilot.cjs" "${NODE_ARGS[@]}"
|