agentvibes 5.9.0 → 5.11.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.
Files changed (70) hide show
  1. package/.agentvibes/config.json +17 -12
  2. package/.agentvibes/install-manifest.json +98 -86
  3. package/.claude/audio/ui/CREDITS.txt +16 -0
  4. package/.claude/audio/ui/bling-success.wav +0 -0
  5. package/.claude/commands/agent-vibes/receiver.md +64 -0
  6. package/.claude/config/audio-effects.cfg +3 -3
  7. package/.claude/config/personality.txt +1 -0
  8. package/.claude/config/reverb-level.txt +1 -1
  9. package/.claude/github-star-reminder.txt +1 -1
  10. package/.claude/hooks/audio-processor.sh +57 -18
  11. package/.claude/hooks/kokoro-installer.sh +117 -0
  12. package/.claude/hooks/kokoro-server.py +219 -0
  13. package/.claude/hooks/kokoro-tts.py +141 -0
  14. package/.claude/hooks/piper-download-voices.sh +39 -16
  15. package/.claude/hooks/piper-installer.sh +11 -6
  16. package/.claude/hooks/piper-voice-manager.sh +6 -6
  17. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +3 -1
  18. package/.claude/hooks/play-tts-elevenlabs.sh +360 -0
  19. package/.claude/hooks/play-tts-kokoro.sh +127 -0
  20. package/.claude/hooks/play-tts-piper.sh +20 -13
  21. package/.claude/hooks/play-tts-ssh-remote.sh +9 -2
  22. package/.claude/hooks/play-tts-termux-ssh.sh +3 -1
  23. package/.claude/hooks/play-tts.sh +78 -2
  24. package/.claude/hooks/provider-commands.sh +71 -22
  25. package/.claude/hooks/provider-manager.sh +15 -7
  26. package/.claude/hooks/voice-manager.sh +6 -0
  27. package/.claude/hooks-windows/kokoro-server.py +219 -0
  28. package/.claude/hooks-windows/kokoro-tts.py +107 -0
  29. package/.claude/hooks-windows/play-tts-kokoro.ps1 +191 -0
  30. package/.claude/hooks-windows/play-tts-windows-piper.ps1 +22 -16
  31. package/.claude/hooks-windows/play-tts.ps1 +29 -1
  32. package/README.md +12 -86
  33. package/RELEASE_NOTES.md +60 -0
  34. package/mcp-server/server.py +17 -7
  35. package/package.json +4 -3
  36. package/src/commands/install-mcp.js +730 -476
  37. package/src/console/app.js +28 -12
  38. package/src/console/audio-env.js +85 -1
  39. package/src/console/navigation.js +4 -0
  40. package/src/console/tabs/agents-tab.js +18 -12
  41. package/src/console/tabs/music-tab.js +7 -25
  42. package/src/console/tabs/receiver-tab.js +13 -13
  43. package/src/console/tabs/settings-tab.js +2 -2
  44. package/src/console/tabs/setup-tab.js +1708 -124
  45. package/src/console/tabs/voices-tab.js +76 -92
  46. package/src/console/widgets/format-utils.js +14 -2
  47. package/src/console/widgets/help-bar.js +55 -0
  48. package/src/console/widgets/personality-picker.js +2 -2
  49. package/src/console/widgets/reverb-picker.js +429 -41
  50. package/src/console/widgets/track-picker.js +60 -51
  51. package/src/i18n/de.js +204 -203
  52. package/src/i18n/en.js +1 -0
  53. package/src/i18n/es.js +204 -203
  54. package/src/i18n/fr.js +204 -203
  55. package/src/i18n/hi.js +204 -203
  56. package/src/i18n/ja.js +204 -203
  57. package/src/i18n/ko.js +204 -203
  58. package/src/i18n/pt.js +204 -203
  59. package/src/i18n/strings.js +54 -54
  60. package/src/i18n/zh-CN.js +204 -203
  61. package/src/installer.js +127 -34
  62. package/src/services/provider-service.js +178 -143
  63. package/src/services/provider-voice-catalog.js +126 -0
  64. package/src/services/tts-engine-service.js +53 -4
  65. package/src/utils/audio-duration-validator.js +341 -298
  66. package/src/utils/list-formatter.js +200 -194
  67. package/src/utils/platform-resolver.js +369 -0
  68. package/src/utils/preview-list-prompt.js +8 -0
  69. package/src/utils/provider-validator.js +79 -9
  70. package/templates/agentvibes-receiver.sh +6 -2
@@ -8,11 +8,11 @@
8
8
 
9
9
  import fs from 'node:fs';
10
10
  import path from 'node:path';
11
- import { spawn } from 'node:child_process';
12
11
  import { destroyList } from './destroy-list.js';
13
12
  import { BRAND_PINK } from '../brand-colors.js';
13
+ import { renderHelpBar, selectorTitle } from './help-bar.js';
14
14
  import { formatTrackName } from './format-utils.js';
15
- import { buildAudioEnv, detectMp3Player } from '../audio-env.js';
15
+ import { buildAudioEnv, spawnMp3Player } from '../audio-env.js';
16
16
 
17
17
  const IS_TEST = process.env.AGENTVIBES_TEST_MODE === 'true';
18
18
  let blessed;
@@ -22,7 +22,6 @@ if (!IS_TEST) {
22
22
  }
23
23
 
24
24
  const _modalTitle = (text) => ` {${BRAND_PINK}-fg}${text}{/${BRAND_PINK}-fg} `;
