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.
Files changed (91) hide show
  1. package/README.md +2 -2
  2. package/bin/cli.js +17 -12
  3. package/lib/claude.js +3 -2
  4. package/lib/codex.js +4 -3
  5. package/lib/commands/install.js +4 -1
  6. package/lib/copilot.js +3 -2
  7. package/lib/gemini.js +5 -5
  8. package/lib/opencode.js +5 -5
  9. package/lib/utils/path-resolver.js +87 -0
  10. package/lib/utils/skill-versions.js +63 -0
  11. package/package.json +4 -3
  12. package/skills/claude/audio-transcriber/CHANGELOG.md +169 -0
  13. package/skills/claude/audio-transcriber/README.md +340 -0
  14. package/skills/claude/audio-transcriber/SKILL.md +558 -0
  15. package/skills/claude/audio-transcriber/examples/basic-transcription.sh +250 -0
  16. package/skills/claude/audio-transcriber/references/tools-comparison.md +352 -0
  17. package/skills/claude/audio-transcriber/scripts/install-requirements.sh +190 -0
  18. package/skills/claude/audio-transcriber/scripts/transcribe.py +486 -0
  19. package/skills/claude/prompt-engineer/README.md +659 -0
  20. package/skills/claude/prompt-engineer/SKILL.md +252 -0
  21. package/skills/claude/skill-creator/README.md +270 -0
  22. package/skills/claude/skill-creator/SKILL.md +593 -0
  23. package/skills/claude/youtube-summarizer/CHANGELOG.md +66 -0
  24. package/skills/claude/youtube-summarizer/README.md +365 -0
  25. package/skills/claude/youtube-summarizer/SKILL.md +411 -0
  26. package/skills/claude/youtube-summarizer/scripts/extract-transcript.py +65 -0
  27. package/skills/claude/youtube-summarizer/scripts/install-dependencies.sh +28 -0
  28. package/skills/codex/audio-transcriber/CHANGELOG.md +169 -0
  29. package/skills/codex/audio-transcriber/README.md +340 -0
  30. package/skills/codex/audio-transcriber/SKILL.md +558 -0
  31. package/skills/codex/audio-transcriber/examples/basic-transcription.sh +250 -0
  32. package/skills/codex/audio-transcriber/references/tools-comparison.md +352 -0
  33. package/skills/codex/audio-transcriber/scripts/install-requirements.sh +190 -0
  34. package/skills/codex/audio-transcriber/scripts/transcribe.py +486 -0
  35. package/skills/codex/prompt-engineer/README.md +659 -0
  36. package/skills/codex/prompt-engineer/SKILL.md +252 -0
  37. package/skills/codex/skill-creator/README.md +270 -0
  38. package/skills/codex/skill-creator/SKILL.md +593 -0
  39. package/skills/codex/youtube-summarizer/CHANGELOG.md +66 -0
  40. package/skills/codex/youtube-summarizer/README.md +365 -0
  41. package/skills/codex/youtube-summarizer/SKILL.md +411 -0
  42. package/skills/codex/youtube-summarizer/scripts/extract-transcript.py +65 -0
  43. package/skills/codex/youtube-summarizer/scripts/install-dependencies.sh +28 -0
  44. package/skills/copilot/audio-transcriber/CHANGELOG.md +169 -0
  45. package/skills/copilot/audio-transcriber/README.md +340 -0
  46. package/skills/copilot/audio-transcriber/SKILL.md +558 -0
  47. package/skills/copilot/audio-transcriber/examples/basic-transcription.sh +250 -0
  48. package/skills/copilot/audio-transcriber/references/tools-comparison.md +352 -0
  49. package/skills/copilot/audio-transcriber/scripts/install-requirements.sh +190 -0
  50. package/skills/copilot/audio-transcriber/scripts/transcribe.py +486 -0
  51. package/skills/copilot/prompt-engineer/README.md +659 -0
  52. package/skills/copilot/prompt-engineer/SKILL.md +252 -0
  53. package/skills/copilot/skill-creator/README.md +270 -0
  54. package/skills/copilot/skill-creator/SKILL.md +593 -0
  55. package/skills/copilot/youtube-summarizer/CHANGELOG.md +66 -0
  56. package/skills/copilot/youtube-summarizer/README.md +365 -0
  57. package/skills/copilot/youtube-summarizer/SKILL.md +411 -0
  58. package/skills/copilot/youtube-summarizer/scripts/extract-transcript.py +65 -0
  59. package/skills/copilot/youtube-summarizer/scripts/install-dependencies.sh +28 -0
  60. package/skills/gemini/audio-transcriber/CHANGELOG.md +169 -0
  61. package/skills/gemini/audio-transcriber/README.md +340 -0
  62. package/skills/gemini/audio-transcriber/SKILL.md +558 -0
  63. package/skills/gemini/audio-transcriber/examples/basic-transcription.sh +250 -0
  64. package/skills/gemini/audio-transcriber/references/tools-comparison.md +352 -0
  65. package/skills/gemini/audio-transcriber/scripts/install-requirements.sh +190 -0
  66. package/skills/gemini/audio-transcriber/scripts/transcribe.py +486 -0
  67. package/skills/gemini/prompt-engineer/README.md +659 -0
  68. package/skills/gemini/prompt-engineer/SKILL.md +252 -0
  69. package/skills/gemini/skill-creator/README.md +270 -0
  70. package/skills/gemini/skill-creator/SKILL.md +593 -0
  71. package/skills/gemini/youtube-summarizer/CHANGELOG.md +66 -0
  72. package/skills/gemini/youtube-summarizer/README.md +365 -0
  73. package/skills/gemini/youtube-summarizer/SKILL.md +411 -0
  74. package/skills/gemini/youtube-summarizer/scripts/extract-transcript.py +65 -0
  75. package/skills/gemini/youtube-summarizer/scripts/install-dependencies.sh +28 -0
  76. package/skills/opencode/audio-transcriber/CHANGELOG.md +169 -0
  77. package/skills/opencode/audio-transcriber/README.md +340 -0
  78. package/skills/opencode/audio-transcriber/SKILL.md +558 -0
  79. package/skills/opencode/audio-transcriber/examples/basic-transcription.sh +250 -0
  80. package/skills/opencode/audio-transcriber/references/tools-comparison.md +352 -0
  81. package/skills/opencode/audio-transcriber/scripts/install-requirements.sh +190 -0
  82. package/skills/opencode/audio-transcriber/scripts/transcribe.py +486 -0
  83. package/skills/opencode/prompt-engineer/README.md +659 -0
  84. package/skills/opencode/prompt-engineer/SKILL.md +252 -0
  85. package/skills/opencode/skill-creator/README.md +270 -0
  86. package/skills/opencode/skill-creator/SKILL.md +593 -0
  87. package/skills/opencode/youtube-summarizer/CHANGELOG.md +66 -0
  88. package/skills/opencode/youtube-summarizer/README.md +365 -0
  89. package/skills/opencode/youtube-summarizer/SKILL.md +411 -0
  90. package/skills/opencode/youtube-summarizer/scripts/extract-transcript.py +65 -0
  91. 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
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
- ![Version](https://img.shields.io/badge/version-1.7.1-blue.svg)
7
+ ![Version](https://img.shields.io/badge/version-1.7.2-blue.svg)
8
8
  ![License](https://img.shields.io/badge/license-MIT-green.svg)
9
9
  ![Node](https://img.shields.io/badge/node-%3E%3D14.0.0-green.svg)
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
- const VERSION = '1.6.0';
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 = path.resolve(__dirname, '../..');
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 = path.resolve(__dirname, '../..');
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
- console.log(' • skill-creator (v1.3.0)');
281
- console.log(' • prompt-engineer (v1.1.0)');
282
- console.log(' • youtube-summarizer (v1.2.0)');
283
- console.log(' audio-transcriber (v1.2.0)\n');
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 = path.join(repoPath, '.claude', 'skills');
7
- const skillsTarget = path.join(os.homedir(), '.claude', 'skills');
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 = path.join(os.homedir(), '.codex', 'skills');
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 = path.join(repoPath, '.codex', 'skills');
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');
@@ -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('\n🤖 CLI AI Skills Installer v1.0.0\n'));
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 = path.join(repoPath, '.github', 'skills');
7
- const skillsTarget = path.join(os.homedir(), '.github', 'skills');
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 homeDir = os.homedir();
14
- const targetDir = path.join(homeDir, '.gemini', 'skills');
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 = path.join(repoPath, '.gemini', 'skills');
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 homeDir = os.homedir();
14
- const targetDir = path.join(homeDir, '.opencode', 'skills');
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 = path.join(repoPath, '.opencode', 'skills');
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.1",
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 v1.5.0 - test passed'",
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