agentvibes 1.1.0 → 1.1.1

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 CHANGED
@@ -9,7 +9,7 @@
9
9
  [![Publish](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
10
10
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
11
11
 
12
- **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v1.1.0
12
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v1.1.1
13
13
 
14
14
  ---
15
15
 
@@ -43,9 +43,9 @@
43
43
 
44
44
  ## 📰 Latest Release
45
45
 
46
- **[v1.1.0 - Release Notes](https://github.com/paulpreibisch/AgentVibes/releases/tag/v1.1.0)** 🌍
46
+ **[v1.1.1 - Release Notes](https://github.com/paulpreibisch/AgentVibes/releases/tag/v1.1.1)** 🔄
47
47
 
48
- Multilingual support is here! Speak with Claude in 30+ languages including Spanish, French, German, Italian, Portuguese, Chinese, Japanese, and more. Added 6 multilingual voices, fixed slash command discovery, and improved update experience with release notes fallback.
48
+ Self-update system is here! Update AgentVibes directly from Claude Code with `/agent-vibes:update` and check your version with `/agent-vibes:version`. No more manual npm/git commands - everything happens inside your Claude session with beautiful confirmations and release notes.
49
49
 
50
50
  [→ View All Releases](https://github.com/paulpreibisch/AgentVibes/releases)
51
51
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "agentvibes",
4
- "version": "1.1.0",
4
+ "version": "1.1.1",
5
5
  "description": "Beautiful ElevenLabs TTS voice commands for Claude Code - Add professional narration to your AI coding sessions",
6
6
  "keywords": [
7
7
  "elevenlabs",
package/src/installer.js CHANGED
@@ -489,7 +489,66 @@ program
489
489
  process.exit(1);
490
490
  }
491
491
 
492
- // Show recent changes from git log or RELEASE_NOTES.md
492
+ // Show latest release notes from RELEASE_NOTES.md
493
+ try {
494
+ const releaseNotesPath = path.join(__dirname, '..', 'RELEASE_NOTES.md');
495
+ const releaseNotes = await fs.readFile(releaseNotesPath, 'utf8');
496
+
497
+ // Extract latest release summary
498
+ const lines = releaseNotes.split('\n');
499
+
500
+ // Find the first release version header
501
+ const versionIndex = lines.findIndex(line => line.match(/^## 📦 v\d+\.\d+\.\d+/));
502
+
503
+ if (versionIndex >= 0) {
504
+ // Extract version
505
+ const versionMatch = lines[versionIndex].match(/v(\d+\.\d+\.\d+)/);
506
+ const version = versionMatch ? versionMatch[1] : 'unknown';
507
+
508
+ // Find the AI Summary section
509
+ const summaryIndex = lines.findIndex((line, idx) =>
510
+ idx > versionIndex && line.includes('### 🤖 AI Summary')
511
+ );
512
+
513
+ if (summaryIndex >= 0) {
514
+ console.log(chalk.cyan(`📰 Latest Release (v${version}):\n`));
515
+
516
+ // Extract summary text (lines between AI Summary and next ###)
517
+ let summaryText = '';
518
+ for (let i = summaryIndex + 1; i < lines.length; i++) {
519
+ const line = lines[i];
520
+ if (line.startsWith('###') || line.startsWith('##')) break;
521
+ if (line.trim()) {
522
+ summaryText += line.trim() + ' ';
523
+ }
524
+ }
525
+
526
+ // Wrap text at ~80 chars for better readability
527
+ const words = summaryText.split(' ');
528
+ let currentLine = '';
529
+ const wrappedLines = [];
530
+
531
+ words.forEach(word => {
532
+ if ((currentLine + word).length > 80) {
533
+ wrappedLines.push(currentLine.trim());
534
+ currentLine = word + ' ';
535
+ } else {
536
+ currentLine += word + ' ';
537
+ }
538
+ });
539
+ if (currentLine.trim()) wrappedLines.push(currentLine.trim());
540
+
541
+ wrappedLines.forEach(line => {
542
+ console.log(chalk.white(` ${line}`));
543
+ });
544
+ console.log();
545
+ }
546
+ }
547
+ } catch {
548
+ // Release notes not available - no problem
549
+ }
550
+
551
+ // Show latest commit messages
493
552
  try {
494
553
  const { execSync } = await import('node:child_process');
495
554
  const gitLog = execSync(
@@ -498,7 +557,7 @@ program
498
557
  ).trim();
499
558
 
500
559
  if (gitLog) {
501
- console.log(chalk.cyan('📰 Latest Release Notes:\n'));
560
+ console.log(chalk.cyan('📝 Latest Commit Messages:\n'));
502
561
  const commits = gitLog.split('\n');
503
562
  commits.forEach(commit => {
504
563
  const [hash, ...messageParts] = commit.split(' ');
@@ -508,7 +567,7 @@ program
508
567
  console.log();
509
568
  }
510
569
  } catch (error) {
511
- // Git not available or not a git repo - try RELEASE_NOTES.md
570
+ // Git not available - try RELEASE_NOTES.md fallback
512
571
  try {
513
572
  const releaseNotesPath = path.join(__dirname, '..', 'RELEASE_NOTES.md');
514
573
  const releaseNotes = await fs.readFile(releaseNotesPath, 'utf8');
@@ -518,7 +577,7 @@ program
518
577
  const commitsIndex = lines.findIndex(line => line.includes('## 📝 Recent Commits'));
519
578
 
520
579
  if (commitsIndex >= 0) {
521
- console.log(chalk.cyan('📰 Latest Release Notes:\n'));
580
+ console.log(chalk.cyan('📝 Latest Commit Messages:\n'));
522
581
 
523
582
  // Find the code block with commits (between ``` markers)
524
583
  let inCodeBlock = false;
@@ -654,7 +713,66 @@ program
654
713
  console.log(chalk.white(` • ${srcPersonalityFiles.length} personality templates (${newPersonalities} new, ${updatedPersonalities} updated)`));
655
714
  console.log(chalk.white(` • ${outputStyleFiles.length} output styles updated\n`));
656
715
 
657
- // Show recent changes from git log or RELEASE_NOTES.md
716
+ // Show latest release notes from RELEASE_NOTES.md
717
+ try {
718
+ const releaseNotesPath = path.join(__dirname, '..', 'RELEASE_NOTES.md');
719
+ const releaseNotes = await fs.readFile(releaseNotesPath, 'utf8');
720
+
721
+ // Extract latest release summary
722
+ const lines = releaseNotes.split('\n');
723
+
724
+ // Find the first release version header
725
+ const versionIndex = lines.findIndex(line => line.match(/^## 📦 v\d+\.\d+\.\d+/));
726
+
727
+ if (versionIndex >= 0) {
728
+ // Extract version
729
+ const versionMatch = lines[versionIndex].match(/v(\d+\.\d+\.\d+)/);
730
+ const version = versionMatch ? versionMatch[1] : 'unknown';
731
+
732
+ // Find the AI Summary section
733
+ const summaryIndex = lines.findIndex((line, idx) =>
734
+ idx > versionIndex && line.includes('### 🤖 AI Summary')
735
+ );
736
+
737
+ if (summaryIndex >= 0) {
738
+ console.log(chalk.cyan(`📰 Latest Release (v${version}):\n`));
739
+
740
+ // Extract summary text (lines between AI Summary and next ###)
741
+ let summaryText = '';
742
+ for (let i = summaryIndex + 1; i < lines.length; i++) {
743
+ const line = lines[i];
744
+ if (line.startsWith('###') || line.startsWith('##')) break;
745
+ if (line.trim()) {
746
+ summaryText += line.trim() + ' ';
747
+ }
748
+ }
749
+
750
+ // Wrap text at ~80 chars for better readability
751
+ const words = summaryText.split(' ');
752
+ let currentLine = '';
753
+ const wrappedLines = [];
754
+
755
+ words.forEach(word => {
756
+ if ((currentLine + word).length > 80) {
757
+ wrappedLines.push(currentLine.trim());
758
+ currentLine = word + ' ';
759
+ } else {
760
+ currentLine += word + ' ';
761
+ }
762
+ });
763
+ if (currentLine.trim()) wrappedLines.push(currentLine.trim());
764
+
765
+ wrappedLines.forEach(line => {
766
+ console.log(chalk.white(` ${line}`));
767
+ });
768
+ console.log();
769
+ }
770
+ }
771
+ } catch {
772
+ // Release notes not available - no problem
773
+ }
774
+
775
+ // Show latest commit messages
658
776
  try {
659
777
  const { execSync } = await import('node:child_process');
660
778
  const gitLog = execSync(
@@ -663,7 +781,7 @@ program
663
781
  ).trim();
664
782
 
665
783
  if (gitLog) {
666
- console.log(chalk.cyan('📝 Recent Changes:\n'));
784
+ console.log(chalk.cyan('📝 Latest Commit Messages:\n'));
667
785
  const commits = gitLog.split('\n');
668
786
  commits.forEach(commit => {
669
787
  const [hash, ...messageParts] = commit.split(' ');
@@ -673,7 +791,7 @@ program
673
791
  console.log();
674
792
  }
675
793
  } catch (error) {
676
- // Git not available or not a git repo - try RELEASE_NOTES.md
794
+ // Git not available - try RELEASE_NOTES.md fallback
677
795
  try {
678
796
  const releaseNotesPath = path.join(__dirname, '..', 'RELEASE_NOTES.md');
679
797
  const releaseNotes = await fs.readFile(releaseNotesPath, 'utf8');
@@ -683,7 +801,7 @@ program
683
801
  const commitsIndex = lines.findIndex(line => line.includes('## 📝 Recent Commits'));
684
802
 
685
803
  if (commitsIndex >= 0) {
686
- console.log(chalk.cyan('📝 Recent Changes:\n'));
804
+ console.log(chalk.cyan('📝 Latest Commit Messages:\n'));
687
805
 
688
806
  // Find the code block with commits (between ``` markers)
689
807
  let inCodeBlock = false;