vector-cadence-skills 0.1.0 → 0.1.3
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/package.json +5 -1
- package/plugin.json +15 -0
- package/scripts/bin.js +233 -0
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vector-cadence-skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
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
|
+
}
|
package/scripts/bin.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
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 destFile = path.join(process.cwd(), 'CLAUDE.md');
|
|
81
|
+
console.log('Installing to Claude Code (CLAUDE.md)...');
|
|
82
|
+
let combinedContent = '# Vector Cadence Skills\n\n';
|
|
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
|
+
const srcFile = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
90
|
+
if (fs.existsSync(srcFile)) {
|
|
91
|
+
const fileContent = fs.readFileSync(srcFile, 'utf8');
|
|
92
|
+
// Strip frontmatter metadata
|
|
93
|
+
const cleanContent = fileContent.replace(/^---[\s\S]*?---/, '').trim();
|
|
94
|
+
combinedContent += `## ${entry.name}\n\n${cleanContent}\n\n---\n\n`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fs.writeFileSync(destFile, combinedContent, 'utf8');
|
|
100
|
+
console.log('- Created CLAUDE.md rule file at project root.');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function installToCodex() {
|
|
104
|
+
const destDir = path.join(process.cwd(), '.codex', 'skills');
|
|
105
|
+
console.log('Installing to Codex CLI (.codex/skills/)...');
|
|
106
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
107
|
+
|
|
108
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
109
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
110
|
+
|
|
111
|
+
for (let entry of entries) {
|
|
112
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
113
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
114
|
+
console.log(`- Created skill folder: .codex/skills/${entry.name}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function installToOpenCode() {
|
|
120
|
+
const destDir = path.join(process.cwd(), '.opencode', 'skills');
|
|
121
|
+
console.log('Installing to OpenCode (.opencode/skills/)...');
|
|
122
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
123
|
+
|
|
124
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
125
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
126
|
+
|
|
127
|
+
for (let entry of entries) {
|
|
128
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
129
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
130
|
+
console.log(`- Created skill folder: .opencode/skills/${entry.name}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function installToPi() {
|
|
136
|
+
const destDir = path.join(process.cwd(), '.pi', 'skills');
|
|
137
|
+
console.log('Installing to Pi (.pi/skills/)...');
|
|
138
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
139
|
+
|
|
140
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
141
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
142
|
+
|
|
143
|
+
for (let entry of entries) {
|
|
144
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
145
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
146
|
+
console.log(`- Created skill folder: .pi/skills/${entry.name}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function installToOmp() {
|
|
152
|
+
const destDir = path.join(process.cwd(), '.omp', 'skills');
|
|
153
|
+
console.log('Installing to Oh-My-Pi (.omp/skills/)...');
|
|
154
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
155
|
+
|
|
156
|
+
const skillsDir = path.join(packageRootDir, 'skills');
|
|
157
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
158
|
+
|
|
159
|
+
for (let entry of entries) {
|
|
160
|
+
if (entry.isDirectory() && entry.name.startsWith('vc-')) {
|
|
161
|
+
copyDir(path.join(skillsDir, entry.name), path.join(destDir, entry.name));
|
|
162
|
+
console.log(`- Created skill folder: .omp/skills/${entry.name}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// CLI Execution Flow
|
|
168
|
+
const args = process.argv.slice(2);
|
|
169
|
+
const isAll = args.includes('--all');
|
|
170
|
+
const isCursor = args.includes('--cursor') || isAll;
|
|
171
|
+
const isClaude = args.includes('--claude') || args.includes('--claude-code') || isAll;
|
|
172
|
+
const isCodex = args.includes('--codex') || args.includes('--codex-cli') || isAll;
|
|
173
|
+
const isOpenCode = args.includes('--opencode') || isAll;
|
|
174
|
+
const isPi = args.includes('--pi') || isAll;
|
|
175
|
+
const isOmp = args.includes('--omp') || args.includes('--oh-my-pi') || isAll;
|
|
176
|
+
const isAntigravity = args.includes('--antigravity') || args.length === 0;
|
|
177
|
+
|
|
178
|
+
console.log('=== Vector Cadence Skills Installer ===\n');
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
let executed = false;
|
|
182
|
+
|
|
183
|
+
if (isAntigravity) {
|
|
184
|
+
installToAntigravity();
|
|
185
|
+
executed = true;
|
|
186
|
+
}
|
|
187
|
+
if (isCursor) {
|
|
188
|
+
installToCursor();
|
|
189
|
+
executed = true;
|
|
190
|
+
}
|
|
191
|
+
if (isClaude) {
|
|
192
|
+
installToClaude();
|
|
193
|
+
executed = true;
|
|
194
|
+
}
|
|
195
|
+
if (isCodex) {
|
|
196
|
+
installToCodex();
|
|
197
|
+
executed = true;
|
|
198
|
+
}
|
|
199
|
+
if (isOpenCode) {
|
|
200
|
+
installToOpenCode();
|
|
201
|
+
executed = true;
|
|
202
|
+
}
|
|
203
|
+
if (isPi) {
|
|
204
|
+
installToPi();
|
|
205
|
+
executed = true;
|
|
206
|
+
}
|
|
207
|
+
if (isOmp) {
|
|
208
|
+
installToOmp();
|
|
209
|
+
executed = true;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (executed) {
|
|
213
|
+
console.log('\nInstallation completed successfully!');
|
|
214
|
+
} else {
|
|
215
|
+
console.log('No valid installation target specified.');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Print helpful tip if default global run
|
|
219
|
+
if (args.length === 0) {
|
|
220
|
+
console.log('\n---');
|
|
221
|
+
console.log('Tip: You can also deploy the skills locally to other agent tools in this project folder:');
|
|
222
|
+
console.log(' npx vector-cadence-skills --cursor (Cursor rules)');
|
|
223
|
+
console.log(' npx vector-cadence-skills --claude (Claude Code CLI rules)');
|
|
224
|
+
console.log(' npx vector-cadence-skills --codex (Codex CLI skills)');
|
|
225
|
+
console.log(' npx vector-cadence-skills --opencode (OpenCode skills)');
|
|
226
|
+
console.log(' npx vector-cadence-skills --pi (Pi skills)');
|
|
227
|
+
console.log(' npx vector-cadence-skills --omp (Oh-My-Pi skills)');
|
|
228
|
+
console.log(' npx vector-cadence-skills --all (Install to all local project tools)');
|
|
229
|
+
}
|
|
230
|
+
} catch (error) {
|
|
231
|
+
console.error('\nInstallation failed:', error.message);
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|