gsd-antigravity-kit 1.32.1 → 2.0.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/.agent/skills/gsd/migration_report.md +1 -1
- package/README.md +2 -1
- package/bin/install.js +116 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://opensource.org/licenses/MIT)
|
|
4
4
|
[](https://github.com/google-deepmind/antigravity)
|
|
5
5
|
[](https://www.npmjs.com/package/gsd-antigravity-kit)
|
|
6
|
-
[](https://github.com/dturkuler/GSD-Antigravity/releases/latest)
|
|
7
7
|
[](https://github.com/glittercowboy/get-shit-done)
|
|
8
8
|
|
|
9
9
|
**GSD-Antigravity Kit** is the official bootstrapping and management utility for the [Get Shit Done (GSD)](https://github.com/glittercowboy/get-shit-done) protocol within the Antigravity AI framework. It serves as a high-performance **Installer** and **Skill Manager** that provision, optimizes, and maintains GSD skills in your AG environment.
|
|
@@ -104,3 +104,4 @@ The core logic, philosophy, and original script engine were created by **[glitte
|
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
|
|
107
|
+
|
package/bin/install.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const readline = require('readline');
|
|
6
|
+
const { execSync } = require('child_process');
|
|
7
|
+
|
|
8
|
+
const rl = readline.createInterface({
|
|
9
|
+
input: process.stdin,
|
|
10
|
+
output: process.stdout
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const ask = (query) => new Promise((resolve) => rl.question(query, (ans) => resolve(ans.toLowerCase().trim())));
|
|
14
|
+
|
|
15
|
+
async function install() {
|
|
16
|
+
const targetDir = process.cwd();
|
|
17
|
+
const sourceAgentDir = path.join(__dirname, '..', '.agent');
|
|
18
|
+
const skillsSourceDir = path.join(sourceAgentDir, 'skills');
|
|
19
|
+
|
|
20
|
+
// Skills to check/install
|
|
21
|
+
const skillNames = ['gsd', 'gsd-converter'];
|
|
22
|
+
const targetSkillsDir = path.join(targetDir, '.agent', 'skills');
|
|
23
|
+
|
|
24
|
+
console.log('\n🌌 GSD-Antigravity Skill System Installer\n');
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
// 1. Check for existing skills
|
|
28
|
+
const existing = [];
|
|
29
|
+
for (const name of skillNames) {
|
|
30
|
+
if (fs.existsSync(path.join(targetSkillsDir, name))) {
|
|
31
|
+
existing.push(name);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (existing.length > 0) {
|
|
36
|
+
console.log(`⚠️ Detected existing skills in .agent/skills/: ${existing.join(', ')}`);
|
|
37
|
+
const confirmRemove = await ask(`Do you want to REMOVE existing skills and perform a fresh install? (y/n): `);
|
|
38
|
+
if (confirmRemove === 'y') {
|
|
39
|
+
for (const name of existing) {
|
|
40
|
+
const p = path.join(targetSkillsDir, name);
|
|
41
|
+
console.log(` 🗑️ Removing ${name}...`);
|
|
42
|
+
fs.rmSync(p, { recursive: true, force: true });
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
console.log(' ⏩ Skipping removal. New files will be merged/overwritten.');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// 2. Interactive Installation Selection
|
|
50
|
+
const installGsd = await ask(`Install GSD skill? (y/n) [default: y]: `);
|
|
51
|
+
const installConverter = await ask(`Install GSD-Converter skill? (y/n) [default: y]: `);
|
|
52
|
+
|
|
53
|
+
const selection = {
|
|
54
|
+
'gsd': installGsd !== 'n',
|
|
55
|
+
'gsd-converter': installConverter !== 'n'
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// 3. Perform Installation
|
|
59
|
+
if (!fs.existsSync(targetSkillsDir)) {
|
|
60
|
+
fs.mkdirSync(targetSkillsDir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Also copy rules if they exist
|
|
64
|
+
const sourceRulesDir = path.join(sourceAgentDir, 'rules');
|
|
65
|
+
const targetRulesDir = path.join(targetDir, '.agent', 'rules');
|
|
66
|
+
if (fs.existsSync(sourceRulesDir)) {
|
|
67
|
+
copyFolderSync(sourceRulesDir, targetRulesDir);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let installedCount = 0;
|
|
71
|
+
for (const [name, shouldInstall] of Object.entries(selection)) {
|
|
72
|
+
if (shouldInstall) {
|
|
73
|
+
const src = path.join(skillsSourceDir, name);
|
|
74
|
+
const tgt = path.join(targetSkillsDir, name);
|
|
75
|
+
if (fs.existsSync(src)) {
|
|
76
|
+
console.log(`📦 Installing ${name}...`);
|
|
77
|
+
copyFolderSync(src, tgt);
|
|
78
|
+
installedCount++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (installedCount > 0) {
|
|
84
|
+
console.log('\n✅ Installation completed successfully.');
|
|
85
|
+
if (selection['gsd-converter']) {
|
|
86
|
+
console.log('\n✨ To initialize the GSD engine, run:');
|
|
87
|
+
console.log(' py .agent/skills/gsd-converter/scripts/convert.py gsd\n');
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
console.log('\nℹ️ No skills were selected for installation.');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
} catch (err) {
|
|
94
|
+
console.error('\n❌ Installation failed:', err.message);
|
|
95
|
+
} finally {
|
|
96
|
+
rl.close();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function copyFolderSync(from, to) {
|
|
101
|
+
if (!fs.existsSync(to)) {
|
|
102
|
+
fs.mkdirSync(to, { recursive: true });
|
|
103
|
+
}
|
|
104
|
+
fs.readdirSync(from).forEach(element => {
|
|
105
|
+
const srcPath = path.join(from, element);
|
|
106
|
+
const tgtPath = path.join(to, element);
|
|
107
|
+
const stat = fs.lstatSync(srcPath);
|
|
108
|
+
if (stat.isFile()) {
|
|
109
|
+
fs.copyFileSync(srcPath, tgtPath);
|
|
110
|
+
} else if (stat.isDirectory()) {
|
|
111
|
+
copyFolderSync(srcPath, tgtPath);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
install();
|