@nac3/forge-cli 0.2.0-alpha.31 → 0.2.0-alpha.33
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/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +260 -32
- package/dist/chat/panel.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/chat/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAs8ExD"}
|
package/dist/chat/panel.js
CHANGED
|
@@ -506,11 +506,25 @@ body {
|
|
|
506
506
|
<div class="t"><span class="name">Yujin Forge</span><span class="proj" id="proj-full" data-nac-id="yujin.panel.project-full"></span></div>
|
|
507
507
|
</div>
|
|
508
508
|
<div class="actions">
|
|
509
|
-
<button class="settings-btn"
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
509
|
+
<button class="settings-btn"
|
|
510
|
+
data-settings-toggle
|
|
511
|
+
data-nac-id="yujin.panel.settings"
|
|
512
|
+
data-nac-role="action"
|
|
513
|
+
data-nac-action="open_settings"
|
|
514
|
+
aria-label="ajustes"
|
|
515
|
+
title="Ajustes (modo voz, STT, TTS, claves, idioma)">⚙</button>
|
|
516
|
+
<button id="full-mini"
|
|
517
|
+
data-nac-id="yujin.panel.full-to-mini"
|
|
518
|
+
data-nac-role="action"
|
|
519
|
+
data-nac-action="minimize_panel"
|
|
520
|
+
aria-label="${escapeHtml(tr.minimiseButton)}"
|
|
521
|
+
title="${escapeHtml(tr.minimiseButton)}">▭</button>
|
|
522
|
+
<button id="full-close"
|
|
523
|
+
data-nac-id="yujin.panel.full-close"
|
|
524
|
+
data-nac-role="action"
|
|
525
|
+
data-nac-action="close_panel"
|
|
526
|
+
aria-label="${escapeHtml(tr.closeButton)}"
|
|
527
|
+
title="${escapeHtml(tr.closeButton)}">✕</button>
|
|
514
528
|
</div>
|
|
515
529
|
</div>
|
|
516
530
|
<!-- alpha.30: settings dropdown in topbar with editable
|
|
@@ -524,45 +538,66 @@ body {
|
|
|
524
538
|
<div class="set-row"><span class="set-lbl">STT</span>
|
|
525
539
|
<button type="button" data-stt-provider-btn class="set-btn">STT navegador</button>
|
|
526
540
|
</div>
|
|
527
|
-
<div class="set-row"><span class="set-lbl">
|
|
528
|
-
<button type="button" data-tts-
|
|
541
|
+
<div class="set-row"><span class="set-lbl">TTS engine</span>
|
|
542
|
+
<button type="button" data-tts-provider-btn class="set-btn">TTS navegador</button>
|
|
543
|
+
</div>
|
|
544
|
+
<div class="set-row"><span class="set-lbl">Voz TTS (solo Google)</span>
|
|
545
|
+
<button type="button" data-tts-voice-btn class="set-btn">es-ES-Studio-C</button>
|
|
529
546
|
</div>
|
|
530
547
|
</div>
|
|
531
548
|
<div class="set-section">
|
|
532
549
|
<div class="set-section-title">API keys (BYOK)</div>
|
|
533
550
|
<div class="set-key-row" data-key-slot="anthropic_api_key"><span class="set-lbl">Brain (Anthropic)</span>
|
|
534
|
-
<span class="set-status" data-key-status
|
|
551
|
+
<span class="set-status" data-key-status>--</span>
|
|
535
552
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
553
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
536
554
|
</div>
|
|
537
555
|
<div class="set-key-row" data-key-slot="openai_api_key"><span class="set-lbl">Brain (OpenAI)</span>
|
|
538
|
-
<span class="set-status" data-key-status
|
|
556
|
+
<span class="set-status" data-key-status>--</span>
|
|
539
557
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
558
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
540
559
|
</div>
|
|
541
560
|
<div class="set-key-row" data-key-slot="google_stt_key"><span class="set-lbl">STT Google</span>
|
|
542
|
-
<span class="set-status" data-key-status
|
|
561
|
+
<span class="set-status" data-key-status>--</span>
|
|
543
562
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
563
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
544
564
|
</div>
|
|
545
565
|
<div class="set-key-row" data-key-slot="google_tts_key"><span class="set-lbl">TTS Google</span>
|
|
546
|
-
<span class="set-status" data-key-status
|
|
566
|
+
<span class="set-status" data-key-status>--</span>
|
|
547
567
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
568
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
548
569
|
</div>
|
|
549
570
|
<div class="set-key-row" data-key-slot="elevenlabs_api_key"><span class="set-lbl">TTS ElevenLabs</span>
|
|
550
|
-
<span class="set-status" data-key-status
|
|
571
|
+
<span class="set-status" data-key-status>--</span>
|
|
551
572
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
573
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
552
574
|
</div>
|
|
553
575
|
<div class="set-key-row" data-key-slot="whisper_api_key"><span class="set-lbl">STT Whisper</span>
|
|
554
|
-
<span class="set-status" data-key-status
|
|
576
|
+
<span class="set-status" data-key-status>--</span>
|
|
555
577
|
<button type="button" class="set-btn" data-key-edit>Configurar</button>
|
|
578
|
+
<button type="button" class="set-btn set-btn-danger" data-key-clear hidden>Quitar</button>
|
|
579
|
+
</div>
|
|
580
|
+
</div>
|
|
581
|
+
<div class="set-section">
|
|
582
|
+
<div class="set-section-title">Idioma</div>
|
|
583
|
+
<div class="set-row"><span class="set-lbl">Panel + voz</span>
|
|
584
|
+
<button type="button" data-lang-open class="set-btn">${escapeHtml(tr.languageButton)} cambiar</button>
|
|
585
|
+
</div>
|
|
586
|
+
</div>
|
|
587
|
+
<div class="set-section">
|
|
588
|
+
<div class="set-section-title">Vault (encriptado)</div>
|
|
589
|
+
<div class="set-row"><span class="set-lbl">Slots</span>
|
|
590
|
+
<button type="button" data-vault-open class="set-btn">Abrir vault</button>
|
|
556
591
|
</div>
|
|
557
592
|
</div>
|
|
558
593
|
<div class="set-section">
|
|
559
594
|
<div class="set-section-title">License</div>
|
|
560
595
|
<div class="set-row"><span class="set-lbl">Plan</span>
|
|
561
|
-
<span class="set-status" id="set-license-status"
|
|
596
|
+
<span class="set-status" id="set-license-status">--</span>
|
|
562
597
|
</div>
|
|
563
598
|
<div class="set-row">
|
|
564
|
-
<a href="https://
|
|
565
|
-
target="_blank" rel="noopener" class="set-link">Comprar / activar plan
|
|
599
|
+
<a href="https://yujin.app/yujin-forge/"
|
|
600
|
+
target="_blank" rel="noopener" class="set-link">Comprar / activar plan</a>
|
|
566
601
|
</div>
|
|
567
602
|
</div>
|
|
568
603
|
<!-- inline edit form (single, repositioned over the active key row) -->
|
|
@@ -1096,6 +1131,35 @@ let recordingPanelButton = null;
|
|
|
1096
1131
|
let _lastInputWasVoice = false;
|
|
1097
1132
|
let _lastVoiceButton = null;
|
|
1098
1133
|
|
|
1134
|
+
/* TTS provider selector (alpha.31+). Per Pablo: probar TTS
|
|
1135
|
+
* del navegador para descartar Google. Browser uses
|
|
1136
|
+
* window.speechSynthesis with native OS voices (Edge ships
|
|
1137
|
+
* Microsoft Neural voices on Windows; Chrome ships its own).
|
|
1138
|
+
* 'google' = our server-side /api/voice/tts path. */
|
|
1139
|
+
const TTS_PROVIDER_KEY = 'yf-tts-provider';
|
|
1140
|
+
function ttsProvider() {
|
|
1141
|
+
try {
|
|
1142
|
+
const v = localStorage.getItem(TTS_PROVIDER_KEY);
|
|
1143
|
+
if (v === 'google' || v === 'browser') return v;
|
|
1144
|
+
} catch (_) {}
|
|
1145
|
+
return 'browser'; /* default: navegador (descarta Google) */
|
|
1146
|
+
}
|
|
1147
|
+
function setTtsProvider(p) {
|
|
1148
|
+
try { localStorage.setItem(TTS_PROVIDER_KEY, p); } catch (_) {}
|
|
1149
|
+
updateTtsProviderButtons();
|
|
1150
|
+
}
|
|
1151
|
+
function cycleTtsProvider() {
|
|
1152
|
+
setTtsProvider(ttsProvider() === 'browser' ? 'google' : 'browser');
|
|
1153
|
+
}
|
|
1154
|
+
function updateTtsProviderButtons() {
|
|
1155
|
+
const p = ttsProvider();
|
|
1156
|
+
document.querySelectorAll('[data-tts-provider-btn]').forEach((b) => {
|
|
1157
|
+
b.textContent = p === 'browser' ? 'TTS navegador' : 'TTS Google';
|
|
1158
|
+
b.title = 'Click para alternar entre navegador (SpeechSynthesis '
|
|
1159
|
+
+ 'nativo, voces del SO) y Google Cloud TTS (server-side).';
|
|
1160
|
+
});
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1099
1163
|
/* STT provider selector (alpha.28+). Default 'browser' = Web
|
|
1100
1164
|
* Speech API (instant, free, native es-AR). 'google' = our
|
|
1101
1165
|
* existing MediaRecorder + Google Cloud STT REST path. 'whisper'
|
|
@@ -1187,31 +1251,109 @@ function updateTtsVoiceButtons() {
|
|
|
1187
1251
|
});
|
|
1188
1252
|
}
|
|
1189
1253
|
|
|
1190
|
-
/* Keys status fetcher
|
|
1191
|
-
*
|
|
1254
|
+
/* alpha.32 -- Keys + license status fetcher. Updates EACH row
|
|
1255
|
+
* in the settings panel with check/cross and shows/hides the
|
|
1256
|
+
* "Quitar" button accordingly. License row separately. */
|
|
1192
1257
|
async function refreshKeysStatus() {
|
|
1193
|
-
const
|
|
1194
|
-
if (
|
|
1195
|
-
el.textContent = 'cargando...';
|
|
1258
|
+
const licEl = document.getElementById('set-license-status');
|
|
1259
|
+
if (licEl) licEl.textContent = '...';
|
|
1196
1260
|
try {
|
|
1197
1261
|
const r = await fetch('/api/forge/keys-status');
|
|
1198
1262
|
const data = await r.json();
|
|
1199
1263
|
if (!r.ok || !data.ok) {
|
|
1200
|
-
|
|
1264
|
+
if (licEl) licEl.textContent = 'error: ' + (data.error || r.status);
|
|
1201
1265
|
return;
|
|
1202
1266
|
}
|
|
1203
1267
|
const k = data.keys || {};
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1268
|
+
/* Per-row updates. data-key-slot on the row determines
|
|
1269
|
+
* which boolean we read. */
|
|
1270
|
+
document.querySelectorAll('[data-key-slot]').forEach((row) => {
|
|
1271
|
+
const slot = row.getAttribute('data-key-slot');
|
|
1272
|
+
const isSet = !!k[slot];
|
|
1273
|
+
const stEl = row.querySelector('[data-key-status]');
|
|
1274
|
+
if (stEl) {
|
|
1275
|
+
stEl.textContent = isSet ? '✓' : '✗';
|
|
1276
|
+
stEl.style.color = isSet ? '#6dff8b' : '#ff8b7a';
|
|
1277
|
+
}
|
|
1278
|
+
const editBtn = row.querySelector('[data-key-edit]');
|
|
1279
|
+
if (editBtn) editBtn.textContent = isSet ? 'Cambiar' : 'Configurar';
|
|
1280
|
+
const clrBtn = row.querySelector('[data-key-clear]');
|
|
1281
|
+
if (clrBtn) clrBtn.hidden = !isSet;
|
|
1282
|
+
});
|
|
1283
|
+
if (licEl) {
|
|
1284
|
+
const plan = data.license_plan || 'none';
|
|
1285
|
+
licEl.textContent = plan;
|
|
1286
|
+
licEl.style.color = (plan === 'paid' || plan === 'institutional') ? '#6dff8b' : '#ff8b7a';
|
|
1287
|
+
}
|
|
1210
1288
|
} catch (err) {
|
|
1211
|
-
|
|
1289
|
+
if (licEl) licEl.textContent = 'error: ' + (err && err.message ? err.message : 'unknown');
|
|
1212
1290
|
}
|
|
1213
1291
|
}
|
|
1214
1292
|
|
|
1293
|
+
/* alpha.32 -- inline key editor: opens, saves, clears. */
|
|
1294
|
+
let _keyEditorSlot = '';
|
|
1295
|
+
function openKeyEditor(slot) {
|
|
1296
|
+
_keyEditorSlot = slot;
|
|
1297
|
+
const ed = document.getElementById('yf-key-editor');
|
|
1298
|
+
const name = document.getElementById('ke-slot-name');
|
|
1299
|
+
const input = document.getElementById('ke-input');
|
|
1300
|
+
const msg = document.getElementById('ke-msg');
|
|
1301
|
+
if (!ed || !name || !input || !msg) return;
|
|
1302
|
+
name.textContent = slot;
|
|
1303
|
+
input.value = '';
|
|
1304
|
+
msg.textContent = '';
|
|
1305
|
+
msg.className = 'ke-msg';
|
|
1306
|
+
ed.classList.remove('hidden');
|
|
1307
|
+
input.focus();
|
|
1308
|
+
}
|
|
1309
|
+
function closeKeyEditor() {
|
|
1310
|
+
const ed = document.getElementById('yf-key-editor');
|
|
1311
|
+
if (ed) ed.classList.add('hidden');
|
|
1312
|
+
_keyEditorSlot = '';
|
|
1313
|
+
}
|
|
1314
|
+
async function saveKeyEditor() {
|
|
1315
|
+
const input = document.getElementById('ke-input');
|
|
1316
|
+
const msg = document.getElementById('ke-msg');
|
|
1317
|
+
if (!input || !msg || !_keyEditorSlot) return;
|
|
1318
|
+
const value = input.value.trim();
|
|
1319
|
+
if (value.length < 8) {
|
|
1320
|
+
msg.textContent = 'Key demasiado corta (min 8 chars).';
|
|
1321
|
+
msg.className = 'ke-msg error';
|
|
1322
|
+
return;
|
|
1323
|
+
}
|
|
1324
|
+
msg.textContent = 'Guardando...';
|
|
1325
|
+
msg.className = 'ke-msg';
|
|
1326
|
+
try {
|
|
1327
|
+
const r = await fetch('/api/forge/keys-set', {
|
|
1328
|
+
method: 'POST',
|
|
1329
|
+
headers: { 'content-type': 'application/json' },
|
|
1330
|
+
body: JSON.stringify({ slot: _keyEditorSlot, value }),
|
|
1331
|
+
});
|
|
1332
|
+
const data = await r.json();
|
|
1333
|
+
if (!r.ok || !data.ok) {
|
|
1334
|
+
msg.textContent = 'Error: ' + (data.error || r.status);
|
|
1335
|
+
msg.className = 'ke-msg error';
|
|
1336
|
+
return;
|
|
1337
|
+
}
|
|
1338
|
+
msg.textContent = 'Guardado.';
|
|
1339
|
+
msg.className = 'ke-msg success';
|
|
1340
|
+
setTimeout(() => { closeKeyEditor(); refreshKeysStatus(); }, 600);
|
|
1341
|
+
} catch (err) {
|
|
1342
|
+
msg.textContent = 'Error: ' + (err && err.message ? err.message : 'unknown');
|
|
1343
|
+
msg.className = 'ke-msg error';
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
async function clearKey(slot) {
|
|
1347
|
+
try {
|
|
1348
|
+
const r = await fetch('/api/forge/keys-set', {
|
|
1349
|
+
method: 'POST',
|
|
1350
|
+
headers: { 'content-type': 'application/json' },
|
|
1351
|
+
body: JSON.stringify({ slot, value: '' }),
|
|
1352
|
+
});
|
|
1353
|
+
if (r.ok) refreshKeysStatus();
|
|
1354
|
+
} catch (_) {}
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1215
1357
|
function voiceMode() {
|
|
1216
1358
|
/* Default 'mic' = push-to-talk (preserves pre-2026-05-31 UX). */
|
|
1217
1359
|
try {
|
|
@@ -1616,7 +1758,13 @@ function splitIntoTtsChunks(text, opts) {
|
|
|
1616
1758
|
opts = opts || {};
|
|
1617
1759
|
const maxLen = Math.max(40, opts.maxLen || _CHUNK_DEFAULT_MAX_LEN);
|
|
1618
1760
|
const semiBreak = Math.max(40, opts.semicolonBreakAtLen || _CHUNK_DEFAULT_SEMI_BREAK);
|
|
1619
|
-
|
|
1761
|
+
/* CRITICAL: this regex MUST stay '\\s+' (double-escaped). The
|
|
1762
|
+
* panel.ts source is itself a template literal embedded in the
|
|
1763
|
+
* server; TS serialises '\s' (single backslash) as the literal
|
|
1764
|
+
* char 's', producing /s+/g which gobbles every lowercase 's'
|
|
1765
|
+
* in the user's text. Bug shipped from V1.24 (pre-alpha.6) to
|
|
1766
|
+
* alpha.32. Fix in alpha.33. Verified by reading served HTML. */
|
|
1767
|
+
const trimmed = String(text || '').replace(/\\s+/g, ' ').trim();
|
|
1620
1768
|
if (!trimmed) return [];
|
|
1621
1769
|
const chunks = [];
|
|
1622
1770
|
let buf = '';
|
|
@@ -1644,8 +1792,10 @@ function splitIntoTtsChunks(text, opts) {
|
|
|
1644
1792
|
const next = trimmed.charAt(i + 1);
|
|
1645
1793
|
if (next === '' || next === ' ') {
|
|
1646
1794
|
if (ch === '.' && _chunkIsAbbrevBefore(trimmed, i)) { i += 1; continue; }
|
|
1647
|
-
|
|
1648
|
-
|
|
1795
|
+
/* Same template-literal escape rule as the \\s+ trap on
|
|
1796
|
+
* line ~1782: \d must stay \\d to survive serialisation. */
|
|
1797
|
+
if (ch === '.' && /\\d/.test(trimmed.charAt(i - 1) || '')
|
|
1798
|
+
&& /\\d/.test(trimmed.charAt(i + 1) || '')) { i += 1; continue; }
|
|
1649
1799
|
i += 1;
|
|
1650
1800
|
if (trimmed.charAt(i) === ' ') i += 1;
|
|
1651
1801
|
flush();
|
|
@@ -1940,6 +2090,40 @@ async function _micToggleWebSpeech(button) {
|
|
|
1940
2090
|
}
|
|
1941
2091
|
}
|
|
1942
2092
|
|
|
2093
|
+
/* alpha.31 -- TTS via the browser's SpeechSynthesis API.
|
|
2094
|
+
* Per Pablo: 'hagamos opcional el TTS del navegador asi
|
|
2095
|
+
* descartamos Google'. Uses OS-native voices (Edge ships
|
|
2096
|
+
* Microsoft Neural voices, Chrome ships Google's). If the
|
|
2097
|
+
* browser articulates 's' clearly, the audio dropout in the
|
|
2098
|
+
* Google path is Google-side (or our request shape). */
|
|
2099
|
+
function _speakBrowser(text, langHint) {
|
|
2100
|
+
return new Promise((resolve) => {
|
|
2101
|
+
if (typeof window === 'undefined' || !window.speechSynthesis) {
|
|
2102
|
+
setStatus('Browser TTS not available; switch back to Google in settings.', true);
|
|
2103
|
+
resolve();
|
|
2104
|
+
return;
|
|
2105
|
+
}
|
|
2106
|
+
const utt = new SpeechSynthesisUtterance(text);
|
|
2107
|
+
/* Pick a voice that matches lang, preferring es-* exact then
|
|
2108
|
+
* any es- fallback. */
|
|
2109
|
+
const voices = window.speechSynthesis.getVoices();
|
|
2110
|
+
const target = (langHint || 'es-ES').toLowerCase();
|
|
2111
|
+
let match = voices.find((v) => v.lang.toLowerCase() === target);
|
|
2112
|
+
if (!match) {
|
|
2113
|
+
const base = target.split('-')[0];
|
|
2114
|
+
match = voices.find((v) => v.lang.toLowerCase().startsWith(base + '-'));
|
|
2115
|
+
}
|
|
2116
|
+
if (match) utt.voice = match;
|
|
2117
|
+
utt.lang = match ? match.lang : (langHint || 'es-ES');
|
|
2118
|
+
utt.rate = 1.0;
|
|
2119
|
+
utt.pitch = 1.0;
|
|
2120
|
+
utt.onend = () => resolve();
|
|
2121
|
+
utt.onerror = () => resolve();
|
|
2122
|
+
window.speechSynthesis.cancel();
|
|
2123
|
+
window.speechSynthesis.speak(utt);
|
|
2124
|
+
});
|
|
2125
|
+
}
|
|
2126
|
+
|
|
1943
2127
|
async function playTtsForText(text) {
|
|
1944
2128
|
text = cleanForTts(text);
|
|
1945
2129
|
if (!ttsRepliesEnabled()) return;
|
|
@@ -1951,6 +2135,22 @@ async function playTtsForText(text) {
|
|
|
1951
2135
|
to keyboard mid-conversation and the auto-reopen stops. */
|
|
1952
2136
|
_lastInputWasVoice = false;
|
|
1953
2137
|
const reopenBtn = _lastVoiceButton;
|
|
2138
|
+
/* Branch on provider. Browser path bypasses Google entirely. */
|
|
2139
|
+
if (ttsProvider() === 'browser') {
|
|
2140
|
+
try {
|
|
2141
|
+
const lang = (document && document.documentElement && document.documentElement.lang)
|
|
2142
|
+
? document.documentElement.lang : 'es-ES';
|
|
2143
|
+
await _speakBrowser(text, lang);
|
|
2144
|
+
} finally {
|
|
2145
|
+
if (wasVoiceTurn && reopenBtn && voiceMode() === 'auricular') {
|
|
2146
|
+
setTimeout(() => {
|
|
2147
|
+
if (mediaRecorder && mediaRecorder.state === 'recording') return;
|
|
2148
|
+
try { micToggle(reopenBtn); } catch (_) {}
|
|
2149
|
+
}, 200);
|
|
2150
|
+
}
|
|
2151
|
+
}
|
|
2152
|
+
return;
|
|
2153
|
+
}
|
|
1954
2154
|
const chunks = splitIntoTtsChunks(text);
|
|
1955
2155
|
if (chunks.length === 0) return;
|
|
1956
2156
|
try {
|
|
@@ -2150,6 +2350,34 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2150
2350
|
/* TTS voice cycle. */
|
|
2151
2351
|
$$('[data-tts-voice-btn]').forEach((b) => b.addEventListener('click', cycleTtsVoice));
|
|
2152
2352
|
updateTtsVoiceButtons();
|
|
2353
|
+
/* TTS provider cycle (alpha.31). */
|
|
2354
|
+
$$('[data-tts-provider-btn]').forEach((b) => b.addEventListener('click', cycleTtsProvider));
|
|
2355
|
+
updateTtsProviderButtons();
|
|
2356
|
+
/* alpha.32 -- Key editor wiring. Each row's "Configurar" /
|
|
2357
|
+
"Cambiar" button opens the editor; "Quitar" clears. */
|
|
2358
|
+
$$('[data-key-edit]').forEach((b) => b.addEventListener('click', (e) => {
|
|
2359
|
+
const row = e.currentTarget.closest('[data-key-slot]');
|
|
2360
|
+
if (!row) return;
|
|
2361
|
+
openKeyEditor(row.getAttribute('data-key-slot'));
|
|
2362
|
+
}));
|
|
2363
|
+
$$('[data-key-clear]').forEach((b) => b.addEventListener('click', (e) => {
|
|
2364
|
+
const row = e.currentTarget.closest('[data-key-slot]');
|
|
2365
|
+
if (!row) return;
|
|
2366
|
+
if (confirm('Quitar la key de ' + row.getAttribute('data-key-slot') + '?')) {
|
|
2367
|
+
clearKey(row.getAttribute('data-key-slot'));
|
|
2368
|
+
}
|
|
2369
|
+
}));
|
|
2370
|
+
const keSave = $('#ke-save');
|
|
2371
|
+
const keCancel = $('#ke-cancel');
|
|
2372
|
+
const keClear = $('#ke-clear');
|
|
2373
|
+
if (keSave) keSave.addEventListener('click', saveKeyEditor);
|
|
2374
|
+
if (keCancel) keCancel.addEventListener('click', closeKeyEditor);
|
|
2375
|
+
if (keClear) keClear.addEventListener('click', () => {
|
|
2376
|
+
if (_keyEditorSlot && confirm('Quitar la key de ' + _keyEditorSlot + '?')) {
|
|
2377
|
+
clearKey(_keyEditorSlot);
|
|
2378
|
+
closeKeyEditor();
|
|
2379
|
+
}
|
|
2380
|
+
});
|
|
2153
2381
|
setMicButtonsState('idle');
|
|
2154
2382
|
updateTtsToggleButtons();
|
|
2155
2383
|
|
package/dist/chat/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nac3/forge-cli",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.33",
|
|
4
4
|
"description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pablo Kuschnirof <pablo@rpaforce.com>",
|