agentvibes 5.11.1 → 5.11.2-beta.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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "agentvibes",
|
|
4
|
-
"version": "5.11.
|
|
4
|
+
"version": "5.11.2-beta.0",
|
|
5
5
|
"description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code, Claude Desktop (via MCP), and Clawdbot with multi-provider support.",
|
|
6
6
|
"homepage": "https://agentvibes.org",
|
|
7
7
|
"keywords": [
|
|
@@ -3009,7 +3009,21 @@ export function createSetupTab(screen, services) {
|
|
|
3009
3009
|
iMod.key(['escape'], cancelInstall);
|
|
3010
3010
|
screen.render();
|
|
3011
3011
|
|
|
3012
|
-
|
|
3012
|
+
// PEP 668: modern Ubuntu/Debian mark the system Python "externally
|
|
3013
|
+
// managed", so a bare `pip install` fails with
|
|
3014
|
+
// "error: externally-managed-environment" — which is exactly why the
|
|
3015
|
+
// Kokoro deps never install on a fresh server. Detect the marker and add
|
|
3016
|
+
// --break-system-packages so the install actually proceeds. (The marker
|
|
3017
|
+
// only exists on pip ≥ 23.0, which is also where the flag exists.)
|
|
3018
|
+
let _pep668Args = [];
|
|
3019
|
+
try {
|
|
3020
|
+
const _chk = spawnSync(_pythonCmd, ['-c', // NOSONAR
|
|
3021
|
+
"import sysconfig,os;print('1' if os.path.exists(os.path.join(sysconfig.get_path('stdlib'),'EXTERNALLY-MANAGED')) else '0')"],
|
|
3022
|
+
{ encoding: 'utf8', timeout: 4000 });
|
|
3023
|
+
if ((_chk.stdout || '').trim() === '1') _pep668Args = ['--break-system-packages'];
|
|
3024
|
+
} catch { /* fall back to a plain install */ }
|
|
3025
|
+
|
|
3026
|
+
_installProc = spawn(_pythonCmd, ['-m', 'pip', 'install', '--progress-bar', 'on', ..._pep668Args, ...pkg.split(/\s+/)], { // NOSONAR
|
|
3013
3027
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
3014
3028
|
});
|
|
3015
3029
|
|
|
@@ -3075,9 +3089,11 @@ export function createSetupTab(screen, services) {
|
|
|
3075
3089
|
const allOut = _pipBuf + _pipErrBuf;
|
|
3076
3090
|
const needsDev = /Python\.h|python3-dev/i.test(allOut);
|
|
3077
3091
|
const needsCmake = /cmake not found|cmake.*required/i.test(allOut);
|
|
3092
|
+
const extManaged = /externally-managed-environment/i.test(allOut);
|
|
3078
3093
|
let hint;
|
|
3079
3094
|
if (needsDev) hint = ` {yellow-fg}Fix:{/yellow-fg} {cyan-fg}sudo apt install python3-dev build-essential{/cyan-fg}`;
|
|
3080
3095
|
else if (needsCmake) hint = ` {yellow-fg}Fix:{/yellow-fg} {cyan-fg}sudo apt install cmake{/cyan-fg}`;
|
|
3096
|
+
else if (extManaged) hint = ` {yellow-fg}Fix:{/yellow-fg} {cyan-fg}${_pythonCmd} -m pip install --break-system-packages ${pkg}{/cyan-fg}`;
|
|
3081
3097
|
else hint = ` {#9e9e9e-fg}Run {/#9e9e9e-fg}{cyan-fg}pip install ${pkg}{/cyan-fg}{#9e9e9e-fg} in a terminal to see the error.{/#9e9e9e-fg}`;
|
|
3082
3098
|
iMod.setLabel(` {red-fg}✗ Install Failed{/red-fg} `);
|
|
3083
3099
|
iMod.style.border.fg = 'red';
|
|
@@ -3487,6 +3503,16 @@ export function createSetupTab(screen, services) {
|
|
|
3487
3503
|
let _dlAllProc = null;
|
|
3488
3504
|
kPicker.key(['d', 'D'], () => {
|
|
3489
3505
|
if (_kPreviewProc || _dlAllActive) return;
|
|
3506
|
+
// Without the kokoro package every "download" (a synthesis that pulls the
|
|
3507
|
+
// .pt file) fails, so prompt to install the engine first instead of
|
|
3508
|
+
// grinding through the whole list and falsely reporting success.
|
|
3509
|
+
if (!_kokoroInstalled) {
|
|
3510
|
+
_promptInstallPkg('kokoro soundfile numpy', 'Kokoro TTS engine', voices[kPicker.selected] ?? voices[0], () => {
|
|
3511
|
+
_kokoroInstalled = true;
|
|
3512
|
+
voices.forEach((v, i) => kPicker.setItem(i, _kokoroItem(v)));
|
|
3513
|
+
});
|
|
3514
|
+
return;
|
|
3515
|
+
}
|
|
3490
3516
|
const toDownload = voices.filter(v => !cached.has(v));
|
|
3491
3517
|
if (!toDownload.length) {
|
|
3492
3518
|
kBox.setLabel(` {green-fg}✓ All ${voices.length} voices already cached{/green-fg} `);
|
|
@@ -3503,8 +3529,15 @@ export function createSetupTab(screen, services) {
|
|
|
3503
3529
|
_dlAllProc = null;
|
|
3504
3530
|
if (!_kClosed) {
|
|
3505
3531
|
const total = voices.filter(v => cached.has(v)).length;
|
|
3506
|
-
|
|
3507
|
-
|
|
3532
|
+
const got = toDownload.filter(v => cached.has(v)).length;
|
|
3533
|
+
// Only claim success if voices actually cached. If nothing downloaded
|
|
3534
|
+
// (e.g. kokoro/misaki missing), say so instead of a false green ✓.
|
|
3535
|
+
if (got > 0) {
|
|
3536
|
+
kBox.setLabel(` {green-fg}✓ Download complete — ${total}/${voices.length} cached{/green-fg} `);
|
|
3537
|
+
} else {
|
|
3538
|
+
kBox.setLabel(` {yellow-fg}⚠ Nothing downloaded — install deps: ${_pythonCmd} -m pip install --break-system-packages kokoro soundfile{/yellow-fg} `);
|
|
3539
|
+
}
|
|
3540
|
+
setTimeout(() => { if (!_kClosed) { kBox.setLabel(IDLE_LABEL); screen.render(); } }, got > 0 ? 3000 : 6000);
|
|
3508
3541
|
screen.render();
|
|
3509
3542
|
}
|
|
3510
3543
|
return;
|