vector-cadence-skills 0.1.0 → 0.1.4
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 +12 -0
- package/DOCUMENTATION.md +10 -12
- package/README.md +56 -0
- package/package.json +5 -1
- package/plugin.json +15 -0
- package/references/architecture-overview.md +1 -1
- package/scripts/bin.js +242 -0
- package/scripts/validate-skills.mjs +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3
|
|
4
|
+
|
|
5
|
+
- Updated folder target configurations for Codex CLI (`.codex/skills`), OpenCode (`.opencode/skills`), Pi (`.pi/skills`), and Claude Code (`CLAUDE.md`).
|
|
6
|
+
|
|
7
|
+
## 0.1.2
|
|
8
|
+
|
|
9
|
+
- Expanded installer to support deploying rules to various agent environments: Cursor, Claude Code, Pi/Codex, and Oh-My-Pi/OpenCode.
|
|
10
|
+
|
|
11
|
+
## 0.1.1
|
|
12
|
+
|
|
13
|
+
- Added installation CLI binary (`scripts/bin.js`) and `plugin.json` for NPM package distribution.
|
|
14
|
+
|
|
3
15
|
## 0.1.0
|
|
4
16
|
|
|
5
17
|
- Added initial production-ready Vector Cadence integrated skill suite.
|
package/DOCUMENTATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
4
|
|
|
5
|
-
This document describes the finalized production-oriented Vector Cadence skill suite in `skills
|
|
5
|
+
This document describes the finalized production-oriented Vector Cadence skill suite in the `skills/` directory.
|
|
6
6
|
|
|
7
7
|
The suite started as an integration of Matt Pocock’s engineering skills and Compound Engineering’s skills, but the final version no longer exposes that integration history inside each runtime skill. Runtime skills are now concise operating procedures. Source comparisons, rationale, and architecture decisions live in documentation and reference files.
|
|
8
8
|
|
|
@@ -852,10 +852,10 @@ Important references:
|
|
|
852
852
|
Validation command from the workspace root used in this environment:
|
|
853
853
|
|
|
854
854
|
```bash
|
|
855
|
-
|
|
855
|
+
npm run validate
|
|
856
856
|
```
|
|
857
857
|
|
|
858
|
-
|
|
858
|
+
Or:
|
|
859
859
|
|
|
860
860
|
```bash
|
|
861
861
|
node scripts/validate-skills.mjs
|
|
@@ -974,20 +974,18 @@ Use `references/source-integration-map.md` to explain upstream sources and integ
|
|
|
974
974
|
|
|
975
975
|
### 17.4 Run validation before publishing
|
|
976
976
|
|
|
977
|
-
|
|
977
|
+
From the project root directory, run:
|
|
978
978
|
|
|
979
979
|
```bash
|
|
980
|
-
|
|
980
|
+
npm run validate
|
|
981
981
|
```
|
|
982
982
|
|
|
983
|
-
|
|
983
|
+
Or:
|
|
984
984
|
|
|
985
985
|
```bash
|
|
986
|
-
node
|
|
986
|
+
node scripts/validate-skills.mjs
|
|
987
987
|
```
|
|
988
988
|
|
|
989
|
-
from the parent directory.
|
|
990
|
-
|
|
991
989
|
### 17.5 Keep examples small
|
|
992
990
|
|
|
993
991
|
Examples should teach behavior, not become huge tutorials.
|
|
@@ -1017,9 +1015,9 @@ Includes:
|
|
|
1017
1015
|
- changelog,
|
|
1018
1016
|
- contributing guide.
|
|
1019
1017
|
|
|
1020
|
-
### Phase 2: Package as `vc-skills`
|
|
1018
|
+
### Phase 2: Package as `vc-skills` (Completed)
|
|
1021
1019
|
|
|
1022
|
-
|
|
1020
|
+
Completed adding package metadata (`package.json`, `plugin.json`, `skills.json`) and an installer CLI (`scripts/bin.js`) to support Cursor, Claude Code, Pi, Codex, OpenCode, and Oh-My-Pi targets.
|
|
1023
1021
|
|
|
1024
1022
|
### Phase 3: Build `vc-extensions`
|
|
1025
1023
|
|
|
@@ -1069,7 +1067,7 @@ The final skill suite is now in the shape it should be for a publishable skill p
|
|
|
1069
1067
|
|
|
1070
1068
|
The next best step is not more skill editing. The next best step is packaging and harness implementation:
|
|
1071
1069
|
|
|
1072
|
-
1. Treat `
|
|
1070
|
+
1. Treat `vector-cadence-skills` as the seed for `@your-scope/vc-skills`.
|
|
1073
1071
|
2. Build `vc-extensions` for actual tools.
|
|
1074
1072
|
3. Build a thin pi-first `vc-cli` wrapper.
|
|
1075
1073
|
4. Keep Reasonix/cache-first work behind telemetry and measurement.
|
package/README.md
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
Vector Cadence Skills is a production-ready skill suite for agentic software engineering workflows. It integrates the useful disciplines from Matt Pocock’s skills and Compound Engineering without making runtime skills depend on upstream command names or block-by-block composition.
|
|
4
4
|
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
Install globally using `npm`:
|
|
8
|
+
```bash
|
|
9
|
+
npm install -g vector-cadence-skills
|
|
10
|
+
```
|
|
11
|
+
Or execute the installer directly using `npx`:
|
|
12
|
+
```bash
|
|
13
|
+
npx vc-skills
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
By default, executing `npx vc-skills` without arguments installs the skills globally to your **Antigravity** plugin config.
|
|
17
|
+
|
|
18
|
+
To deploy rules and skills locally to other agent environments in your current project folder, run:
|
|
19
|
+
```bash
|
|
20
|
+
npx vc-skills --cursor # Cursor rules (.cursor/rules/)
|
|
21
|
+
npx vc-skills --claude # Claude Code skills (.claude/skills/)
|
|
22
|
+
npx vc-skills --codex # Codex CLI skills (.codex/skills/)
|
|
23
|
+
npx vc-skills --opencode # OpenCode skills (.opencode/skills/)
|
|
24
|
+
npx vc-skills --pi # Pi skills (.pi/skills/)
|
|
25
|
+
npx vc-skills --omp # Oh-My-Pi skills (.omp/skills/)
|
|
26
|
+
npx vc-skills --all # Deploys to all local environments simultaneously
|
|
27
|
+
```
|
|
28
|
+
|
|
5
29
|
## Core idea
|
|
6
30
|
|
|
7
31
|
Each skill owns one lifecycle responsibility:
|
|
@@ -96,11 +120,43 @@ templates/AGENTS.md
|
|
|
96
120
|
templates/CONTEXT.md
|
|
97
121
|
templates/vc-budget.yml
|
|
98
122
|
scripts/validate-skills.mjs
|
|
123
|
+
scripts/bin.js
|
|
99
124
|
skills.json
|
|
100
125
|
examples/
|
|
101
126
|
references/
|
|
102
127
|
```
|
|
103
128
|
|
|
129
|
+
## Installation & Deployment
|
|
130
|
+
|
|
131
|
+
Vector Cadence Skills can be installed globally as an npm package or executed directly to deploy rules and skills to various local development agent environments.
|
|
132
|
+
|
|
133
|
+
### 1. Global Installation (Antigravity)
|
|
134
|
+
By default, running the installer without arguments copies all skills and assets to the Antigravity global plugins directory:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Install dependencies first
|
|
138
|
+
npm install
|
|
139
|
+
|
|
140
|
+
# Run the installer to deploy to Antigravity global config
|
|
141
|
+
node scripts/bin.js
|
|
142
|
+
|
|
143
|
+
# Or if installed globally / via npx:
|
|
144
|
+
npx vc-skills
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 2. Deploying to Local Agent Tools
|
|
148
|
+
You can deploy the skills as configuration rules directly to local agent environments in your active project directory. Use the corresponding CLI flags:
|
|
149
|
+
|
|
150
|
+
| Target Environment | CLI Command | Target Location | Description |
|
|
151
|
+
|---|---|---|---|
|
|
152
|
+
| **Cursor** | `npx vc-skills --cursor` | `.cursor/rules/vc-*.md` | Deploys skills as Cursor rules |
|
|
153
|
+
| **Claude Code** | `npx vc-skills --claude` | `.claude/skills/vc-*/` | Deploys skill directories and a lightweight starter `CLAUDE.md` to Claude Code |
|
|
154
|
+
| **Codex CLI** | `npx vc-skills --codex` | `.codex/skills/vc-*/` | Deploys skill directories to Codex |
|
|
155
|
+
| **OpenCode** | `npx vc-skills --opencode` | `.opencode/skills/vc-*/` | Deploys skill directories to OpenCode |
|
|
156
|
+
| **Pi** | `npx vc-skills --pi` | `.pi/skills/vc-*/` | Deploys skill directories to Pi |
|
|
157
|
+
| **Oh-My-Pi** | `npx vc-skills --omp` | `.omp/skills/vc-*/` | Deploys skill directories to Oh-My-Pi |
|
|
158
|
+
| **All targets** | `npx vc-skills --all` | (All of the above) | Deploys to all local targets simultaneously |
|
|
159
|
+
|
|
104
160
|
## Validation
|
|
105
161
|
|
|
106
162
|
From this directory, run:
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vector-cadence-skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Integrated Vector Cadence skill suite for agentic software engineering workflows.",
|
|
5
5
|
"main": "skills.json",
|
|
6
|
+
"bin": {
|
|
7
|
+
"vc-skills": "scripts/bin.js"
|
|
8
|
+
},
|
|
6
9
|
"scripts": {
|
|
7
10
|
"validate": "node scripts/validate-skills.mjs"
|
|
8
11
|
},
|
|
@@ -31,6 +34,7 @@
|
|
|
31
34
|
"scripts",
|
|
32
35
|
"templates",
|
|
33
36
|
"skills.json",
|
|
37
|
+
"plugin.json",
|
|
34
38
|
"README.md",
|
|
35
39
|
"DOCUMENTATION.md",
|
|
36
40
|
"CHANGELOG.md",
|
package/plugin.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vector-cadence-skills",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Integrated Vector Cadence skill suite for agentic software engineering workflows.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Mithil Yaganti"
|
|
7
|
+
},
|
|
8
|
+
"license": "Apache-2.0",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"vector-cadence",
|
|
11
|
+
"skills",
|
|
12
|
+
"software-engineering",
|
|
13
|
+
"agentic"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vector Cadence Skills — Architecture Overview
|
|
2
2
|
|
|
3
|
-
This is the short architecture document for the new skill suite.
|
|
3
|
+
This is the short architecture document for the new skill suite. The full, comprehensive documentation can be found in [DOCUMENTATION.md](file:///c:/Users/mithi/Desktop/mithil/skills/DOCUMENTATION.md).
|
|
4
4
|
|
|
5
5
|
## 1. What changed from the original Vector Cadence document
|
|
6
6
|
|
package/scripts/bin.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
// Source directory (root of the package)
|
|
8
|
+
const packageRootDir = path.resolve(__dirname, '..');
|
|
9
|
+
|
|
10
|
+
// Helper to copy directory recursively
|
|
11
|
+
function copyDir(src, dest) {
|
|
12
|
+
if (!fs.existsSync(src)) return;
|
|
13
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
14
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
15
|
+
|
|
16
|
+
for (let entry of entries) {
|
|
17
|
+
const srcPath = path.join(src, entry.name);
|
|
18
|
+
const destPath = path.join(dest, entry.name);
|
|
19
|
+
|
|
20
|
+
if (entry.isDirectory()) {
|
|
21
|
+
copyDir(srcPath, destPath);
|
|
22
|
+
} else {
|
|
23
|
+
fs.copyFileSync(srcPath, destPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Installation Targets
|
|
29
|
+
function installToAntigravity() {
|
|
30
|
+
const homeDir = os.homedir();
|
|
31
|
+
const pluginsDir = path.join(homeDir, '.gemini', 'config', 'plugins');
|
|
32
|
+
const targetDir = path.join(pluginsDir, 'vector-cadence-skills');
|
|
33
|
+
|
|
34
|
+
console.log('Installing to Antigravity (global)...');
|
|
35
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
36
|
+
|
|
37
|
+
const itemsToCopy = [
|
|
38
|
+
'skills', 'examples', 'references', 'scripts', 'templates',
|
|
39
|
+
'skills.json', 'plugin.json', 'README.md', 'DOCUMENTATION.md',
|
|
40
|
+
'CHANGELOG.md', 'CONTRIBUTING.md'
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
for (const item of itemsToCopy) {
|
|
44
|
+
const srcPath = path.join(packageRootDir, item);
|
|
45
|
+
const destPath = path.join(targetDir, item);
|
|
46
|
+
|
|
47
|
+
if (!fs.existsSync(srcPath)) continue;
|
|
48
|
+
|
|
49
|
+
const stats = fs.statSync(srcPath);
|
|
50
|
+
if (stats.isDirectory()) {
|
|
51
|
+
copyDir(srcPath, destPath);
|
|
52
|
+
} else {
|
|
53
|
+
fs.copyFileSync(srcPath, destPath);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
console.log(`- Installed successfully to Antigravity global plugins: ${targetDir}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function installToCursor() {
|
|
60
|
+
const destDir = path.join(process.cwd(), '.cursor', 'rules');
|
|
61
|
+
console.log('Installing to Cursor (.cursor/rules/)...');
|
|
62
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
63
|
+
|
|
64
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
65
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
66
|
+
|
|
67
|
+
for (let entry of entries) {
|
|
68
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
69
|
+
const srcFile = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
70
|
+
const destFile = path.join(destDir, `${entry.name}.md`);
|
|
71
|
+
if (fs.existsSync(srcFile)) {
|
|
72
|
+
fs.copyFileSync(srcFile, destFile);
|
|
73
|
+
console.log(`- Created Cursor rule: .cursor/rules/${entry.name}.md`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function installToClaude() {
|
|
80
|
+
const destDir = path.join(process.cwd(), '.claude', 'skills');
|
|
81
|
+
console.log('Installing to Claude Code (.claude/skills/)...');
|
|
82
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
83
|
+
|
|
84
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
85
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
86
|
+
|
|
87
|
+
for (let entry of entries) {
|
|
88
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
89
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
90
|
+
console.log(`- Created skill folder: .claude/skills/${entry.name}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Create a lightweight CLAUDE.md template if it does not already exist
|
|
95
|
+
const claudeMdPath = path.join(process.cwd(), 'CLAUDE.md');
|
|
96
|
+
if (!fs.existsSync(claudeMdPath)) {
|
|
97
|
+
const defaultClaudeMd = `# Project Rules
|
|
98
|
+
|
|
99
|
+
## Build, Test, and Lint Commands
|
|
100
|
+
# Add your project-specific commands here, e.g.:
|
|
101
|
+
# npm run dev
|
|
102
|
+
# npm run test
|
|
103
|
+
|
|
104
|
+
## Vector Cadence Skills
|
|
105
|
+
Skills are installed locally at \`.claude/skills/\` and are automatically available as slash commands (e.g. \`/vc-align\`, \`/vc-execute\`).
|
|
106
|
+
`;
|
|
107
|
+
fs.writeFileSync(claudeMdPath, defaultClaudeMd, 'utf8');
|
|
108
|
+
console.log('- Created starter CLAUDE.md at project root.');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function installToCodex() {
|
|
113
|
+
const destDir = path.join(process.cwd(), '.codex', 'skills');
|
|
114
|
+
console.log('Installing to Codex CLI (.codex/skills/)...');
|
|
115
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
116
|
+
|
|
117
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
118
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
119
|
+
|
|
120
|
+
for (let entry of entries) {
|
|
121
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
122
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
123
|
+
console.log(`- Created skill folder: .codex/skills/${entry.name}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function installToOpenCode() {
|
|
129
|
+
const destDir = path.join(process.cwd(), '.opencode', 'skills');
|
|
130
|
+
console.log('Installing to OpenCode (.opencode/skills/)...');
|
|
131
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
132
|
+
|
|
133
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
134
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
135
|
+
|
|
136
|
+
for (let entry of entries) {
|
|
137
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
138
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
139
|
+
console.log(`- Created skill folder: .opencode/skills/${entry.name}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function installToPi() {
|
|
145
|
+
const destDir = path.join(process.cwd(), '.pi', 'skills');
|
|
146
|
+
console.log('Installing to Pi (.pi/skills/)...');
|
|
147
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
148
|
+
|
|
149
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
150
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
151
|
+
|
|
152
|
+
for (let entry of entries) {
|
|
153
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
154
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
155
|
+
console.log(`- Created skill folder: .pi/skills/${entry.name}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function installToOmp() {
|
|
161
|
+
const destDir = path.join(process.cwd(), '.omp', 'skills');
|
|
162
|
+
console.log('Installing to Oh-My-Pi (.omp/skills/)...');
|
|
163
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
164
|
+
|
|
165
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
166
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
167
|
+
|
|
168
|
+
for (let entry of entries) {
|
|
169
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
170
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
171
|
+
console.log(`- Created skill folder: .omp/skills/${entry.name}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// CLI Execution Flow
|
|
177
|
+
const args = process.argv.slice(2);
|
|
178
|
+
const isAll = args.includes('--all');
|
|
179
|
+
const isCursor = args.includes('--cursor') || isAll;
|
|
180
|
+
const isClaude = args.includes('--claude') || args.includes('--claude-code') || isAll;
|
|
181
|
+
const isCodex = args.includes('--codex') || args.includes('--codex-cli') || isAll;
|
|
182
|
+
const isOpenCode = args.includes('--opencode') || isAll;
|
|
183
|
+
const isPi = args.includes('--pi') || isAll;
|
|
184
|
+
const isOmp = args.includes('--omp') || args.includes('--oh-my-pi') || isAll;
|
|
185
|
+
const isAntigravity = args.includes('--antigravity') || args.length === 0;
|
|
186
|
+
|
|
187
|
+
console.log('=== Vector Cadence Skills Installer ===\n');
|
|
188
|
+
|
|
189
|
+
try {
|
|
190
|
+
let executed = false;
|
|
191
|
+
|
|
192
|
+
if (isAntigravity) {
|
|
193
|
+
installToAntigravity();
|
|
194
|
+
executed = true;
|
|
195
|
+
}
|
|
196
|
+
if (isCursor) {
|
|
197
|
+
installToCursor();
|
|
198
|
+
executed = true;
|
|
199
|
+
}
|
|
200
|
+
if (isClaude) {
|
|
201
|
+
installToClaude();
|
|
202
|
+
executed = true;
|
|
203
|
+
}
|
|
204
|
+
if (isCodex) {
|
|
205
|
+
installToCodex();
|
|
206
|
+
executed = true;
|
|
207
|
+
}
|
|
208
|
+
if (isOpenCode) {
|
|
209
|
+
installToOpenCode();
|
|
210
|
+
executed = true;
|
|
211
|
+
}
|
|
212
|
+
if (isPi) {
|
|
213
|
+
installToPi();
|
|
214
|
+
executed = true;
|
|
215
|
+
}
|
|
216
|
+
if (isOmp) {
|
|
217
|
+
installToOmp();
|
|
218
|
+
executed = true;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (executed) {
|
|
222
|
+
console.log('\nInstallation completed successfully!');
|
|
223
|
+
} else {
|
|
224
|
+
console.log('No valid installation target specified.');
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Print helpful tip if default global run
|
|
228
|
+
if (args.length === 0) {
|
|
229
|
+
console.log('\n---');
|
|
230
|
+
console.log('Tip: You can also deploy the skills locally to other agent tools in this project folder:');
|
|
231
|
+
console.log(' npx vector-cadence-skills --cursor (Cursor rules)');
|
|
232
|
+
console.log(' npx vector-cadence-skills --claude (Claude Code CLI rules)');
|
|
233
|
+
console.log(' npx vector-cadence-skills --codex (Codex CLI skills)');
|
|
234
|
+
console.log(' npx vector-cadence-skills --opencode (OpenCode skills)');
|
|
235
|
+
console.log(' npx vector-cadence-skills --pi (Pi skills)');
|
|
236
|
+
console.log(' npx vector-cadence-skills --omp (Oh-My-Pi skills)');
|
|
237
|
+
console.log(' npx vector-cadence-skills --all (Install to all local project tools)');
|
|
238
|
+
}
|
|
239
|
+
} catch (error) {
|
|
240
|
+
console.error('\nInstallation failed:', error.message);
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
@@ -168,6 +168,14 @@ for (const file of skillFiles) {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
for (const file of fs.readdirSync(root, { recursive: true })) {
|
|
171
|
+
const filePathStr = file.toString().replaceAll("\\", "/");
|
|
172
|
+
if (
|
|
173
|
+
filePathStr.includes("node_modules") ||
|
|
174
|
+
filePathStr.includes(".git") ||
|
|
175
|
+
path.basename(filePathStr).startsWith("session-")
|
|
176
|
+
) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
171
179
|
const full = path.join(root, file.toString());
|
|
172
180
|
if (exists(full) && fs.statSync(full).isFile() && full.endsWith(".md")) {
|
|
173
181
|
checkLinks(full, read(full));
|