cli-ai-skills 1.8.0 → 1.10.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/bin/cli.js +44 -12
- package/lib/adal.js +73 -0
- package/lib/antigravity.js +77 -0
- package/lib/cursor.js +73 -0
- package/lib/detector.js +65 -2
- package/lib/interactive.js +25 -1
- package/lib/ui/table.js +6 -4
- package/lib/utils/path-resolver.js +9 -3
- package/lib/version-checker.js +12 -6
- package/package.json +1 -1
- package/skills/antigravity/agent-skill-discovery/README.md +288 -0
- package/skills/antigravity/agent-skill-discovery/SKILL.md +910 -0
- package/skills/antigravity/agent-skill-orchestrator/README.md +385 -0
- package/skills/antigravity/agent-skill-orchestrator/SKILL.md +1398 -0
- package/skills/antigravity/audio-transcriber/CHANGELOG.md +164 -0
- package/skills/antigravity/audio-transcriber/README.md +340 -0
- package/skills/antigravity/audio-transcriber/SKILL.md +558 -0
- package/skills/antigravity/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/antigravity/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/antigravity/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/antigravity/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/antigravity/prompt-engineer/README.md +659 -0
- package/skills/antigravity/prompt-engineer/SKILL.md +252 -0
- package/skills/antigravity/skill-creator/README.md +270 -0
- package/skills/antigravity/skill-creator/SKILL.md +473 -0
- package/skills/antigravity/youtube-summarizer/CHANGELOG.md +61 -0
- package/skills/antigravity/youtube-summarizer/README.md +365 -0
- package/skills/antigravity/youtube-summarizer/SKILL.md +411 -0
- package/skills/antigravity/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/antigravity/youtube-summarizer/scripts/install-dependencies.sh +28 -0
- package/skills/claude/agent-skill-discovery/README.md +33 -11
- package/skills/claude/agent-skill-discovery/SKILL.md +104 -18
- package/skills/claude/audio-transcriber/CHANGELOG.md +0 -5
- package/skills/claude/youtube-summarizer/CHANGELOG.md +0 -5
- package/skills/codex/agent-skill-discovery/README.md +33 -11
- package/skills/codex/agent-skill-discovery/SKILL.md +104 -18
- package/skills/codex/audio-transcriber/CHANGELOG.md +0 -5
- package/skills/codex/youtube-summarizer/CHANGELOG.md +0 -5
- package/skills/copilot/agent-skill-discovery/README.md +33 -11
- package/skills/copilot/agent-skill-discovery/SKILL.md +104 -18
- package/skills/copilot/audio-transcriber/CHANGELOG.md +0 -5
- package/skills/copilot/youtube-summarizer/CHANGELOG.md +0 -5
- package/skills/gemini/agent-skill-discovery/README.md +33 -11
- package/skills/gemini/agent-skill-discovery/SKILL.md +104 -18
- package/skills/gemini/audio-transcriber/CHANGELOG.md +0 -5
- package/skills/gemini/youtube-summarizer/CHANGELOG.md +0 -5
- package/skills/opencode/agent-skill-discovery/README.md +33 -11
- package/skills/opencode/agent-skill-discovery/SKILL.md +104 -18
- package/skills/opencode/audio-transcriber/CHANGELOG.md +0 -5
- package/skills/opencode/youtube-summarizer/CHANGELOG.md +0 -5
package/bin/cli.js
CHANGED
|
@@ -8,6 +8,9 @@ const { installClaudeSkills } = require('../lib/claude');
|
|
|
8
8
|
const { install: installCodexSkills } = require('../lib/codex');
|
|
9
9
|
const { install: installOpenCodeSkills } = require('../lib/opencode');
|
|
10
10
|
const { install: installGeminiSkills } = require('../lib/gemini');
|
|
11
|
+
const { install: installAntigravitySkills } = require('../lib/antigravity');
|
|
12
|
+
const { install: installCursorSkills } = require('../lib/cursor');
|
|
13
|
+
const { install: installAdalSkills } = require('../lib/adal');
|
|
11
14
|
const { listBundles, validateBundle } = require('../lib/bundles');
|
|
12
15
|
const { searchSkills } = require('../lib/search');
|
|
13
16
|
const { displayToolsTable } = require('../lib/ui/table');
|
|
@@ -94,16 +97,17 @@ async function main() {
|
|
|
94
97
|
|
|
95
98
|
// Display tools table
|
|
96
99
|
displayToolsTable(detected);
|
|
97
|
-
|
|
98
|
-
const hasAny = detected.copilot.installed || detected.claude.installed ||
|
|
99
|
-
detected.codex_cli.installed || detected.codex_app.installed || detected.opencode.installed ||
|
|
100
|
-
detected.gemini.installed
|
|
101
|
-
|
|
100
|
+
|
|
101
|
+
const hasAny = detected.copilot.installed || detected.claude.installed ||
|
|
102
|
+
detected.codex_cli.installed || detected.codex_app.installed || detected.opencode.installed ||
|
|
103
|
+
detected.gemini.installed || detected.antigravity.installed ||
|
|
104
|
+
detected.cursor.installed || detected.adal.installed;
|
|
105
|
+
|
|
102
106
|
if (!hasAny) {
|
|
103
107
|
console.log(getInstallInstructions());
|
|
104
108
|
process.exit(1);
|
|
105
109
|
}
|
|
106
|
-
|
|
110
|
+
|
|
107
111
|
// Check for --yes flag (skip prompts)
|
|
108
112
|
const skipPrompt = args.includes('-y') || args.includes('--yes');
|
|
109
113
|
|
|
@@ -115,6 +119,9 @@ async function main() {
|
|
|
115
119
|
if (detected.codex_cli.installed) platforms.push('codex_cli');
|
|
116
120
|
if (detected.opencode.installed) platforms.push('opencode');
|
|
117
121
|
if (detected.gemini.installed) platforms.push('gemini');
|
|
122
|
+
if (detected.antigravity.installed) platforms.push('antigravity');
|
|
123
|
+
if (detected.cursor.installed) platforms.push('cursor');
|
|
124
|
+
if (detected.adal.installed) platforms.push('adal');
|
|
118
125
|
} else {
|
|
119
126
|
platforms = await promptPlatforms(detected);
|
|
120
127
|
}
|
|
@@ -149,6 +156,15 @@ async function main() {
|
|
|
149
156
|
if (platforms.includes('gemini')) {
|
|
150
157
|
installGeminiSkills(repoPath, [skill], quiet);
|
|
151
158
|
}
|
|
159
|
+
if (platforms.includes('antigravity')) {
|
|
160
|
+
installAntigravitySkills(repoPath, [skill], quiet);
|
|
161
|
+
}
|
|
162
|
+
if (platforms.includes('cursor')) {
|
|
163
|
+
installCursorSkills(repoPath, [skill], quiet);
|
|
164
|
+
}
|
|
165
|
+
if (platforms.includes('adal')) {
|
|
166
|
+
installAdalSkills(repoPath, [skill], quiet);
|
|
167
|
+
}
|
|
152
168
|
});
|
|
153
169
|
|
|
154
170
|
if (!quiet) {
|
|
@@ -165,11 +181,12 @@ async function main() {
|
|
|
165
181
|
|
|
166
182
|
// Display tools table
|
|
167
183
|
displayToolsTable(detected);
|
|
168
|
-
|
|
169
|
-
const hasAny = detected.copilot.installed || detected.claude.installed ||
|
|
170
|
-
detected.codex_cli.installed || detected.codex_app.installed || detected.opencode.installed ||
|
|
171
|
-
detected.gemini.installed
|
|
172
|
-
|
|
184
|
+
|
|
185
|
+
const hasAny = detected.copilot.installed || detected.claude.installed ||
|
|
186
|
+
detected.codex_cli.installed || detected.codex_app.installed || detected.opencode.installed ||
|
|
187
|
+
detected.gemini.installed || detected.antigravity.installed ||
|
|
188
|
+
detected.cursor.installed || detected.adal.installed;
|
|
189
|
+
|
|
173
190
|
if (!hasAny) {
|
|
174
191
|
console.log(getInstallInstructions());
|
|
175
192
|
process.exit(1);
|
|
@@ -231,6 +248,9 @@ async function main() {
|
|
|
231
248
|
if (detected.codex_app.installed) platforms.push('codex_app');
|
|
232
249
|
if (detected.opencode.installed) platforms.push('opencode');
|
|
233
250
|
if (detected.gemini.installed) platforms.push('gemini');
|
|
251
|
+
if (detected.antigravity.installed) platforms.push('antigravity');
|
|
252
|
+
if (detected.cursor.installed) platforms.push('cursor');
|
|
253
|
+
if (detected.adal.installed) platforms.push('adal');
|
|
234
254
|
} else {
|
|
235
255
|
// Interactive selection
|
|
236
256
|
platforms = await promptPlatforms(detected);
|
|
@@ -271,7 +291,19 @@ async function main() {
|
|
|
271
291
|
if (platforms.includes('gemini')) {
|
|
272
292
|
installGeminiSkills(repoPath, null, quiet);
|
|
273
293
|
}
|
|
274
|
-
|
|
294
|
+
|
|
295
|
+
if (platforms.includes('antigravity')) {
|
|
296
|
+
installAntigravitySkills(repoPath, null, quiet);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (platforms.includes('cursor')) {
|
|
300
|
+
installCursorSkills(repoPath, null, quiet);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (platforms.includes('adal')) {
|
|
304
|
+
installAdalSkills(repoPath, null, quiet);
|
|
305
|
+
}
|
|
306
|
+
|
|
275
307
|
if (!quiet) {
|
|
276
308
|
console.log(chalk.green(`\n✅ Instalação concluída com sucesso!\n`));
|
|
277
309
|
}
|
package/lib/adal.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Install skills for AdaL CLI
|
|
9
|
+
* @param {string} repoPath - Path to the cli-ai-skills repository
|
|
10
|
+
* @param {Array<string>|null} skills - Skills to install (null = all)
|
|
11
|
+
* @param {boolean} quiet - Suppress output
|
|
12
|
+
*/
|
|
13
|
+
function install(repoPath, skills = null, quiet = false) {
|
|
14
|
+
const targetDir = getUserSkillsPath('adal');
|
|
15
|
+
|
|
16
|
+
// Criar diretório se não existir
|
|
17
|
+
fs.ensureDirSync(targetDir);
|
|
18
|
+
|
|
19
|
+
const sourceDir = getSkillsSourcePath(repoPath, 'adal');
|
|
20
|
+
|
|
21
|
+
if (!fs.existsSync(sourceDir)) {
|
|
22
|
+
if (!quiet) {
|
|
23
|
+
console.log(chalk.red('❌ Diretório .adal/skills não encontrado no repositório'));
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Listar skills disponíveis
|
|
29
|
+
const availableSkills = fs.readdirSync(sourceDir).filter(f => {
|
|
30
|
+
const fullPath = path.join(sourceDir, f);
|
|
31
|
+
return fs.statSync(fullPath).isDirectory() && f !== 'node_modules';
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const skillsToInstall = skills || availableSkills;
|
|
35
|
+
|
|
36
|
+
let installed = 0;
|
|
37
|
+
let failed = 0;
|
|
38
|
+
|
|
39
|
+
skillsToInstall.forEach(skill => {
|
|
40
|
+
const sourcePath = path.join(sourceDir, skill);
|
|
41
|
+
const targetPath = path.join(targetDir, skill);
|
|
42
|
+
|
|
43
|
+
if (!fs.existsSync(sourcePath)) {
|
|
44
|
+
if (!quiet) {
|
|
45
|
+
console.log(chalk.yellow(`⚠️ Skill não encontrada: ${skill}`));
|
|
46
|
+
}
|
|
47
|
+
failed++;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Criar symlink
|
|
52
|
+
try {
|
|
53
|
+
if (fs.existsSync(targetPath)) {
|
|
54
|
+
fs.removeSync(targetPath);
|
|
55
|
+
}
|
|
56
|
+
fs.symlinkSync(sourcePath, targetPath);
|
|
57
|
+
|
|
58
|
+
if (!quiet) {
|
|
59
|
+
console.log(chalk.green(` ✓ AdaL: ${skill}`));
|
|
60
|
+
}
|
|
61
|
+
installed++;
|
|
62
|
+
} catch (err) {
|
|
63
|
+
if (!quiet) {
|
|
64
|
+
console.log(chalk.red(` ✗ Erro ao instalar ${skill}: ${err.message}`));
|
|
65
|
+
}
|
|
66
|
+
failed++;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return { installed, failed };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = { install };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const os = require('os');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Install skills for Google Antigravity
|
|
9
|
+
* @param {string} repoPath - Path to the cli-ai-skills repository
|
|
10
|
+
* @param {Array<string>|null} skills - Skills to install (null = all)
|
|
11
|
+
* @param {boolean} quiet - Suppress output
|
|
12
|
+
*/
|
|
13
|
+
function install(repoPath, skills = null, quiet = false) {
|
|
14
|
+
const targetDir = getUserSkillsPath('antigravity');
|
|
15
|
+
|
|
16
|
+
// Create directory if it doesn't exist
|
|
17
|
+
if (!fs.existsSync(targetDir)) {
|
|
18
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const sourceDir = getSkillsSourcePath(repoPath, 'antigravity');
|
|
22
|
+
|
|
23
|
+
if (!fs.existsSync(sourceDir)) {
|
|
24
|
+
if (!quiet) {
|
|
25
|
+
console.log(chalk.red('❌ Diretório .antigravity/skills não encontrado no repositório'));
|
|
26
|
+
}
|
|
27
|
+
return { installed: 0, failed: 0 };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// List available skills
|
|
31
|
+
const availableSkills = fs.readdirSync(sourceDir).filter(f => {
|
|
32
|
+
const fullPath = path.join(sourceDir, f);
|
|
33
|
+
return fs.statSync(fullPath).isDirectory() && f !== 'node_modules';
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const skillsToInstall = skills || availableSkills;
|
|
37
|
+
|
|
38
|
+
let installed = 0;
|
|
39
|
+
let failed = 0;
|
|
40
|
+
|
|
41
|
+
skillsToInstall.forEach(skill => {
|
|
42
|
+
const sourcePath = path.join(sourceDir, skill);
|
|
43
|
+
const targetPath = path.join(targetDir, skill);
|
|
44
|
+
|
|
45
|
+
if (!fs.existsSync(sourcePath)) {
|
|
46
|
+
if (!quiet) {
|
|
47
|
+
console.log(chalk.yellow(`⚠️ Skill não encontrada: ${skill}`));
|
|
48
|
+
}
|
|
49
|
+
failed++;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Create symlink (use absolute path to avoid broken symlinks)
|
|
54
|
+
try {
|
|
55
|
+
if (fs.existsSync(targetPath)) {
|
|
56
|
+
fs.rmSync(targetPath, { recursive: true, force: true });
|
|
57
|
+
}
|
|
58
|
+
// Use absolute path for symlink target
|
|
59
|
+
const absoluteSourcePath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(sourcePath);
|
|
60
|
+
fs.symlinkSync(absoluteSourcePath, targetPath);
|
|
61
|
+
|
|
62
|
+
if (!quiet) {
|
|
63
|
+
console.log(chalk.green(` ✓ Antigravity: ${skill}`));
|
|
64
|
+
}
|
|
65
|
+
installed++;
|
|
66
|
+
} catch (err) {
|
|
67
|
+
if (!quiet) {
|
|
68
|
+
console.log(chalk.red(` ✗ Erro ao instalar ${skill}: ${err.message}`));
|
|
69
|
+
}
|
|
70
|
+
failed++;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return { installed, failed };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
module.exports = { install };
|
package/lib/cursor.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Install skills for Cursor IDE
|
|
9
|
+
* @param {string} repoPath - Path to the cli-ai-skills repository
|
|
10
|
+
* @param {Array<string>|null} skills - Skills to install (null = all)
|
|
11
|
+
* @param {boolean} quiet - Suppress output
|
|
12
|
+
*/
|
|
13
|
+
function install(repoPath, skills = null, quiet = false) {
|
|
14
|
+
const targetDir = getUserSkillsPath('cursor');
|
|
15
|
+
|
|
16
|
+
// Criar diretório se não existir
|
|
17
|
+
fs.ensureDirSync(targetDir);
|
|
18
|
+
|
|
19
|
+
const sourceDir = getSkillsSourcePath(repoPath, 'cursor');
|
|
20
|
+
|
|
21
|
+
if (!fs.existsSync(sourceDir)) {
|
|
22
|
+
if (!quiet) {
|
|
23
|
+
console.log(chalk.red('❌ Diretório .cursor/skills não encontrado no repositório'));
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Listar skills disponíveis
|
|
29
|
+
const availableSkills = fs.readdirSync(sourceDir).filter(f => {
|
|
30
|
+
const fullPath = path.join(sourceDir, f);
|
|
31
|
+
return fs.statSync(fullPath).isDirectory() && f !== 'node_modules';
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const skillsToInstall = skills || availableSkills;
|
|
35
|
+
|
|
36
|
+
let installed = 0;
|
|
37
|
+
let failed = 0;
|
|
38
|
+
|
|
39
|
+
skillsToInstall.forEach(skill => {
|
|
40
|
+
const sourcePath = path.join(sourceDir, skill);
|
|
41
|
+
const targetPath = path.join(targetDir, skill);
|
|
42
|
+
|
|
43
|
+
if (!fs.existsSync(sourcePath)) {
|
|
44
|
+
if (!quiet) {
|
|
45
|
+
console.log(chalk.yellow(`⚠️ Skill não encontrada: ${skill}`));
|
|
46
|
+
}
|
|
47
|
+
failed++;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Criar symlink
|
|
52
|
+
try {
|
|
53
|
+
if (fs.existsSync(targetPath)) {
|
|
54
|
+
fs.removeSync(targetPath);
|
|
55
|
+
}
|
|
56
|
+
fs.symlinkSync(sourcePath, targetPath);
|
|
57
|
+
|
|
58
|
+
if (!quiet) {
|
|
59
|
+
console.log(chalk.green(` ✓ Cursor: ${skill}`));
|
|
60
|
+
}
|
|
61
|
+
installed++;
|
|
62
|
+
} catch (err) {
|
|
63
|
+
if (!quiet) {
|
|
64
|
+
console.log(chalk.red(` ✗ Erro ao instalar ${skill}: ${err.message}`));
|
|
65
|
+
}
|
|
66
|
+
failed++;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return { installed, failed };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = { install };
|
package/lib/detector.js
CHANGED
|
@@ -14,7 +14,10 @@ function detectTools() {
|
|
|
14
14
|
codex_cli: detectCodexCli(),
|
|
15
15
|
codex_app: detectCodexApp(),
|
|
16
16
|
opencode: detectOpenCode(),
|
|
17
|
-
gemini: detectGemini()
|
|
17
|
+
gemini: detectGemini(),
|
|
18
|
+
antigravity: detectAntigravity(),
|
|
19
|
+
cursor: detectCursor(),
|
|
20
|
+
adal: detectAdal()
|
|
18
21
|
};
|
|
19
22
|
|
|
20
23
|
return tools;
|
|
@@ -153,6 +156,63 @@ function detectGemini() {
|
|
|
153
156
|
}
|
|
154
157
|
}
|
|
155
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Detect Google Antigravity installation
|
|
161
|
+
*/
|
|
162
|
+
function detectAntigravity() {
|
|
163
|
+
try {
|
|
164
|
+
const version = execSync('antigravity --version', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
165
|
+
const pathExec = execSync('which antigravity', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
166
|
+
return { installed: true, version, path: pathExec };
|
|
167
|
+
} catch {
|
|
168
|
+
return { installed: false, version: null, path: null };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Detect Cursor IDE
|
|
174
|
+
*/
|
|
175
|
+
function detectCursor() {
|
|
176
|
+
// Check macOS Application
|
|
177
|
+
if (os.platform() === 'darwin') {
|
|
178
|
+
const appPath = '/Applications/Cursor.app';
|
|
179
|
+
if (fs.existsSync(appPath)) {
|
|
180
|
+
return { installed: true, version: 'Cursor IDE', path: appPath };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Check for 'cursor' command
|
|
185
|
+
try {
|
|
186
|
+
const pathExec = execSync('which cursor', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
187
|
+
return { installed: true, version: 'Cursor CLI', path: pathExec };
|
|
188
|
+
} catch {
|
|
189
|
+
// Check for ~/.cursor directory
|
|
190
|
+
const homeDir = os.homedir();
|
|
191
|
+
if (fs.existsSync(path.join(homeDir, '.cursor'))) {
|
|
192
|
+
return { installed: true, version: 'Unknown', path: path.join(homeDir, '.cursor') };
|
|
193
|
+
}
|
|
194
|
+
return { installed: false, version: null, path: null };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Detect AdaL CLI
|
|
200
|
+
*/
|
|
201
|
+
function detectAdal() {
|
|
202
|
+
try {
|
|
203
|
+
const version = execSync('adal --version', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
204
|
+
const pathExec = execSync('which adal', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
205
|
+
return { installed: true, version, path: pathExec };
|
|
206
|
+
} catch {
|
|
207
|
+
// Check for ~/.adal directory
|
|
208
|
+
const homeDir = os.homedir();
|
|
209
|
+
if (fs.existsSync(path.join(homeDir, '.adal'))) {
|
|
210
|
+
return { installed: true, version: 'Unknown', path: path.join(homeDir, '.adal') };
|
|
211
|
+
}
|
|
212
|
+
return { installed: false, version: null, path: null };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
156
216
|
/**
|
|
157
217
|
* Retorna mensagem de ajuda para ferramentas não instaladas
|
|
158
218
|
*/
|
|
@@ -179,9 +239,12 @@ Instale ao menos uma das seguintes ferramentas:
|
|
|
179
239
|
📦 Gemini CLI:
|
|
180
240
|
npm install -g @google/gemini-cli
|
|
181
241
|
|
|
242
|
+
📦 Google Antigravity:
|
|
243
|
+
https://antigravity.google/download
|
|
244
|
+
|
|
182
245
|
Após instalar, execute novamente: npx cli-ai-skills
|
|
183
246
|
`;
|
|
184
247
|
}
|
|
185
248
|
|
|
186
|
-
module.exports = { detectTools, getInstallInstructions, detectCodex, detectCodexCli, detectCodexApp };
|
|
249
|
+
module.exports = { detectTools, getInstallInstructions, detectCodex, detectCodexCli, detectCodexApp, detectAntigravity, detectCursor, detectAdal };
|
|
187
250
|
|
package/lib/interactive.js
CHANGED
|
@@ -93,7 +93,7 @@ async function promptPlatforms(detected) {
|
|
|
93
93
|
|
|
94
94
|
if (detected.opencode && detected.opencode.installed) {
|
|
95
95
|
choices.push({
|
|
96
|
-
name: '✅ OpenCode (~/.
|
|
96
|
+
name: '✅ OpenCode (~/.agents/skills/)',
|
|
97
97
|
value: 'opencode',
|
|
98
98
|
checked: true
|
|
99
99
|
});
|
|
@@ -107,6 +107,30 @@ async function promptPlatforms(detected) {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
if (detected.antigravity && detected.antigravity.installed) {
|
|
111
|
+
choices.push({
|
|
112
|
+
name: '✅ Google Antigravity (~/.agent/skills/)',
|
|
113
|
+
value: 'antigravity',
|
|
114
|
+
checked: true
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (detected.cursor && detected.cursor.installed) {
|
|
119
|
+
choices.push({
|
|
120
|
+
name: '✅ Cursor IDE (~/.cursor/skills/)',
|
|
121
|
+
value: 'cursor',
|
|
122
|
+
checked: true
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (detected.adal && detected.adal.installed) {
|
|
127
|
+
choices.push({
|
|
128
|
+
name: '✅ AdaL CLI (~/.adal/skills/)',
|
|
129
|
+
value: 'adal',
|
|
130
|
+
checked: true
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
110
134
|
if (choices.length === 0) {
|
|
111
135
|
return [];
|
|
112
136
|
}
|
package/lib/ui/table.js
CHANGED
|
@@ -16,7 +16,8 @@ function displayToolsTable(tools) {
|
|
|
16
16
|
codex_cli: 'OpenAI Codex CLI',
|
|
17
17
|
codex_app: 'OpenAI Codex App',
|
|
18
18
|
opencode: 'OpenCode',
|
|
19
|
-
gemini: 'Gemini CLI'
|
|
19
|
+
gemini: 'Gemini CLI',
|
|
20
|
+
antigravity: 'Google Antigravity'
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
for (const [key, name] of Object.entries(toolNames)) {
|
|
@@ -45,16 +46,17 @@ function displayToolsTable(tools) {
|
|
|
45
46
|
*/
|
|
46
47
|
function getToolsSummary(tools) {
|
|
47
48
|
const installed = [];
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
if (tools.copilot && tools.copilot.installed) installed.push('copilot');
|
|
50
51
|
if (tools.claude && tools.claude.installed) installed.push('claude');
|
|
51
52
|
if (tools.codex_cli && tools.codex_cli.installed) installed.push('codex_cli');
|
|
52
53
|
if (tools.codex_app && tools.codex_app.installed) installed.push('codex_app');
|
|
53
54
|
if (tools.opencode && tools.opencode.installed) installed.push('opencode');
|
|
54
55
|
if (tools.gemini && tools.gemini.installed) installed.push('gemini');
|
|
55
|
-
|
|
56
|
+
if (tools.antigravity && tools.antigravity.installed) installed.push('antigravity');
|
|
57
|
+
|
|
56
58
|
return {
|
|
57
|
-
total:
|
|
59
|
+
total: 7,
|
|
58
60
|
installed: installed.length,
|
|
59
61
|
names: installed
|
|
60
62
|
};
|
|
@@ -40,7 +40,10 @@ function getSkillsSourcePath(basePath, platform) {
|
|
|
40
40
|
'claude': '.claude',
|
|
41
41
|
'codex': '.codex',
|
|
42
42
|
'opencode': '.opencode',
|
|
43
|
-
'gemini': '.gemini'
|
|
43
|
+
'gemini': '.gemini',
|
|
44
|
+
'antigravity': '.antigravity',
|
|
45
|
+
'cursor': '.cursor',
|
|
46
|
+
'adal': '.adal'
|
|
44
47
|
};
|
|
45
48
|
|
|
46
49
|
// For npm package: basePath/skills/{platform}/
|
|
@@ -92,8 +95,11 @@ function getUserSkillsPath(platform) {
|
|
|
92
95
|
const platformDirs = {
|
|
93
96
|
'copilot': path.join(home, '.github', 'skills'),
|
|
94
97
|
'claude': path.join(home, '.claude', 'skills'),
|
|
95
|
-
'opencode': path.join(home, '.
|
|
96
|
-
'gemini': path.join(home, '.gemini', 'skills')
|
|
98
|
+
'opencode': path.join(home, '.agents', 'skills'),
|
|
99
|
+
'gemini': path.join(home, '.gemini', 'skills'),
|
|
100
|
+
'antigravity': path.join(home, '.agent', 'skills'),
|
|
101
|
+
'cursor': path.join(home, '.cursor', 'skills'),
|
|
102
|
+
'adal': path.join(home, '.adal', 'skills')
|
|
97
103
|
};
|
|
98
104
|
|
|
99
105
|
return platformDirs[platform] || path.join(home, `.${platform}`, 'skills');
|
package/lib/version-checker.js
CHANGED
|
@@ -19,11 +19,14 @@ function checkInstalledVersion() {
|
|
|
19
19
|
const homeDir = os.homedir();
|
|
20
20
|
|
|
21
21
|
const skillDirs = {
|
|
22
|
-
copilot: path.join(homeDir, '.
|
|
22
|
+
copilot: path.join(homeDir, '.github', 'skills'),
|
|
23
23
|
claude: path.join(homeDir, '.claude', 'skills'),
|
|
24
24
|
codex: path.join(homeDir, '.codex', 'skills'),
|
|
25
|
-
opencode: path.join(homeDir, '.
|
|
26
|
-
gemini: path.join(homeDir, '.gemini', 'skills')
|
|
25
|
+
opencode: path.join(homeDir, '.agents', 'skills'),
|
|
26
|
+
gemini: path.join(homeDir, '.gemini', 'skills'),
|
|
27
|
+
antigravity: path.join(homeDir, '.agent', 'skills'),
|
|
28
|
+
cursor: path.join(homeDir, '.cursor', 'skills'),
|
|
29
|
+
adal: path.join(homeDir, '.adal', 'skills')
|
|
27
30
|
};
|
|
28
31
|
|
|
29
32
|
for (const [platform, skillDir] of Object.entries(skillDirs)) {
|
|
@@ -90,11 +93,14 @@ function isUpdateAvailable(installInfo) {
|
|
|
90
93
|
function checkPlatformInstallation(platform) {
|
|
91
94
|
const homeDir = os.homedir();
|
|
92
95
|
const platformMap = {
|
|
93
|
-
copilot: '.
|
|
96
|
+
copilot: '.github',
|
|
94
97
|
claude: '.claude',
|
|
95
98
|
codex: '.codex',
|
|
96
|
-
opencode: '.
|
|
97
|
-
gemini: '.gemini'
|
|
99
|
+
opencode: '.agents',
|
|
100
|
+
gemini: '.gemini',
|
|
101
|
+
antigravity: '.agent',
|
|
102
|
+
cursor: '.cursor',
|
|
103
|
+
adal: '.adal'
|
|
98
104
|
};
|
|
99
105
|
|
|
100
106
|
const dirName = platformMap[platform];
|