cli-ai-skills 1.7.1 → 1.7.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/README.md +2 -2
- package/bin/cli.js +17 -12
- package/lib/claude.js +3 -2
- package/lib/codex.js +4 -3
- package/lib/commands/install.js +4 -1
- package/lib/copilot.js +3 -2
- package/lib/gemini.js +5 -5
- package/lib/opencode.js +5 -5
- package/lib/utils/path-resolver.js +87 -0
- package/lib/utils/skill-versions.js +63 -0
- package/package.json +4 -3
- package/skills/claude/audio-transcriber/CHANGELOG.md +169 -0
- package/skills/claude/audio-transcriber/README.md +340 -0
- package/skills/claude/audio-transcriber/SKILL.md +558 -0
- package/skills/claude/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/claude/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/claude/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/claude/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/claude/prompt-engineer/README.md +659 -0
- package/skills/claude/prompt-engineer/SKILL.md +252 -0
- package/skills/claude/skill-creator/README.md +270 -0
- package/skills/claude/skill-creator/SKILL.md +593 -0
- package/skills/claude/youtube-summarizer/CHANGELOG.md +66 -0
- package/skills/claude/youtube-summarizer/README.md +365 -0
- package/skills/claude/youtube-summarizer/SKILL.md +411 -0
- package/skills/claude/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/claude/youtube-summarizer/scripts/install-dependencies.sh +28 -0
- package/skills/codex/audio-transcriber/CHANGELOG.md +169 -0
- package/skills/codex/audio-transcriber/README.md +340 -0
- package/skills/codex/audio-transcriber/SKILL.md +558 -0
- package/skills/codex/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/codex/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/codex/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/codex/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/codex/prompt-engineer/README.md +659 -0
- package/skills/codex/prompt-engineer/SKILL.md +252 -0
- package/skills/codex/skill-creator/README.md +270 -0
- package/skills/codex/skill-creator/SKILL.md +593 -0
- package/skills/codex/youtube-summarizer/CHANGELOG.md +66 -0
- package/skills/codex/youtube-summarizer/README.md +365 -0
- package/skills/codex/youtube-summarizer/SKILL.md +411 -0
- package/skills/codex/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/codex/youtube-summarizer/scripts/install-dependencies.sh +28 -0
- package/skills/copilot/audio-transcriber/CHANGELOG.md +169 -0
- package/skills/copilot/audio-transcriber/README.md +340 -0
- package/skills/copilot/audio-transcriber/SKILL.md +558 -0
- package/skills/copilot/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/copilot/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/copilot/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/copilot/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/copilot/prompt-engineer/README.md +659 -0
- package/skills/copilot/prompt-engineer/SKILL.md +252 -0
- package/skills/copilot/skill-creator/README.md +270 -0
- package/skills/copilot/skill-creator/SKILL.md +593 -0
- package/skills/copilot/youtube-summarizer/CHANGELOG.md +66 -0
- package/skills/copilot/youtube-summarizer/README.md +365 -0
- package/skills/copilot/youtube-summarizer/SKILL.md +411 -0
- package/skills/copilot/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/copilot/youtube-summarizer/scripts/install-dependencies.sh +28 -0
- package/skills/gemini/audio-transcriber/CHANGELOG.md +169 -0
- package/skills/gemini/audio-transcriber/README.md +340 -0
- package/skills/gemini/audio-transcriber/SKILL.md +558 -0
- package/skills/gemini/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/gemini/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/gemini/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/gemini/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/gemini/prompt-engineer/README.md +659 -0
- package/skills/gemini/prompt-engineer/SKILL.md +252 -0
- package/skills/gemini/skill-creator/README.md +270 -0
- package/skills/gemini/skill-creator/SKILL.md +593 -0
- package/skills/gemini/youtube-summarizer/CHANGELOG.md +66 -0
- package/skills/gemini/youtube-summarizer/README.md +365 -0
- package/skills/gemini/youtube-summarizer/SKILL.md +411 -0
- package/skills/gemini/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/gemini/youtube-summarizer/scripts/install-dependencies.sh +28 -0
- package/skills/opencode/audio-transcriber/CHANGELOG.md +169 -0
- package/skills/opencode/audio-transcriber/README.md +340 -0
- package/skills/opencode/audio-transcriber/SKILL.md +558 -0
- package/skills/opencode/audio-transcriber/examples/basic-transcription.sh +250 -0
- package/skills/opencode/audio-transcriber/references/tools-comparison.md +352 -0
- package/skills/opencode/audio-transcriber/scripts/install-requirements.sh +190 -0
- package/skills/opencode/audio-transcriber/scripts/transcribe.py +486 -0
- package/skills/opencode/prompt-engineer/README.md +659 -0
- package/skills/opencode/prompt-engineer/SKILL.md +252 -0
- package/skills/opencode/skill-creator/README.md +270 -0
- package/skills/opencode/skill-creator/SKILL.md +593 -0
- package/skills/opencode/youtube-summarizer/CHANGELOG.md +66 -0
- package/skills/opencode/youtube-summarizer/README.md +365 -0
- package/skills/opencode/youtube-summarizer/SKILL.md +411 -0
- package/skills/opencode/youtube-summarizer/scripts/extract-transcript.py +65 -0
- package/skills/opencode/youtube-summarizer/scripts/install-dependencies.sh +28 -0
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# cli-ai-skills v1.7.
|
|
1
|
+
# cli-ai-skills v1.7.2
|
|
2
2
|
|
|
3
3
|
🚀 **NPX Installer for AI Skills**
|
|
4
4
|
|
|
5
5
|
Install reusable skills for GitHub Copilot CLI, Claude Code, OpenAI Codex, OpenCode, and Gemini CLI in one command.
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|

