@hybridlabor-api/bdb-antigravity-skills 1.0.5 → 1.0.6

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.
Files changed (2) hide show
  1. package/installer.js +119 -0
  2. package/package.json +4 -3
package/installer.js ADDED
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const readline = require('readline');
6
+ const os = require('os');
7
+
8
+ console.log("=========================================================");
9
+ console.log(" Starting BDB Optimized Antigravity Skills Installation");
10
+ console.log("=========================================================");
11
+
12
+ const rl = readline.createInterface({
13
+ input: process.stdin,
14
+ output: process.stdout
15
+ });
16
+
17
+ const homeDir = os.homedir();
18
+ const currentDir = process.cwd();
19
+ const scriptDir = __dirname;
20
+
21
+ let srcDir = scriptDir;
22
+ if (!fs.existsSync(path.join(srcDir, 'skills')) && fs.existsSync(path.join(srcDir, '..', 'skills'))) {
23
+ srcDir = path.join(scriptDir, '..');
24
+ } else if (!fs.existsSync(path.join(srcDir, 'skills'))) {
25
+ console.error("Error: Cannot find skills payload directory.");
26
+ process.exit(1);
27
+ }
28
+
29
+ const geminiDir = path.join(homeDir, '.gemini');
30
+ const globalConfigDir = path.join(geminiDir, 'config', 'skills');
31
+ const globalLegacyDir = path.join(geminiDir, 'skills');
32
+ const workspaceDir = path.join(currentDir, '.agents', 'skills');
33
+
34
+ // Format timestamp like YYYYMMDD_HHMMSS
35
+ const now = new Date();
36
+ const timestamp = now.getFullYear().toString() +
37
+ (now.getMonth()+1).toString().padStart(2, '0') +
38
+ now.getDate().toString().padStart(2, '0') + "_" +
39
+ now.getHours().toString().padStart(2, '0') +
40
+ now.getMinutes().toString().padStart(2, '0') +
41
+ now.getSeconds().toString().padStart(2, '0');
42
+
43
+ const backupDir = path.join(geminiDir, `skills_backup_${timestamp}`);
44
+
45
+ console.log(`Creating backup of current skills in ${backupDir}...`);
46
+ fs.mkdirSync(backupDir, { recursive: true });
47
+
48
+ function moveIfExists(src, dest, label) {
49
+ if (fs.existsSync(src)) {
50
+ fs.renameSync(src, dest);
51
+ console.log(` -> Backed up ${label}.`);
52
+ }
53
+ }
54
+
55
+ moveIfExists(globalConfigDir, path.join(backupDir, 'config_skills_backup'), 'global config skills');
56
+ moveIfExists(globalLegacyDir, path.join(backupDir, 'legacy_skills_backup'), 'global legacy skills');
57
+ moveIfExists(workspaceDir, path.join(backupDir, 'workspace_skills_backup'), 'workspace skills');
58
+
59
+ console.log("\nInstalling optimized skills (140 curated skills)...");
60
+
61
+ fs.mkdirSync(globalConfigDir, { recursive: true });
62
+ fs.mkdirSync(globalLegacyDir, { recursive: true });
63
+ fs.mkdirSync(workspaceDir, { recursive: true });
64
+
65
+ function copyDirRecursiveSync(source, target) {
66
+ if (!fs.existsSync(source)) return;
67
+ if (!fs.existsSync(target)) fs.mkdirSync(target, { recursive: true });
68
+
69
+ const files = fs.readdirSync(source);
70
+ files.forEach(file => {
71
+ const curSource = path.join(source, file);
72
+ const curTarget = path.join(target, file);
73
+ if (fs.lstatSync(curSource).isDirectory()) {
74
+ copyDirRecursiveSync(curSource, curTarget);
75
+ } else {
76
+ fs.copyFileSync(curSource, curTarget);
77
+ }
78
+ });
79
+ }
80
+
81
+ copyDirRecursiveSync(path.join(srcDir, 'skills', 'global_config'), globalConfigDir);
82
+ console.log(" -> Installed global config skills.");
83
+
84
+ copyDirRecursiveSync(path.join(srcDir, 'skills', 'global_legacy'), globalLegacyDir);
85
+ console.log(" -> Installed global legacy skills.");
86
+
87
+ copyDirRecursiveSync(path.join(srcDir, 'skills', 'workspace_agents'), workspaceDir);
88
+ console.log(" -> Installed workspace skills.");
89
+
90
+ console.log("");
91
+ const geminiMdSrc = path.join(srcDir, 'GEMINI.md');
92
+ if (fs.existsSync(geminiMdSrc)) {
93
+ fs.copyFileSync(geminiMdSrc, path.join(geminiDir, 'GEMINI.md'));
94
+ console.log(` -> Installed GEMINI.md to ${path.join(geminiDir, 'GEMINI.md')}`);
95
+ }
96
+
97
+ console.log("");
98
+ rl.question("Do you also want to install the MCP Pack (Unreal, Rhino, Resolve, Grandma3, Resolume, Github, Chrome DevTools)? (y/n): ", function(answer) {
99
+ if (answer.toLowerCase().startsWith('y')) {
100
+ const configDir = path.join(geminiDir, 'config');
101
+ fs.mkdirSync(configDir, { recursive: true });
102
+
103
+ const mcpTarget = path.join(configDir, 'mcp_config.json');
104
+ if (fs.existsSync(mcpTarget)) {
105
+ fs.copyFileSync(mcpTarget, path.join(backupDir, 'mcp_config_backup.json'));
106
+ console.log(" -> Backed up existing mcp_config.json");
107
+ }
108
+ fs.copyFileSync(path.join(srcDir, 'mcp_config.json'), mcpTarget);
109
+ console.log(` -> Installed optimized mcp_config.json to ${configDir}`);
110
+ } else {
111
+ console.log(" -> Skipping MCP installation.");
112
+ }
113
+
114
+ console.log("=========================================================");
115
+ console.log(" Installation complete! The environment now has the ");
116
+ console.log(" optimized skill configuration.");
117
+ console.log("=========================================================");
118
+ rl.close();
119
+ });
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "@hybridlabor-api/bdb-antigravity-skills",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Optimized Antigravity skills and MCP pack for BDB DEV",
5
- "main": "installer.sh",
5
+ "main": "installer.js",
6
6
  "bin": {
7
- "bdb-skills": "./installer.sh"
7
+ "bdb-skills": "./installer.js"
8
8
  },
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
12
  "files": [
13
13
  "installer.sh",
14
+ "installer.js",
14
15
  "mcp_config.json",
15
16
  "GEMINI.md",
16
17
  "skilloverview.html",