opengstack 0.13.5 ā 0.13.7
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 +1 -1
- package/scripts/install-skills.js +46 -37
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opengstack",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "AI Engineering Workflow - SKILL.md files that give AI agents structured roles for software development. Forked from gstack but scrubbed clean of all the YC/Garry Tan cruft and telemetry.",
|
|
6
6
|
"keywords": [
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const SKILLS_DIRS = [
|
|
7
|
+
path.join(process.env.HOME || process.env.USERPROFILE, '.claude', 'skills'),
|
|
8
|
+
path.join(process.env.HOME || process.env.USERPROFILE, '.config', 'opencode', 'skills')
|
|
9
|
+
];
|
|
7
10
|
const PKG_DIR = path.dirname(__dirname);
|
|
8
11
|
|
|
9
12
|
// List of skill directories
|
|
@@ -17,49 +20,55 @@ const skills = [
|
|
|
17
20
|
'setup-deploy', 'ship', 'unfreeze'
|
|
18
21
|
];
|
|
19
22
|
|
|
20
|
-
console.log('š Installing OpenGStack skills
|
|
23
|
+
console.log('š Installing OpenGStack skills...');
|
|
21
24
|
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
// Install to all skill directories
|
|
26
|
+
for (const SKILLS_DIR of SKILLS_DIRS) {
|
|
27
|
+
console.log(`\nš Installing to ${SKILLS_DIR}...`);
|
|
28
|
+
|
|
29
|
+
// Ensure skills directory exists
|
|
30
|
+
if (!fs.existsSync(SKILLS_DIR)) {
|
|
31
|
+
fs.mkdirSync(SKILLS_DIR, { recursive: true });
|
|
32
|
+
}
|
|
26
33
|
|
|
27
|
-
// Create symlinks for each skill
|
|
28
|
-
let installed = 0;
|
|
29
|
-
let skipped = 0;
|
|
34
|
+
// Create symlinks for each skill
|
|
35
|
+
let installed = 0;
|
|
36
|
+
let skipped = 0;
|
|
30
37
|
|
|
31
|
-
for (const skill of skills) {
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
for (const skill of skills) {
|
|
39
|
+
const srcPath = path.join(PKG_DIR, skill);
|
|
40
|
+
const destPath = path.join(SKILLS_DIR, skill);
|
|
34
41
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
if (!fs.existsSync(srcPath)) {
|
|
43
|
+
console.warn(`ā ļø Skill not found: ${skill}`);
|
|
44
|
+
skipped++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
40
47
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
try {
|
|
49
|
+
// Remove existing if it's a symlink
|
|
50
|
+
if (fs.existsSync(destPath)) {
|
|
51
|
+
const stat = fs.lstatSync(destPath);
|
|
52
|
+
if (stat.isSymbolicLink()) {
|
|
53
|
+
fs.unlinkSync(destPath);
|
|
54
|
+
} else {
|
|
55
|
+
console.log(`āļø Skipping ${skill} (already exists)`);
|
|
56
|
+
skipped++;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
51
59
|
}
|
|
52
|
-
}
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
// Create symlink
|
|
62
|
+
fs.symlinkSync(srcPath, destPath, 'dir');
|
|
63
|
+
console.log(`ā ${skill}`);
|
|
64
|
+
installed++;
|
|
65
|
+
} catch (err) {
|
|
66
|
+
console.error(`ā ${skill}: ${err.message}`);
|
|
67
|
+
skipped++;
|
|
68
|
+
}
|
|
61
69
|
}
|
|
70
|
+
|
|
71
|
+
console.log(`\nā
Installed ${installed} skills, skipped ${skipped}`);
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
console.log(
|
|
65
|
-
console.log('šÆ Skills are now available in opencode/Claude');
|
|
74
|
+
console.log('\nšÆ Skills are now available in opencode/Claude');
|