|
|
9
9
|

|
|
10
10
|
|
package/bin/cli.js
CHANGED
|
@@ -12,11 +12,15 @@ const { listBundles, validateBundle } = require('../lib/bundles');
|
|
|
12
12
|
const { searchSkills } = require('../lib/search');
|
|
13
13
|
const { displayToolsTable } = require('../lib/ui/table');
|
|
14
14
|
const { checkInstalledVersion, isUpdateAvailable } = require('../lib/version-checker');
|
|
15
|
+
const { getSkillVersion } = require('../lib/utils/skill-versions');
|
|
16
|
+
const { getSkillsBasePath } = require('../lib/utils/path-resolver');
|
|
15
17
|
const chalk = require('chalk');
|
|
16
18
|
const inquirer = require('inquirer');
|
|
17
19
|
const path = require('path');
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
// Read version dynamically from package.json
|
|
22
|
+
const packageJson = require('../package.json');
|
|
23
|
+
const VERSION = packageJson.version;
|
|
20
24
|
|
|
21
25
|
// Command aliases
|
|
22
26
|
const commandAliases = {
|
|
@@ -120,7 +124,7 @@ async function main() {
|
|
|
120
124
|
process.exit(0);
|
|
121
125
|
}
|
|
122
126
|
|
|
123
|
-
const repoPath =
|
|
127
|
+
const repoPath = getSkillsBasePath(__dirname);
|
|
124
128
|
const quiet = args.includes('-q') || args.includes('--quiet');
|
|
125
129
|
|
|
126
130
|
if (!quiet) {
|
|
@@ -238,7 +242,7 @@ async function main() {
|
|
|
238
242
|
|
|
239
243
|
console.log(chalk.cyan(`\n📦 Instalando skills para: ${platforms.join(', ')}\n`));
|
|
240
244
|
|
|
241
|
-
const repoPath =
|
|
245
|
+
const repoPath = getSkillsBasePath(__dirname);
|
|
242
246
|
const quiet = args.includes('-q') || args.includes('--quiet');
|
|
243
247
|
|
|
244
248
|
// Install for selected platforms
|
|
@@ -261,11 +265,6 @@ async function main() {
|
|
|
261
265
|
if (platforms.includes('gemini')) {
|
|
262
266
|
installGeminiSkills(repoPath, null, quiet);
|
|
263
267
|
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
if (platforms.includes('codex')) {
|
|
267
|
-
installCodexSkills(repoPath, null, quiet);
|
|
268
|
-
}
|
|
269
268
|
|
|
270
269
|
if (!quiet) {
|
|
271
270
|
console.log(chalk.green(`\n✅ Instalação concluída com sucesso!\n`));
|
|
@@ -277,10 +276,16 @@ async function main() {
|
|
|
277
276
|
switch(command) {
|
|
278
277
|
case 'list':
|
|
279
278
|
console.log('📋 Installed Skills:\n');
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
|
|
280
|
+
// Get repo path (works both in npm package and git repo)
|
|
281
|
+
const repoPath = getSkillsBasePath(__dirname);
|
|
282
|
+
const skills = ['skill-creator', 'prompt-engineer', 'youtube-summarizer', 'audio-transcriber'];
|
|
283
|
+
|
|
284
|
+
skills.forEach(skill => {
|
|
285
|
+
const version = getSkillVersion(skill, repoPath);
|
|
286
|
+
console.log(` • ${skill} (v${version})`);
|
|
287
|
+
});
|
|
288
|
+
console.log();
|
|
284
289
|
break;
|
|
285
290
|
|
|
286
291
|
case 'update':
|
package/lib/claude.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const fs = require('fs-extra');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const os = require('os');
|
|
4
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
4
5
|
|
|
5
6
|
function installClaudeSkills(repoPath) {
|
|
6
|
-
const skillsSource =
|
|
7
|
-
const skillsTarget =
|
|
7
|
+
const skillsSource = getSkillsSourcePath(repoPath, 'claude');
|
|
8
|
+
const skillsTarget = getUserSkillsPath('claude');
|
|
8
9
|
|
|
9
10
|
console.log('🔧 Installing Claude Code skills...');
|
|
10
11
|
|
package/lib/codex.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const os = require('os');
|
|
4
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
4
5
|
|
|
5
|
-
const CODEX_SKILLS_DIR =
|
|
6
|
+
const CODEX_SKILLS_DIR = getUserSkillsPath('codex');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Instala skills para OpenAI Codex
|
|
@@ -10,8 +11,8 @@ const CODEX_SKILLS_DIR = path.join(os.homedir(), '.codex', 'skills');
|
|
|
10
11
|
*/
|
|
11
12
|
function install(repoPath) {
|
|
12
13
|
console.log('\n📦 Instalando skills para OpenAI Codex...');
|
|
13
|
-
|
|
14
|
-
const skillsSource =
|
|
14
|
+
|
|
15
|
+
const skillsSource = getSkillsSourcePath(repoPath, 'codex');
|
|
15
16
|
|
|
16
17
|
if (!fs.existsSync(skillsSource)) {
|
|
17
18
|
console.error('❌ Erro: .codex/skills/ não encontrado no repositório');
|
package/lib/commands/install.js
CHANGED
|
@@ -9,8 +9,11 @@ const InstallationPrompts = require('../ui/prompts');
|
|
|
9
9
|
const ProgressGauge = require('../ui/progress-gauge');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
12
|
+
// Read version dynamically from package.json
|
|
13
|
+
const packageJson = require('../../package.json');
|
|
14
|
+
|
|
12
15
|
async function installCommand(skillNames, options) {
|
|
13
|
-
console.log(chalk.cyan.bold(
|
|
16
|
+
console.log(chalk.cyan.bold(`\n🤖 CLI AI Skills Installer v${packageJson.version}\n`));
|
|
14
17
|
|
|
15
18
|
// Initialize progress gauge (5 main steps)
|
|
16
19
|
const gauge = new ProgressGauge(5);
|
package/lib/copilot.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const fs = require('fs-extra');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const os = require('os');
|
|
4
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
4
5
|
|
|
5
6
|
function installCopilotSkills(repoPath) {
|
|
6
|
-
const skillsSource =
|
|
7
|
-
const skillsTarget =
|
|
7
|
+
const skillsSource = getSkillsSourcePath(repoPath, 'copilot');
|
|
8
|
+
const skillsTarget = getUserSkillsPath('copilot');
|
|
8
9
|
|
|
9
10
|
console.log('🔧 Installing GitHub Copilot CLI skills...');
|
|
10
11
|
|
package/lib/gemini.js
CHANGED
|
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
|
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
4
|
const os = require('os');
|
|
5
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Install skills for Gemini CLI
|
|
@@ -10,13 +11,12 @@ const os = require('os');
|
|
|
10
11
|
* @param {boolean} quiet - Suppress output
|
|
11
12
|
*/
|
|
12
13
|
function install(repoPath, skills = null, quiet = false) {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const targetDir = getUserSkillsPath('gemini');
|
|
15
|
+
|
|
16
16
|
// Criar diretório se não existir
|
|
17
17
|
fs.ensureDirSync(targetDir);
|
|
18
|
-
|
|
19
|
-
const sourceDir =
|
|
18
|
+
|
|
19
|
+
const sourceDir = getSkillsSourcePath(repoPath, 'gemini');
|
|
20
20
|
|
|
21
21
|
if (!fs.existsSync(sourceDir)) {
|
|
22
22
|
if (!quiet) {
|
package/lib/opencode.js
CHANGED
|
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
|
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
4
|
const os = require('os');
|
|
5
|
+
const { getSkillsSourcePath, getUserSkillsPath } = require('./utils/path-resolver');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Install skills for OpenCode
|
|
@@ -10,13 +11,12 @@ const os = require('os');
|
|
|
10
11
|
* @param {boolean} quiet - Suppress output
|
|
11
12
|
*/
|
|
12
13
|
function install(repoPath, skills = null, quiet = false) {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const targetDir = getUserSkillsPath('opencode');
|
|
15
|
+
|
|
16
16
|
// Criar diretório se não existir
|
|
17
17
|
fs.ensureDirSync(targetDir);
|
|
18
|
-
|
|
19
|
-
const sourceDir =
|
|
18
|
+
|
|
19
|
+
const sourceDir = getSkillsSourcePath(repoPath, 'opencode');
|
|
20
20
|
|
|
21
21
|
if (!fs.existsSync(sourceDir)) {
|
|
22
22
|
if (!quiet) {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Determine if running from npm package or git repository
|
|
6
|
+
* @param {string} dirname - __dirname from calling file
|
|
7
|
+
* @returns {string} Base path for skills
|
|
8
|
+
*/
|
|
9
|
+
function getSkillsBasePath(dirname) {
|
|
10
|
+
// For npm package: cli-ai-skills/bin/cli.js -> cli-ai-skills/
|
|
11
|
+
// For git repo: cli-ai-skills/cli-installer/bin/cli.js -> cli-ai-skills/
|
|
12
|
+
|
|
13
|
+
const packageSkillsPath = path.resolve(dirname, '..');
|
|
14
|
+
const repoSkillsPath = path.resolve(dirname, '../..');
|
|
15
|
+
|
|
16
|
+
// Check if we're in an npm package (skills/ exists as sibling to bin/)
|
|
17
|
+
if (fs.existsSync(path.join(packageSkillsPath, 'skills'))) {
|
|
18
|
+
// npm package structure: cli-ai-skills/skills/
|
|
19
|
+
return packageSkillsPath;
|
|
20
|
+
} else if (fs.existsSync(path.join(repoSkillsPath, 'skills'))) {
|
|
21
|
+
// git repo structure: cli-ai-skills/cli-installer/../skills/
|
|
22
|
+
return repoSkillsPath;
|
|
23
|
+
} else {
|
|
24
|
+
// Fallback to repo root
|
|
25
|
+
return repoSkillsPath;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Get skills source path for a specific platform
|
|
31
|
+
* Tries npm package structure first, then falls back to git repo structure
|
|
32
|
+
* @param {string} basePath - Base path from getSkillsBasePath()
|
|
33
|
+
* @param {string} platform - Platform name (copilot, claude, codex, opencode, gemini)
|
|
34
|
+
* @returns {string} Path to skills directory for the platform
|
|
35
|
+
*/
|
|
36
|
+
function getSkillsSourcePath(basePath, platform) {
|
|
37
|
+
// Platform directory mappings
|
|
38
|
+
const platformDirs = {
|
|
39
|
+
'copilot': '.github',
|
|
40
|
+
'claude': '.claude',
|
|
41
|
+
'codex': '.codex',
|
|
42
|
+
'opencode': '.opencode',
|
|
43
|
+
'gemini': '.gemini'
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// For npm package: basePath/skills/{platform}/
|
|
47
|
+
const npmPath = path.join(basePath, 'skills', platform);
|
|
48
|
+
|
|
49
|
+
// For git repo: basePath/{.platform}/skills/
|
|
50
|
+
const platformDir = platformDirs[platform] || `.${platform}`;
|
|
51
|
+
const gitPath = path.join(basePath, platformDir, 'skills');
|
|
52
|
+
|
|
53
|
+
// Try npm structure first, then git repo structure
|
|
54
|
+
if (fs.existsSync(npmPath)) {
|
|
55
|
+
return npmPath;
|
|
56
|
+
} else if (fs.existsSync(gitPath)) {
|
|
57
|
+
return gitPath;
|
|
58
|
+
} else {
|
|
59
|
+
// Return npm path as default (will be created during build)
|
|
60
|
+
return npmPath;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get user home directory skills path for a platform
|
|
66
|
+
* @param {string} platform - Platform name
|
|
67
|
+
* @returns {string} Path to user's skills directory
|
|
68
|
+
*/
|
|
69
|
+
function getUserSkillsPath(platform) {
|
|
70
|
+
const home = process.env.HOME || process.env.USERPROFILE;
|
|
71
|
+
|
|
72
|
+
const platformDirs = {
|
|
73
|
+
'copilot': path.join(home, '.github', 'skills'),
|
|
74
|
+
'claude': path.join(home, '.claude', 'skills'),
|
|
75
|
+
'codex': path.join(home, '.codex', 'skills'),
|
|
76
|
+
'opencode': path.join(home, '.opencode', 'skills'),
|
|
77
|
+
'gemini': path.join(home, '.gemini', 'skills')
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return platformDirs[platform] || path.join(home, `.${platform}`, 'skills');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
module.exports = {
|
|
84
|
+
getSkillsBasePath,
|
|
85
|
+
getSkillsSourcePath,
|
|
86
|
+
getUserSkillsPath
|
|
87
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const yaml = require('js-yaml');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Extract version from SKILL.md frontmatter
|
|
7
|
+
* @param {string} skillName - Name of the skill
|
|
8
|
+
* @param {string} basePath - Base path where skills are located
|
|
9
|
+
* @returns {string} Version string or 'unknown'
|
|
10
|
+
*/
|
|
11
|
+
function getSkillVersion(skillName, basePath) {
|
|
12
|
+
try {
|
|
13
|
+
// Try multiple possible paths
|
|
14
|
+
const possiblePaths = [
|
|
15
|
+
// Git repo structure
|
|
16
|
+
path.join(basePath, 'skills', skillName, 'SKILL.md'),
|
|
17
|
+
path.join(basePath, '.github', 'skills', skillName, 'SKILL.md'),
|
|
18
|
+
path.join(basePath, '.claude', 'skills', skillName, 'SKILL.md'),
|
|
19
|
+
// NPM package structure (one level deeper with platform subdirs)
|
|
20
|
+
path.join(basePath, 'skills', 'copilot', skillName, 'SKILL.md'),
|
|
21
|
+
path.join(basePath, 'skills', 'claude', skillName, 'SKILL.md')
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
for (const skillPath of possiblePaths) {
|
|
25
|
+
if (fs.existsSync(skillPath)) {
|
|
26
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
27
|
+
|
|
28
|
+
// Extract YAML frontmatter
|
|
29
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
30
|
+
if (match) {
|
|
31
|
+
const frontmatter = yaml.load(match[1]);
|
|
32
|
+
if (frontmatter && frontmatter.version) {
|
|
33
|
+
return frontmatter.version;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return 'unknown';
|
|
40
|
+
} catch (err) {
|
|
41
|
+
console.error(`Error reading version for ${skillName}:`, err.message);
|
|
42
|
+
return 'unknown';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get versions for all available skills
|
|
48
|
+
* @param {string[]} skillNames - Array of skill names
|
|
49
|
+
* @param {string} basePath - Base path where skills are located
|
|
50
|
+
* @returns {Object} Object with skillName: version pairs
|
|
51
|
+
*/
|
|
52
|
+
function getAllSkillVersions(skillNames, basePath) {
|
|
53
|
+
const versions = {};
|
|
54
|
+
for (const skillName of skillNames) {
|
|
55
|
+
versions[skillName] = getSkillVersion(skillName, basePath);
|
|
56
|
+
}
|
|
57
|
+
return versions;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = {
|
|
61
|
+
getSkillVersion,
|
|
62
|
+
getAllSkillVersions
|
|
63
|
+
};
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cli-ai-skills",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.3",
|
|
4
4
|
"description": "Install AI skills for GitHub Copilot CLI, Claude Code, and OpenAI Codex",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"cli-ai-skills": "bin/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"test": "echo '✅ cli-ai-skills
|
|
10
|
+
"test": "echo '✅ cli-ai-skills - test passed'",
|
|
11
11
|
"build": "cd .. && ./scripts/build-skills.sh",
|
|
12
12
|
"prebuild": "cd .. && ./scripts/build-skills.sh",
|
|
13
13
|
"link": "npm link",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"files": [
|
|
40
40
|
"bin/",
|
|
41
41
|
"lib/",
|
|
42
|
-
"README.md"
|
|
42
|
+
"README.md",
|
|
43
|
+
"skills/"
|
|
43
44
|
],
|
|
44
45
|
"dependencies": {
|
|
45
46
|
"axios": "^1.6.5",
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Changelog - audio-transcriber
|
|
2
|
+
|
|
3
|
+
All notable changes to the audio-transcriber skill will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## [1.2.1] - 2026-02-04
|
|
11
|
+
|
|
12
|
+
### 🔒 Security
|
|
13
|
+
|
|
14
|
+
- **CRITICAL: Removed unsafe file deletion** in `cleanup_temp_files()`
|
|
15
|
+
- **Issue:** Function was deleting files with fixed names (`metadata.json`, `transcription.json`) from user's output directory without verifying the script created them
|
|
16
|
+
- **Risk:** Could accidentally delete unrelated user files with the same names
|
|
17
|
+
- **Root Cause:** Script doesn't actually create these JSON files, cleanup was attempting to delete non-existent files (and would delete user files if they existed)
|
|
18
|
+
- **Solution:** Removed `cleanup_temp_files()` function entirely
|
|
19
|
+
- **Impact:** Script now only creates and manages files it's supposed to:
|
|
20
|
+
- `transcript-TIMESTAMP.md` (always created)
|
|
21
|
+
- `ata-TIMESTAMP.md` (optional, if LLM processing succeeds)
|
|
22
|
+
|
|
23
|
+
### 🗑️ Removed
|
|
24
|
+
|
|
25
|
+
- `cleanup_temp_files()` function (26 lines removed)
|
|
26
|
+
- `--keep-temp` CLI argument (no longer needed)
|
|
27
|
+
- All calls to `cleanup_temp_files()` (3 locations)
|
|
28
|
+
|
|
29
|
+
### 📝 Notes
|
|
30
|
+
|
|
31
|
+
- **Breaking Change:** `--keep-temp` flag removed (was non-functional anyway)
|
|
32
|
+
- **Backward Compatibility:** All other functionality unchanged
|
|
33
|
+
- **Migration:** Remove `--keep-temp` from scripts if used
|
|
34
|
+
|
|
35
|
+
### 🔗 Related
|
|
36
|
+
|
|
37
|
+
- Identified by Codex automated review in antigravity-awesome-skills PR #62
|
|
38
|
+
- Also fixed in antigravity-awesome-skills fork (commit eb49312)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## [1.1.0] - 2026-02-03
|
|
43
|
+
|
|
44
|
+
### ✨ Added
|
|
45
|
+
|
|
46
|
+
- **Intelligent Prompt Workflow** (Step 3b) - Complete integration with prompt-engineer skill
|
|
47
|
+
- **Scenario A**: User-provided prompts are automatically improved with prompt-engineer
|
|
48
|
+
- Displays both original and improved versions side-by-side
|
|
49
|
+
- Single confirmation: "Usar versão melhorada? [s/n]"
|
|
50
|
+
- **Scenario B**: Auto-generation when no prompt provided
|
|
51
|
+
- Analyzes transcript and suggests document type (ata, resumo, notas)
|
|
52
|
+
- Shows suggestion and asks confirmation
|
|
53
|
+
- Generates complete structured prompt (RISEN/RODES/STAR)
|
|
54
|
+
- Shows preview and asks final confirmation
|
|
55
|
+
- Falls back to DEFAULT_MEETING_PROMPT if declined
|
|
56
|
+
|
|
57
|
+
- **LLM Integration** - Process transcripts with Claude CLI or GitHub Copilot CLI
|
|
58
|
+
- Priority: Claude > GitHub Copilot > None (transcript-only mode)
|
|
59
|
+
- Step 0b: CLI detection logic documented
|
|
60
|
+
- Timeout handling (5 minutes default)
|
|
61
|
+
- Graceful fallback if CLI unavailable
|
|
62
|
+
|
|
63
|
+
- **Progress Indicators** - Visual feedback during long operations
|
|
64
|
+
- `tqdm` progress bar for Whisper transcription segments
|
|
65
|
+
- `rich` spinner for LLM processing
|
|
66
|
+
- Clear status messages at each step
|
|
67
|
+
|
|
68
|
+
- **Timestamp-based File Naming** - Avoid overwriting previous transcriptions
|
|
69
|
+
- Format: `transcript-YYYYMMDD-HHMMSS.md`
|
|
70
|
+
- Format: `ata-YYYYMMDD-HHMMSS.md`
|
|
71
|
+
- Prevents data loss from repeated runs
|
|
72
|
+
|
|
73
|
+
- **Automatic Cleanup** - Remove temporary files after processing
|
|
74
|
+
- Deletes `metadata.json` and `transcription.json` automatically
|
|
75
|
+
- `--keep-temp` flag to preserve if needed
|
|
76
|
+
- Clean output directory
|
|
77
|
+
|
|
78
|
+
- **Rich Terminal UI** - Beautiful output with `rich` library
|
|
79
|
+
- Formatted panels for prompt previews
|
|
80
|
+
- Color-coded status messages (green=success, yellow=warning, red=error)
|
|
81
|
+
- Spinner animations for long-running tasks
|
|
82
|
+
|
|
83
|
+
- **Dual Output Support** - Generate both transcript and processed ata
|
|
84
|
+
- `transcript-*.md` - Raw transcription with timestamps
|
|
85
|
+
- `ata-*.md` - Intelligent summary/meeting minutes (if LLM available)
|
|
86
|
+
- User can decline LLM processing to get transcript-only
|
|
87
|
+
|
|
88
|
+
### 🔧 Changed
|
|
89
|
+
|
|
90
|
+
- **SKILL.md** - Major documentation updates
|
|
91
|
+
- Added Step 0b (CLI Detection)
|
|
92
|
+
- Updated Step 2 (Progress Indicators)
|
|
93
|
+
- Added Step 3b (Intelligent Prompt Workflow with 150+ lines)
|
|
94
|
+
- Updated version to 1.1.0
|
|
95
|
+
- Added detailed workflow diagrams for both scenarios
|
|
96
|
+
|
|
97
|
+
- **install-requirements.sh** - Added UI libraries
|
|
98
|
+
- Now installs `tqdm` and `rich` packages
|
|
99
|
+
- Graceful fallback if installation fails
|
|
100
|
+
- Updated success messages
|
|
101
|
+
|
|
102
|
+
- **Python Implementation** - Complete refactor
|
|
103
|
+
- Created `scripts/transcribe.py` (516 lines)
|
|
104
|
+
- Functions: `detect_cli_tool()`, `invoke_prompt_engineer()`, `handle_prompt_workflow()`, `process_with_llm()`, `transcribe_audio()`, `save_outputs()`, `cleanup_temp_files()`
|
|
105
|
+
- Command-line arguments: `--prompt`, `--model`, `--output-dir`, `--keep-temp`
|
|
106
|
+
- Auto-installs `rich` and `tqdm` if missing
|
|
107
|
+
|
|
108
|
+
### 🐛 Fixed
|
|
109
|
+
|
|
110
|
+
- **User prompts no longer ignored** - v1.0.0 completely ignored custom prompts
|
|
111
|
+
- Now processes all prompts (custom or auto-generated) with LLM
|
|
112
|
+
- Improves simple prompts into structured frameworks
|
|
113
|
+
|
|
114
|
+
- **Temporary files cleanup** - v1.0.0 left `metadata.json` and `transcription.json` as trash
|
|
115
|
+
- Now automatically removed after processing
|
|
116
|
+
- Clean output directory
|
|
117
|
+
|
|
118
|
+
- **File overwriting** - v1.0.0 used same filename (e.g., `meeting.md`) every time
|
|
119
|
+
- Now uses timestamp to prevent data loss
|
|
120
|
+
- Each run creates unique files
|
|
121
|
+
|
|
122
|
+
- **Missing ata/summary** - v1.0.0 only generated raw transcript
|
|
123
|
+
- Now generates intelligent ata/resumo using LLM
|
|
124
|
+
- Respects user's prompt instructions
|
|
125
|
+
|
|
126
|
+
- **No progress feedback** - v1.0.0 had silent processing (users didn't know if it froze)
|
|
127
|
+
- Now shows progress bar for transcription
|
|
128
|
+
- Shows spinner for LLM processing
|
|
129
|
+
- Clear status messages throughout
|
|
130
|
+
|
|
131
|
+
### 📝 Notes
|
|
132
|
+
|
|
133
|
+
- **Backward Compatibility:** Fully compatible with v1.0.0 workflows
|
|
134
|
+
- **Requires:** Python 3.8+, faster-whisper OR whisper, tqdm, rich
|
|
135
|
+
- **Optional:** Claude CLI or GitHub Copilot CLI for intelligent processing
|
|
136
|
+
- **Optional:** prompt-engineer skill for automatic prompt generation
|
|
137
|
+
|
|
138
|
+
### 🔗 Related Issues
|
|
139
|
+
|
|
140
|
+
- Fixes #1: Prompt do usuário RISEN ignorado
|
|
141
|
+
- Fixes #2: Arquivos temporários (metadata.json, transcription.json) deixados como lixo
|
|
142
|
+
- Fixes #3: Output incompleto (apenas transcript RAW, sem ata)
|
|
143
|
+
- Fixes #4: Falta de indicador de progresso visual
|
|
144
|
+
- Fixes #5: Formato de saída sem timestamp
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## [1.0.0] - 2026-02-02
|
|
149
|
+
|
|
150
|
+
### ✨ Initial Release
|
|
151
|
+
|
|
152
|
+
- Audio transcription using Faster-Whisper or OpenAI Whisper
|
|
153
|
+
- Automatic language detection
|
|
154
|
+
- Speaker diarization (basic)
|
|
155
|
+
- Voice Activity Detection (VAD)
|
|
156
|
+
- Markdown output with metadata table
|
|
157
|
+
- Installation script for dependencies
|
|
158
|
+
- Example scripts for basic transcription
|
|
159
|
+
- Support for multiple audio formats (MP3, WAV, M4A, OGG, FLAC, WEBM)
|
|
160
|
+
- FFmpeg integration for format conversion
|
|
161
|
+
- Zero-configuration philosophy
|
|
162
|
+
|
|
163
|
+
### 📝 Known Limitations (Fixed in v1.1.0)
|
|
164
|
+
|
|
165
|
+
- User prompts ignored (no LLM integration)
|
|
166
|
+
- Only raw transcript generated (no ata/summary)
|
|
167
|
+
- Temporary files not cleaned up
|
|
168
|
+
- No progress indicators
|
|
169
|
+
- Files overwritten on repeated runs
|