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.
- package/.agentvibes/config.json +17 -12
- package/.agentvibes/install-manifest.json +98 -86
- package/.claude/audio/ui/CREDITS.txt +16 -0
- package/.claude/audio/ui/bling-success.wav +0 -0
- package/.claude/commands/agent-vibes/receiver.md +64 -0
- package/.claude/config/audio-effects.cfg +3 -3
- package/.claude/config/personality.txt +1 -0
- package/.claude/config/reverb-level.txt +1 -1
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/audio-processor.sh +57 -18
- package/.claude/hooks/kokoro-installer.sh +117 -0
- package/.claude/hooks/kokoro-server.py +219 -0
- package/.claude/hooks/kokoro-tts.py +141 -0
- package/.claude/hooks/piper-download-voices.sh +39 -16
- package/.claude/hooks/piper-installer.sh +11 -6
- package/.claude/hooks/piper-voice-manager.sh +6 -6
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +3 -1
- package/.claude/hooks/play-tts-elevenlabs.sh +360 -0
- package/.claude/hooks/play-tts-kokoro.sh +127 -0
- package/.claude/hooks/play-tts-piper.sh +20 -13
- package/.claude/hooks/play-tts-ssh-remote.sh +9 -2
- package/.claude/hooks/play-tts-termux-ssh.sh +3 -1
- package/.claude/hooks/play-tts.sh +78 -2
- package/.claude/hooks/provider-commands.sh +71 -22
- package/.claude/hooks/provider-manager.sh +15 -7
- package/.claude/hooks/voice-manager.sh +6 -0
- package/.claude/hooks-windows/kokoro-server.py +219 -0
- package/.claude/hooks-windows/kokoro-tts.py +107 -0
- package/.claude/hooks-windows/play-tts-kokoro.ps1 +191 -0
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +22 -16
- package/.claude/hooks-windows/play-tts.ps1 +29 -1
- package/README.md +12 -86
- package/RELEASE_NOTES.md +60 -0
- package/mcp-server/server.py +17 -7
- package/package.json +4 -3
- package/src/commands/install-mcp.js +730 -476
- package/src/console/app.js +28 -12
- package/src/console/audio-env.js +85 -1
- package/src/console/navigation.js +4 -0
- package/src/console/tabs/agents-tab.js +18 -12
- package/src/console/tabs/music-tab.js +7 -25
- package/src/console/tabs/receiver-tab.js +13 -13
- package/src/console/tabs/settings-tab.js +2 -2
- package/src/console/tabs/setup-tab.js +1708 -124
- package/src/console/tabs/voices-tab.js +76 -92
- package/src/console/widgets/format-utils.js +14 -2
- package/src/console/widgets/help-bar.js +55 -0
- package/src/console/widgets/personality-picker.js +2 -2
- package/src/console/widgets/reverb-picker.js +429 -41
- package/src/console/widgets/track-picker.js +60 -51
- package/src/i18n/de.js +204 -203
- package/src/i18n/en.js +1 -0
- package/src/i18n/es.js +204 -203
- package/src/i18n/fr.js +204 -203
- package/src/i18n/hi.js +204 -203
- package/src/i18n/ja.js +204 -203
- package/src/i18n/ko.js +204 -203
- package/src/i18n/pt.js +204 -203
- package/src/i18n/strings.js +54 -54
- package/src/i18n/zh-CN.js +204 -203
- package/src/installer.js +127 -34
- package/src/services/provider-service.js +178 -143
- package/src/services/provider-voice-catalog.js +126 -0
- package/src/services/tts-engine-service.js +53 -4
- package/src/utils/audio-duration-validator.js +341 -298
- package/src/utils/list-formatter.js +200 -194
- package/src/utils/platform-resolver.js +369 -0
- package/src/utils/preview-list-prompt.js +8 -0
- package/src/utils/provider-validator.js +79 -9
- 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,
|
|
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
|
-
|
|
176
|
-
|
|
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:
|
|
189
|
+
height: boxHeight,
|
|
182
190
|
border: { type: 'line' },
|
|
183
191
|
tags: true,
|
|
184
|
-
label:
|
|
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
|
-
//
|
|
199
|
-
function
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (!
|
|
256
|
-
|
|
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
|
-
|
|
264
|
-
|
|
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
|
-
|
|
280
|
+
_setStatus(` {bright-cyan-fg}♪ ${label} (Space to stop){/bright-cyan-fg} `);
|
|
270
281
|
|
|
271
|
-
|
|
282
|
+
proc.on('exit', () => {
|
|
272
283
|
if (_previewTrackId === trackFile) {
|
|
273
284
|
_previewTrackId = null;
|
|
274
285
|
_previewProc = null;
|
|
275
|
-
|
|
286
|
+
_setStatus();
|
|
276
287
|
}
|
|
277
288
|
});
|
|
278
289
|
|
|
279
|
-
|
|
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(
|
|
300
|
+
destroyList(box, screen, onClose);
|
|
291
301
|
} else {
|
|
292
|
-
destroyList(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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",
|