25
- const _hintLabel = '{#455a64-fg}[Space] Preview [Enter] Select [Esc] Cancel{/#455a64-fg}';
26
25
 
27
26
  /**
28
27
  * Open a small volume input modal (0–100).
@@ -172,16 +171,46 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
172
171
  );
173
172
  const currentIdx = tracks.findIndex(t => t.file === currentTrack);
174
173
 
175
- const listHeight = Math.min(tracks.length + 6, Math.floor(screen.rows * 0.7));
176
- const list = blessed.list({
174
+ // Standardized chrome: bordered box titled "Music Track Selector", a pinned
175
+ // (non-scrolling) help bar at the top, and the track list filling the rest.
176
+ const TITLE = selectorTitle('Music Track');
177
+ const HELP = renderHelpBar([
178
+ { key: 'Space', label: 'preview' },
179
+ { key: 'Enter', label: 'select' },
180
+ { key: 'Esc', label: 'cancel' },
181
+ ]);
182
+
183
+ const boxHeight = Math.min(tracks.length + 5, Math.floor(screen.rows * 0.7));
184
+ const box = blessed.box({
177
185
  parent: screen,
178
186
  top: 'center',
179
187
  left: 'center',
180
188
  width: 54,
181
- height: listHeight,
189
+ height: boxHeight,
182
190
  border: { type: 'line' },
183
191
  tags: true,
184
- label: _modalTitle('Select Track'),
192
+ label: TITLE,
193
+ style: { border: { fg: COLORS.btnFocus } },
194
+ });
195
+ box.setFront();
196
+
197
+ blessed.text({
198
+ parent: box,
199
+ top: 0,
200
+ left: 1,
201
+ right: 1,
202
+ height: 1,
203
+ tags: true,
204
+ content: HELP,
205
+ });
206
+
207
+ const list = blessed.list({
208
+ parent: box,
209
+ top: 1,
210
+ left: 0,
211
+ right: 0,
212
+ bottom: 0,
213
+ tags: true,
185
214
  items,
186
215
  keys: true,
187
216
  vi: false,
@@ -189,50 +218,29 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
189
218
  scrollable: true,
190
219
  scrollbar: { ch: '│', track: { bg: '#1e2a3a' }, style: { fg: COLORS.btnFocus } },
191
220
  style: {
192
- border: { fg: COLORS.btnFocus },
193
221
  selected: { bg: COLORS.btnFocus, fg: COLORS.btnFocusFg, bold: true },
194
222
  item: { fg: '#e3f2fd' },
195
223
  },
196
224
  });
197
225
 
198
- // Helper: update hint text in the bottom border label
199
- function _setHint(text) {
200
- list.setLabel({ text: _modalTitle('Select Track'), side: 'left' });
201
- // Use _ prefix convention for bottom border content (blessed doesn't have setFooter)
202
- list._label2 && list._label2.destroy();
203
- list._label2 = blessed.text({
204
- parent: list,
205
- bottom: -1,
206
- left: 1,
207
- width: 50,
208
- height: 1,
209
- tags: true,
210
- content: text,
211
- style: { fg: '#e3f2fd' },
212
- });
226
+ // Transient preview/error status shows in the title area; idle restores the title.
227
+ function _setStatus(text) {
228
+ box.setLabel(text || TITLE);
213
229
  screen.render();
214
230
  }
215
231
 
216
- _setHint(_hintLabel);
217
-
218
232
  if (currentIdx >= 0) list.select(currentIdx);
219
233
  list.focus();
220
234
  screen.render();
221
235
 
222
236
  // Preview playback state
223
237
  const _spawnEnv = buildAudioEnv();
224
- const _mp3Player = detectMp3Player(_spawnEnv);
225
238
  let _previewProc = null;
226
239
  let _previewTrackId = null;
227
240
 
228
241
  function _killPreview() {
229
242
  if (_previewProc) {
230
- const _isWin = process.platform === 'win32' && !process.env.WSL_DISTRO_NAME;
231
- if (_isWin) {
232
- try { _previewProc.kill(); } catch {}
233
- } else {
234
- try { process.kill(-_previewProc.pid, 'SIGTERM'); } catch {}
235
- }
243
+ _previewProc.kill();
236
244
  _previewProc = null;
237
245
  }
238
246
  _previewTrackId = null;
@@ -242,7 +250,7 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
242
250
  // Toggle off if same track
243
251
  if (_previewTrackId === trackFile) {
244
252
  _killPreview();
245
- _setHint(_hintLabel);
253
+ _setStatus();
246
254
  return;
247
255
  }
248
256
 
@@ -252,31 +260,34 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
252
260
  const safeBase = path.resolve(tracksDir);
253
261
  if (!trackPath.startsWith(safeBase + path.sep) && trackPath !== safeBase) return;
254
262
 
255
- if (!_mp3Player || !fs.existsSync(trackPath)) {
256
- _setHint('{red-fg}No MP3 player found or track missing{/red-fg}');
257
- setTimeout(() => {
258
- _setHint(_hintLabel);
259
- }, 3000);
263
+ if (!fs.existsSync(trackPath)) {
264
+ _setStatus(' {red-fg}Track file missing{/red-fg} ');
265
+ setTimeout(() => { _setStatus(); }, 3000);
260
266
  return;
261
267
  }
262
268
 
263
- _previewProc = spawn(_mp3Player.bin, _mp3Player.args(trackPath), {
264
- stdio: 'ignore', detached: true, env: _spawnEnv,
265
- });
269
+ const proc = spawnMp3Player(trackPath, _spawnEnv);
270
+ if (!proc) {
271
+ _setStatus(' {red-fg}No MP3 player found{/red-fg} ');
272
+ setTimeout(() => { _setStatus(); }, 3000);
273
+ return;
274
+ }
275
+
276
+ _previewProc = proc;
266
277
  _previewTrackId = trackFile;
267
278
 
268
279
  const label = tracks.find(t => t.file === trackFile)?.label ?? trackFile;
269
- _setHint(`{bright-cyan-fg}♪ Previewing: ${label} (Space to stop){/bright-cyan-fg}`);
280
+ _setStatus(` {bright-cyan-fg}♪ ${label} (Space to stop){/bright-cyan-fg} `);
270
281
 
271
- _previewProc.on('exit', () => {
282
+ proc.on('exit', () => {
272
283
  if (_previewTrackId === trackFile) {
273
284
  _previewTrackId = null;
274
285
  _previewProc = null;
275
- _setHint(_hintLabel);
286
+ _setStatus();
276
287
  }
277
288
  });
278
289
 
279
- _previewProc.on('error', () => {
290
+ proc.on('error', () => {
280
291
  _previewTrackId = null;
281
292
  _previewProc = null;
282
293
  });
@@ -284,12 +295,11 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
284
295
 
285
296
  function _close(callback) {
286
297
  _killPreview();
287
- if (list._label2) list._label2.destroy();
288
298
  if (callback) {
289
299
  callback();
290
- destroyList(list, screen, onClose);
300
+ destroyList(box, screen, onClose);
291
301
  } else {
292
- destroyList(list, screen, onClose);
302
+ destroyList(box, screen, onClose);
293
303
  }
294
304
  }
295
305
 
@@ -304,15 +314,14 @@ export function openTrackPicker(screen, currentTrack, currentVolume, onSelect, o
304
314
  const selected = tracks[list.selected];
305
315
  if (!selected) return;
306
316
  _killPreview();
307
- if (list._label2) list._label2.destroy();
308
317
  if (options.skipVolume) {
309
- destroyList(list, screen, null);
318
+ destroyList(box, screen, null);
310
319
  setTimeout(() => {
311
320
  onSelect(selected.file);
312
321
  if (onClose) onClose();
313
322
  }, 0);
314
323
  } else {
315
- destroyList(list, screen, null);
324
+ destroyList(box, screen, null);
316
325
  openVolumeInput(screen, currentVolume ?? 20, (volume) => {
317
326
  onSelect(selected.file, volume);
318
327
  }, onClose);
package/src/i18n/de.js CHANGED
@@ -1,203 +1,204 @@
1
- export default {
2
- languageSelectTitle: "🌐 Select Language / Seleccionar Idioma / Choisir la langue / Sprache wählen / Selecionar Idioma / 言語を選択 / भाषा चुनें / 选择语言 / 언어 선택",
3
- languageApplied: "Sprache angewendet",
4
- welcomeTitle: "Willkommen bei AgentVibes!",
5
- installDetails: "Installationsdetails",
6
- installLocation: "Installationsort",
7
- packageVersion: "Paketversion",
8
- readyToConfigure: "Bereit zum Konfigurieren von AgentVibes?",
9
- installationCancelled: "Installation abgebrochen.",
10
- startInstall: "Installation starten",
11
- installationCancelledMsg: "Die Installation wurde vom Benutzer abgebrochen.",
12
- installedSuccess: "AgentVibes erfolgreich installiert!",
13
- installComplete: "Installation abgeschlossen",
14
- installationFailed: "Installation fehlgeschlagen",
15
- installing: "AgentVibes wird installiert...",
16
- providerLabel: "Anbieter",
17
- voiceLabel: "Stimme",
18
- locationLabel: "Ort",
19
- versionLabel: "Version",
20
- configurationSetup: "Konfiguration",
21
- configurationIntro: "Bitte konfigurieren Sie Ihre AgentVibes-Installation.",
22
- navigationHint: "Verwenden Sie die Pfeiltasten, um zwischen Seiten zu navigieren.",
23
- nonInteractiveDetected: "Nicht-interaktiver Modus erkannt",
24
- installError: "Installation fehlgeschlagen",
25
- continuePrompt: "Weiter",
26
- cancelPrompt: "Abbrechen",
27
- setupWizard: "Einrichtungsassistent",
28
- setupWizardSubtitle: "TTS für KI-Assistenten mit Persönlichkeit.",
29
- dependencyCheck: "Abhängigkeitsprüfung",
30
- checkingDependencies: "Abhängigkeiten werden überprüft...",
31
- depColumn: "Abhängigkeit",
32
- statusColumn: "Status",
33
- installed: "Installiert",
34
- notFound: "Nicht gefunden",
35
- ffmpegMissing: "Nicht gefunden (für Hintergrundmusik benötigt)",
36
- ttsDetected: "TTS-Anbieter erkannt",
37
- noTtsFound: "Kein TTS-Anbieter gefunden. Installieren Sie zuerst Piper oder Soprano.",
38
- providerSelection: "Anbieterauswahl",
39
- availableProviders: "Verfügbare TTS-Anbieter:",
40
- providerAndVoice: "Anbieter & Stimme",
41
- voiceChangeHint: "(nach der Installation in Einstellungen änderbar)",
42
- introText: "Einleitungstext",
43
- introTextLabel: "Einleitungstext",
44
- none: "keiner",
45
- example: "Beispiel",
46
- screen1Hint: "Bildschirm 1/5: Willkommen | [←/→] Navigieren | [Enter] Beginnen | [Esc] Beenden",
47
- screen2Hint: "Bildschirm 2/5: Abhängigkeiten | [←] Zurück | [Enter] Weiter",
48
- screen3Hint: "Bildschirm 3/5: Anbieter | [←] Zurück | [↑↓] Wählen | [Enter/→] Bestätigen",
49
- screen4Hint: "Bildschirm 4/5: Konfiguration | [Esc] Zurück | [E] Bearbeiten | [↓] Akzeptieren & Installieren",
50
- screen5HintDone: "Bildschirm 5/5: Abgeschlossen | [Enter] OK — Fertig",
51
- screen5HintWait: "Bildschirm 5/5: Installieren... | Bitte warten",
52
- languageSettings: "Sprache",
53
- languageSettingsSubtitle: "Oberflächensprache auswählen",
54
- currentLanguage: "Aktuelle Sprache",
55
- changeLanguage: "Sprache ändern",
56
- beginBtn: "▶ Beginnen",
57
- exitBtn: "✗ Beenden",
58
- footerText: "[Enter] Weiter/Fertig [Esc] Zurück/Beenden [C] Konsole [S/V/M/A/R] Tab [Q] Beenden",
59
- customizationTool: "Anpassungswerkzeug",
60
- quitLabel: "[Q] Beenden",
61
- tabInstall: "Installieren",
62
- tabSettings: "Einstellungen",
63
- tabVoices: "Stimmen",
64
- tabMusic: "Musik",
65
- tabBmad: "BMad",
66
- tabReceiver: "Empfänger",
67
- tabReadme: "Liesmich",
68
- tabHelp: "Hilfe",
69
- subTabVoice: " [V] Stimme ",
70
- subTabEffects: " [E] Effekte ",
71
- subTabPersonality: " [P] Persönlichkeit ",
72
- subTabOutput: " [O] Ausgabe ",
73
- subTabLanguage: " [L] Sprache ",
74
- sectionProviderVoice: " 🎤 Anbieter & Stimme ",
75
- sectionAudioEffects: " ⚡ Audioeffekte ",
76
- sectionBgMusic: " 🎸 Hintergrundmusik ",
77
- sectionStyle: " 🎭 Stil ",
78
- sectionIntroText: " ✍️ Einleitungstext ",
79
- sectionAudioDest: " 📡 Audioziel ",
80
- sectionConfigStorage: " 💾 Konfigurationsspeicher ",
81
- sectionLanguage: " 🌐 Sprache ",
82
- providerRowLabel: "Anbieter:",
83
- currentVoiceLabel: "Aktuelle Stimme:",
84
- reverbLabel: "Hall:",
85
- trackLabel: "Titel:",
86
- volumeLabel: "Lautstärke:",
87
- verbosityLabel: "Ausführlichkeit:",
88
- personalityLabel: "Persönlichkeit:",
89
- introTextRowLabel: "Einleitungstext:",
90
- destinationLabel: "Ziel:",
91
- sshAliasLabel: "SSH-Alias:",
92
- globalLabel: "Global:",
93
- localLabel: "Lokal:",
94
- languageLabel: "Sprache:",
95
- switchBtn: "Wechseln",
96
- changeBtn: "Ändern",
97
- playBtn: "▶ Abspielen",
98
- stopBtn: "■ Stop",
99
- previewBtn: "▶ Vorschau",
100
- fullPreviewBtn: "▶ Vollvorschau",
101
- saveGloballyBtn: "Global Speichern",
102
- saveLocallyBtn: "Lokal Speichern",
103
- cancelChangesBtn: "Änderungen Verwerfen",
104
- editBtn: "Bearbeiten",
105
- clearBtn: "Löschen",
106
- applyLanguageBtn: "✓ Sprache Anwenden",
107
- enabledBtn: "Aktiviert",
108
- disabledBtn: "Deaktiviert",
109
- okSaveBtn: "OK — Speichern",
110
- enableBtn: "Aktivieren",
111
- streamingTextBtn: "Nur Text Streaming ✓",
112
- streamingPulseBtn: "Pulse-Audio Streaming",
113
- continueArrowBtn: "Weiter →",
114
- acceptInstallBtn: "✓ Akzeptieren & Installieren",
115
- okDoneBtn: "✓ OK — Fertig",
116
- doneCustomizeBtn: "✓ Fertig - Mehr anpassen",
117
- doneQuitBtn: "✕ Fertig - Beenden",
118
- editInstallBtn: "Bearbeiten",
119
- musicDisabledMsg: "Musik deaktiviert. Jetzt aktivieren?",
120
- settingsFooter: "[↑↓] Gruppe [←→] Geschwister/Sub-Tab [Enter/Space] Aktivieren [Tab] Tab Wechseln [Q] Beenden",
121
- voicesFooter: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Auswählen [F] Favorit [/] Suchen",
122
- musicFooter: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Auswählen [M] Umschalten [*] Favorit [F] Filtern [Q] Beenden",
123
- helpFooter: "[↑↓/jk] Scrollen [/] Suchen [PgUp/PgDn] Seite [S/V/M/A/R] Tab [Q] Beenden",
124
- readmeFooter: "[↑↓/jk] Scrollen [PgUp/PgDn] Seite [/] Suchen [S/V/M/A/R] Tab [Q] Beenden",
125
- receiverFooter: "SSH-Empfänger [Q] Beenden",
126
- searchLabel: "Suchen:",
127
- settingsSavedMsg: "Einstellungen Gespeichert",
128
- changesRevertedMsg: "Änderungen zurückgesetzt",
129
- musicBuiltInHeader: "── Eingebaute Tracks ",
130
- musicStatusHeader: "── Musikstatus ",
131
- musicStatusLabel: "Musik:",
132
- musicActiveTrack: "Aktiver Track:",
133
- musicFilterLabel: "Filter:",
134
- musicFilterAll: "Alle",
135
- musicFilterFavs: "Favoriten",
136
- musicToggleBtn: "[Musik umschalten]",
137
- musicAddCustomBtn: "[Eigenen Track hinzufügen]",
138
- voicesHeader: "── Stimmen ",
139
- voicesColName: "Name",
140
- voicesColGender: "Geschlecht",
141
- voicesColProvider: "Anbieter",
142
- voicesInfoHeader: "── Stimmeninfo ",
143
- voicesSwitchBtn: "[Stimme wechseln]",
144
- voicesFavoriteBtn: "[★ Favorit]",
145
- voicesDownloadBtn: "[Stimme herunterladen]",
146
- voicesRowHintInstalled: "[Space] Vorschau [Enter] Auswählen [*] Favorit",
147
- voicesRowHintUninstalled: "[Enter] Herunterladen und installieren",
148
- musicRowHint: "[Space] Abspielen [Enter] Auswählen [*] Favorit",
149
- musicHintText: "[Space] Vorschau [Enter] Track festlegen [*] Favorit",
150
- genderFemale: "Weiblich",
151
- genderMale: "Männlich",
152
- voiceInfoVoice: "Stimme:",
153
- voiceInfoGender: "Geschlecht:",
154
- voiceInfoLanguage: "Sprache:",
155
- voiceInfoQuality: "Qualität:",
156
- voiceInfoProvider: "Anbieter:",
157
- voiceInfoId: "ID:",
158
- voiceInfoSpeaker: "Sprecher:",
159
- voiceInfoModel: "Modell:",
160
- voiceInfoSpeakerId: "Sprecher-ID:",
161
- voiceInfoDownload: "⬇ [Enter] drücken zum Herunterladen und Installieren",
162
- voicePlaying: "(wird abgespielt)",
163
- bmadTitle: "🧙 BMAD-Agenten",
164
- bmadWhatIsHeader: "Was ist BMAD?",
165
- bmadDesc: "Die BMad-Methode (Build More Architect Dreams) ist ein KI-gesteuertes\nEntwicklungs-Framework-Modul, das Ihnen hilft, Software von der Ideenfindung\nbis zur agentischen Implementierung zu entwickeln. Es bietet spezialisierte\nKI-Agenten, geführte Workflows und intelligente Planung.\n\nWenn Sie mit KI-Codierassistenten wie Claude, Cursor oder GitHub Copilot\nvertraut sind, können Sie sofort loslegen.",
166
- bmadInstallHeader: "BMAD in Ihrem Projekt installieren:",
167
- bmadLearnMoreHeader: "Mehr erfahren:",
168
- bmadInstalledNote: "Sobald BMAD installiert ist, zeigt dieser Tab alle Ihre Agenten an und\nermöglicht es Ihnen, Stimme, Prätext, Nachhall, Persönlichkeit und\nHintergrundmusik jedes Agenten unabhängig anzupassen.",
169
- receiverWhatIsTitle: "Was ist SSH-Empfänger?",
170
- receiverDesc: "Der SSH-Empfänger ermöglicht es Ihren Remote-Servern, über diese Maschine\nzu sprechen. Wenn ein KI-Assistent auf einem Remote-Server TTS-Audio\nabspielen muss, sendet er den Text per SSH an diese Maschine, die das\nAudio generiert und über Ihre Lautsprecher abspielt.\n\nEntfernter KI ──[SSH]──► Diese Maschine ──[piper+sox+ffmpeg]──► Ihre Lautsprecher",
171
- helpSectionGlobal: "Globale Tastenkürzel",
172
- helpSectionNavigation: "Navigationstastenkürzel",
173
- helpSectionColors: "Tab-Farbführer",
174
- helpQuit: "Konsole beenden",
175
- helpForceQuit: "Erzwungenes Beenden",
176
- helpSwitchSettings: "Zum Tab Einstellungen wechseln",
177
- helpSwitchVoices: "Zum Tab Stimmen wechseln",
178
- helpSwitchMusic: "Zum Tab Musik wechseln",
179
- helpSwitchReadme: "Zum Tab Readme wechseln",
180
- helpSwitchHelp: "Zum Tab Hilfe wechseln",
181
- helpSwitchInstall: "Zum Tab Installieren wechseln",
182
- helpCloseModal: "Modal schließen / zurück",
183
- helpNavigateLists: "Listen navigieren",
184
- helpSelectActivate: "Auswählen / aktivieren",
185
- helpTogglePreview: "Umschalten / Vorschau",
186
- helpNextButton: "Nächste Schaltfläche",
187
- helpPrevButton: "Vorherige Schaltfläche",
188
- helpOpenSearch: "Suche/Filter öffnen",
189
- helpToggleFavFilter: "Favoritenfilter umschalten (Stimmen/Musik)",
190
- helpToggleFav: "Favorit umschalten (Musik-Tab)",
191
- helpToggleMusic: "Musik ein-/ausschalten (Musik-Tab)",
192
- helpColorSettings: "Einstellungen-Tab-Fußzeile",
193
- helpColorVoices: "Stimmen-Tab-Fußzeile",
194
- helpColorMusic: "Musik-Tab-Fußzeile",
195
- helpColorReadme: "Readme-Tab-Fußzeile",
196
- helpColorHelp: "Hilfe-Tab-Fußzeile",
197
- helpColorInstall: "Installieren-Tab-Fußzeile",
198
- helpSearchLabel: "Suche:",
199
- readmeScrollMore: "↓ Scrollen für mehr Inhalt ↓",
200
- readmeNotFound: "*(Keine README.md im aktuellen Verzeichnis gefunden)*",
201
- bmadFooterNobmad: "[Tab] Tab wechseln [Q] Beenden",
202
- bmadFooterBmad: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Konfigurieren [A] Auto-zuweisen [B] Stapel [X] Zurücksetzen [Q] Beenden",
203
- };
1
+ export default {
2
+ languageSelectTitle: "🌐 Select Language / Seleccionar Idioma / Choisir la langue / Sprache wählen / Selecionar Idioma / 言語を選択 / भाषा चुनें / 选择语言 / 언어 선택",
3
+ languageApplied: "Sprache angewendet",
4
+ welcomeTitle: "Willkommen bei AgentVibes!",
5
+ installDetails: "Installationsdetails",
6
+ installLocation: "Installationsort",
7
+ packageVersion: "Paketversion",
8
+ readyToConfigure: "Bereit zum Konfigurieren von AgentVibes?",
9
+ installationCancelled: "Installation abgebrochen.",
10
+ startInstall: "Installation starten",
11
+ installationCancelledMsg: "Die Installation wurde vom Benutzer abgebrochen.",
12
+ installedSuccess: "AgentVibes erfolgreich installiert!",
13
+ installComplete: "Installation abgeschlossen",
14
+ installationFailed: "Installation fehlgeschlagen",
15
+ installing: "AgentVibes wird installiert...",
16
+ providerLabel: "Anbieter",
17
+ voiceLabel: "Stimme",
18
+ locationLabel: "Ort",
19
+ versionLabel: "Version",
20
+ configurationSetup: "Konfiguration",
21
+ configurationIntro: "Bitte konfigurieren Sie Ihre AgentVibes-Installation.",
22
+ navigationHint: "Verwenden Sie die Pfeiltasten, um zwischen Seiten zu navigieren.",
23
+ nonInteractiveDetected: "Nicht-interaktiver Modus erkannt",
24
+ installError: "Installation fehlgeschlagen",
25
+ continuePrompt: "Weiter",
26
+ cancelPrompt: "Abbrechen",
27
+ setupWizard: "Einrichtungsassistent",
28
+ setupWizardSubtitle: "TTS für KI-Assistenten mit Persönlichkeit.",
29
+ dependencyCheck: "Abhängigkeitsprüfung",
30
+ checkingDependencies: "Abhängigkeiten werden überprüft...",
31
+ depColumn: "Abhängigkeit",
32
+ statusColumn: "Status",
33
+ installed: "Installiert",
34
+ notFound: "Nicht gefunden",
35
+ ffmpegMissing: "Nicht gefunden (für Hintergrundmusik benötigt)",
36
+ ttsDetected: "TTS-Anbieter erkannt",
37
+ noTtsFound: "Kein TTS-Anbieter gefunden. Installieren Sie zuerst Piper oder Soprano.",
38
+ providerSelection: "Anbieterauswahl",
39
+ availableProviders: "Verfügbare TTS-Anbieter:",
40
+ providerAndVoice: "Anbieter & Stimme",
41
+ voiceChangeHint: "(nach der Installation in Einstellungen änderbar)",
42
+ introText: "Einleitungstext",
43
+ introTextLabel: "Einleitungstext",
44
+ none: "keiner",
45
+ example: "Beispiel",
46
+ screen1Hint: "Bildschirm 1/5: Willkommen | [←/→] Navigieren | [Enter] Beginnen | [Esc] Beenden",
47
+ screen2Hint: "Bildschirm 2/5: Abhängigkeiten | [←] Zurück | [Enter] Weiter",
48
+ screen3Hint: "Bildschirm 3/5: Anbieter | [←] Zurück | [↑↓] Wählen | [Enter/→] Bestätigen",
49
+ screen4Hint: "Bildschirm 4/5: Konfiguration | [Esc] Zurück | [E] Bearbeiten | [↓] Akzeptieren & Installieren",
50
+ screen5HintDone: "Bildschirm 5/5: Abgeschlossen | [Enter] OK — Fertig",
51
+ screen5HintWait: "Bildschirm 5/5: Installieren... | Bitte warten",
52
+ languageSettings: "Sprache",
53
+ languageSettingsSubtitle: "Oberflächensprache auswählen",
54
+ currentLanguage: "Aktuelle Sprache",
55
+ changeLanguage: "Sprache ändern",
56
+ beginBtn: "▶ Beginnen",
57
+ exitBtn: "✗ Beenden",
58
+ footerText: "[Enter] Weiter/Fertig [Esc] Zurück/Beenden [C] Konsole [S/V/M/A/R] Tab [Q] Beenden",
59
+ customizationTool: "Anpassungswerkzeug",
60
+ quitLabel: "[Q] Beenden",
61
+ tabInstall: "Installieren",
62
+ tabSettings: "Einstellungen",
63
+ tabVoices: "Stimmen",
64
+ tabMusic: "Musik",
65
+ tabBmad: "BMad",
66
+ tabReceiver: "Empfänger",
67
+ tabReadme: "Liesmich",
68
+ tabHelp: "Hilfe",
69
+ subTabVoice: " [V] Stimme ",
70
+ subTabEffects: " [E] Effekte ",
71
+ subTabPersonality: " [P] Persönlichkeit ",
72
+ subTabOutput: " [O] Ausgabe ",
73
+ subTabLanguage: " [L] Sprache ",
74
+ sectionProviderVoice: " 🎤 Anbieter & Stimme ",
75
+ sectionAudioEffects: " ⚡ Audioeffekte ",
76
+ sectionBgMusic: " 🎸 Hintergrundmusik ",
77
+ sectionStyle: " 🎭 Stil ",
78
+ sectionIntroText: " ✍️ Einleitungstext ",
79
+ sectionAudioDest: " 📡 Audioziel ",
80
+ sectionConfigStorage: " 💾 Konfigurationsspeicher ",
81
+ sectionLanguage: " 🌐 Sprache ",
82
+ providerRowLabel: "Anbieter:",
83
+ currentVoiceLabel: "Aktuelle Stimme:",
84
+ reverbLabel: "Hall:",
85
+ trackLabel: "Titel:",
86
+ volumeLabel: "Lautstärke:",
87
+ verbosityLabel: "Ausführlichkeit:",
88
+ personalityLabel: "Persönlichkeit:",
89
+ introTextRowLabel: "Einleitungstext:",
90
+ destinationLabel: "Ziel:",
91
+ sshAliasLabel: "SSH-Alias:",
92
+ globalLabel: "Global:",
93
+ localLabel: "Lokal:",
94
+ languageLabel: "Sprache:",
95
+ switchBtn: "Wechseln",
96
+ changeBtn: "Ändern",
97
+ playBtn: "▶ Abspielen",
98
+ stopBtn: "■ Stop",
99
+ previewBtn: "▶ Vorschau",
100
+ fullPreviewBtn: "▶ Vollvorschau",
101
+ saveGloballyBtn: "Global Speichern",
102
+ saveLocallyBtn: "Lokal Speichern",
103
+ cancelChangesBtn: "Änderungen Verwerfen",
104
+ editBtn: "Bearbeiten",
105
+ clearBtn: "Löschen",
106
+ applyLanguageBtn: "✓ Sprache Anwenden",
107
+ enabledBtn: "Aktiviert",
108
+ disabledBtn: "Deaktiviert",
109
+ okSaveBtn: "OK — Speichern",
110
+ enableBtn: "Aktivieren",
111
+ streamingTextBtn: "Nur Text Streaming ✓",
112
+ streamingPulseBtn: "Pulse-Audio Streaming",
113
+ continueArrowBtn: "Weiter →",
114
+ acceptInstallBtn: "✓ Akzeptieren & Installieren",
115
+ okDoneBtn: "✓ OK — Fertig",
116
+ doneCustomizeBtn: "✓ Fertig - Mehr anpassen",
117
+ doneQuitBtn: "✕ Fertig - Beenden",
118
+ editInstallBtn: "Bearbeiten",
119
+ musicDisabledMsg: "Musik deaktiviert. Jetzt aktivieren?",
120
+ settingsFooter: "[↑↓] Gruppe [←→] Geschwister/Sub-Tab [Enter/Space] Aktivieren [Tab] Tab Wechseln [Q] Beenden",
121
+ voicesFooter: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Auswählen [F] Favorit [/] Suchen",
122
+ musicFooter: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Auswählen [M] Umschalten [*] Favorit [F] Filtern [Q] Beenden",
123
+ helpFooter: "[↑↓/jk] Scrollen [/] Suchen [PgUp/PgDn] Seite [S/V/M/A/R] Tab [Q] Beenden",
124
+ readmeFooter: "[↑↓/jk] Scrollen [PgUp/PgDn] Seite [/] Suchen [S/V/M/A/R] Tab [Q] Beenden",
125
+ receiverFooter: "SSH-Empfänger [Q] Beenden",
126
+ searchLabel: "Suchen:",
127
+ settingsSavedMsg: "Einstellungen Gespeichert",
128
+ changesRevertedMsg: "Änderungen zurückgesetzt",
129
+ musicBuiltInHeader: "── Eingebaute Tracks ",
130
+ musicStatusHeader: "── Musikstatus ",
131
+ musicStatusLabel: "Musik:",
132
+ musicActiveTrack: "Aktiver Track:",
133
+ musicFilterLabel: "Filter:",
134
+ musicFilterAll: "Alle",
135
+ musicFilterFavs: "Favoriten",
136
+ musicToggleBtn: "[Musik umschalten]",
137
+ musicAddCustomBtn: "[Eigenen Track hinzufügen]",
138
+ voicesHeader: "── Stimmen ",
139
+ voicesColName: "Name",
140
+ voicesColGender: "Geschlecht",
141
+ voicesColProvider: "Anbieter",
142
+ voicesInfoHeader: "── Stimmeninfo ",
143
+ voicesSwitchBtn: "[Stimme wechseln]",
144
+ voicesFavoriteBtn: "[★ Favorit]",
145
+ voicesDownloadBtn: "[Stimme herunterladen]",
146
+ voicesInstallAllBtn: "[BMAD-Stimmen installieren]",
147
+ voicesRowHintInstalled: "[Space] Vorschau [Enter] Auswählen [*] Favorit",
148
+ voicesRowHintUninstalled: "[Enter] Herunterladen und installieren",
149
+ musicRowHint: "[Space] Abspielen [Enter] Auswählen [*] Favorit",
150
+ musicHintText: "[Space] Vorschau [Enter] Track festlegen [*] Favorit",
151
+ genderFemale: "Weiblich",
152
+ genderMale: "Männlich",
153
+ voiceInfoVoice: "Stimme:",
154
+ voiceInfoGender: "Geschlecht:",
155
+ voiceInfoLanguage: "Sprache:",
156
+ voiceInfoQuality: "Qualität:",
157
+ voiceInfoProvider: "Anbieter:",
158
+ voiceInfoId: "ID:",
159
+ voiceInfoSpeaker: "Sprecher:",
160
+ voiceInfoModel: "Modell:",
161
+ voiceInfoSpeakerId: "Sprecher-ID:",
162
+ voiceInfoDownload: " [Enter] drücken zum Herunterladen und Installieren",
163
+ voicePlaying: "(wird abgespielt)",
164
+ bmadTitle: "🧙 BMAD-Agenten",
165
+ bmadWhatIsHeader: "Was ist BMAD?",
166
+ bmadDesc: "Die BMad-Methode (Build More Architect Dreams) ist ein KI-gesteuertes\nEntwicklungs-Framework-Modul, das Ihnen hilft, Software von der Ideenfindung\nbis zur agentischen Implementierung zu entwickeln. Es bietet spezialisierte\nKI-Agenten, geführte Workflows und intelligente Planung.\n\nWenn Sie mit KI-Codierassistenten wie Claude, Cursor oder GitHub Copilot\nvertraut sind, können Sie sofort loslegen.",
167
+ bmadInstallHeader: "BMAD in Ihrem Projekt installieren:",
168
+ bmadLearnMoreHeader: "Mehr erfahren:",
169
+ bmadInstalledNote: "Sobald BMAD installiert ist, zeigt dieser Tab alle Ihre Agenten an und\nermöglicht es Ihnen, Stimme, Prätext, Nachhall, Persönlichkeit und\nHintergrundmusik jedes Agenten unabhängig anzupassen.",
170
+ receiverWhatIsTitle: "Was ist SSH-Empfänger?",
171
+ receiverDesc: "Der SSH-Empfänger ermöglicht es Ihren Remote-Servern, über diese Maschine\nzu sprechen. Wenn ein KI-Assistent auf einem Remote-Server TTS-Audio\nabspielen muss, sendet er den Text per SSH an diese Maschine, die das\nAudio generiert und über Ihre Lautsprecher abspielt.\n\nEntfernter KI ──[SSH]──► Diese Maschine ──[piper+sox+ffmpeg]──► Ihre Lautsprecher",
172
+ helpSectionGlobal: "Globale Tastenkürzel",
173
+ helpSectionNavigation: "Navigationstastenkürzel",
174
+ helpSectionColors: "Tab-Farbführer",
175
+ helpQuit: "Konsole beenden",
176
+ helpForceQuit: "Erzwungenes Beenden",
177
+ helpSwitchSettings: "Zum Tab Einstellungen wechseln",
178
+ helpSwitchVoices: "Zum Tab Stimmen wechseln",
179
+ helpSwitchMusic: "Zum Tab Musik wechseln",
180
+ helpSwitchReadme: "Zum Tab Readme wechseln",
181
+ helpSwitchHelp: "Zum Tab Hilfe wechseln",
182
+ helpSwitchInstall: "Zum Tab Installieren wechseln",
183
+ helpCloseModal: "Modal schließen / zurück",
184
+ helpNavigateLists: "Listen navigieren",
185
+ helpSelectActivate: "Auswählen / aktivieren",
186
+ helpTogglePreview: "Umschalten / Vorschau",
187
+ helpNextButton: "Nächste Schaltfläche",
188
+ helpPrevButton: "Vorherige Schaltfläche",
189
+ helpOpenSearch: "Suche/Filter öffnen",
190
+ helpToggleFavFilter: "Favoritenfilter umschalten (Stimmen/Musik)",
191
+ helpToggleFav: "Favorit umschalten (Musik-Tab)",
192
+ helpToggleMusic: "Musik ein-/ausschalten (Musik-Tab)",
193
+ helpColorSettings: "Einstellungen-Tab-Fußzeile",
194
+ helpColorVoices: "Stimmen-Tab-Fußzeile",
195
+ helpColorMusic: "Musik-Tab-Fußzeile",
196
+ helpColorReadme: "Readme-Tab-Fußzeile",
197
+ helpColorHelp: "Hilfe-Tab-Fußzeile",
198
+ helpColorInstall: "Installieren-Tab-Fußzeile",
199
+ helpSearchLabel: "Suche:",
200
+ readmeScrollMore: " Scrollen für mehr Inhalt ",
201
+ readmeNotFound: "*(Keine README.md im aktuellen Verzeichnis gefunden)*",
202
+ bmadFooterNobmad: "[Tab] Tab wechseln [Q] Beenden",
203
+ bmadFooterBmad: "[↑↓/jk] Navigieren [Space] Vorschau [Enter] Konfigurieren [A] Auto-zuweisen [B] Stapel [X] Zurücksetzen [Q] Beenden",
204
+ };
package/src/i18n/en.js CHANGED
@@ -143,6 +143,7 @@ export default {
143
143
  voicesSwitchBtn: "[Switch Voice]",
144
144
  voicesFavoriteBtn: "[+ Thumbs Up]",
145
145
  voicesDownloadBtn: "[Download Voice]",
146
+ voicesInstallAllBtn: "[Install BMAD Voices]",
146
147
  voicesRowHintInstalled: "[Space] Preview [Enter] Select [+/*] Up [-] Down",
147
148
  voicesRowHintUninstalled: "[Enter] Download & Install",
148
149
  musicRowHint: "[Space] Play [Enter] Select [+/*] Favorite",