@nac3/forge-cli 0.2.0-alpha.31 → 0.2.0-alpha.32
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 +249 -29
- 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,CA87ExD"}
|
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 {
|
|
@@ -1940,6 +2082,40 @@ async function _micToggleWebSpeech(button) {
|
|
|
1940
2082
|
}
|
|
1941
2083
|
}
|
|
1942
2084
|
|
|
2085
|
+
/* alpha.31 -- TTS via the browser's SpeechSynthesis API.
|
|
2086
|
+
* Per Pablo: 'hagamos opcional el TTS del navegador asi
|
|
2087
|
+
* descartamos Google'. Uses OS-native voices (Edge ships
|
|
2088
|
+
* Microsoft Neural voices, Chrome ships Google's). If the
|
|
2089
|
+
* browser articulates 's' clearly, the audio dropout in the
|
|
2090
|
+
* Google path is Google-side (or our request shape). */
|
|
2091
|
+
function _speakBrowser(text, langHint) {
|
|
2092
|
+
return new Promise((resolve) => {
|
|
2093
|
+
if (typeof window === 'undefined' || !window.speechSynthesis) {
|
|
2094
|
+
setStatus('Browser TTS not available; switch back to Google in settings.', true);
|
|
2095
|
+
resolve();
|
|
2096
|
+
return;
|
|
2097
|
+
}
|
|
2098
|
+
const utt = new SpeechSynthesisUtterance(text);
|
|
2099
|
+
/* Pick a voice that matches lang, preferring es-* exact then
|
|
2100
|
+
* any es- fallback. */
|
|
2101
|
+
const voices = window.speechSynthesis.getVoices();
|
|
2102
|
+
const target = (langHint || 'es-ES').toLowerCase();
|
|
2103
|
+
let match = voices.find((v) => v.lang.toLowerCase() === target);
|
|
2104
|
+
if (!match) {
|
|
2105
|
+
const base = target.split('-')[0];
|
|
2106
|
+
match = voices.find((v) => v.lang.toLowerCase().startsWith(base + '-'));
|
|
2107
|
+
}
|
|
2108
|
+
if (match) utt.voice = match;
|
|
2109
|
+
utt.lang = match ? match.lang : (langHint || 'es-ES');
|
|
2110
|
+
utt.rate = 1.0;
|
|
2111
|
+
utt.pitch = 1.0;
|
|
2112
|
+
utt.onend = () => resolve();
|
|
2113
|
+
utt.onerror = () => resolve();
|
|
2114
|
+
window.speechSynthesis.cancel();
|
|
2115
|
+
window.speechSynthesis.speak(utt);
|
|
2116
|
+
});
|
|
2117
|
+
}
|
|
2118
|
+
|
|
1943
2119
|
async function playTtsForText(text) {
|
|
1944
2120
|
text = cleanForTts(text);
|
|
1945
2121
|
if (!ttsRepliesEnabled()) return;
|
|
@@ -1951,6 +2127,22 @@ async function playTtsForText(text) {
|
|
|
1951
2127
|
to keyboard mid-conversation and the auto-reopen stops. */
|
|
1952
2128
|
_lastInputWasVoice = false;
|
|
1953
2129
|
const reopenBtn = _lastVoiceButton;
|
|
2130
|
+
/* Branch on provider. Browser path bypasses Google entirely. */
|
|
2131
|
+
if (ttsProvider() === 'browser') {
|
|
2132
|
+
try {
|
|
2133
|
+
const lang = (document && document.documentElement && document.documentElement.lang)
|
|
2134
|
+
? document.documentElement.lang : 'es-ES';
|
|
2135
|
+
await _speakBrowser(text, lang);
|
|
2136
|
+
} finally {
|
|
2137
|
+
if (wasVoiceTurn && reopenBtn && voiceMode() === 'auricular') {
|
|
2138
|
+
setTimeout(() => {
|
|
2139
|
+
if (mediaRecorder && mediaRecorder.state === 'recording') return;
|
|
2140
|
+
try { micToggle(reopenBtn); } catch (_) {}
|
|
2141
|
+
}, 200);
|
|
2142
|
+
}
|
|
2143
|
+
}
|
|
2144
|
+
return;
|
|
2145
|
+
}
|
|
1954
2146
|
const chunks = splitIntoTtsChunks(text);
|
|
1955
2147
|
if (chunks.length === 0) return;
|
|
1956
2148
|
try {
|
|
@@ -2150,6 +2342,34 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2150
2342
|
/* TTS voice cycle. */
|
|
2151
2343
|
$$('[data-tts-voice-btn]').forEach((b) => b.addEventListener('click', cycleTtsVoice));
|
|
2152
2344
|
updateTtsVoiceButtons();
|
|
2345
|
+
/* TTS provider cycle (alpha.31). */
|
|
2346
|
+
$$('[data-tts-provider-btn]').forEach((b) => b.addEventListener('click', cycleTtsProvider));
|
|
2347
|
+
updateTtsProviderButtons();
|
|
2348
|
+
/* alpha.32 -- Key editor wiring. Each row's "Configurar" /
|
|
2349
|
+
"Cambiar" button opens the editor; "Quitar" clears. */
|
|
2350
|
+
$$('[data-key-edit]').forEach((b) => b.addEventListener('click', (e) => {
|
|
2351
|
+
const row = e.currentTarget.closest('[data-key-slot]');
|
|
2352
|
+
if (!row) return;
|
|
2353
|
+
openKeyEditor(row.getAttribute('data-key-slot'));
|
|
2354
|
+
}));
|
|
2355
|
+
$$('[data-key-clear]').forEach((b) => b.addEventListener('click', (e) => {
|
|
2356
|
+
const row = e.currentTarget.closest('[data-key-slot]');
|
|
2357
|
+
if (!row) return;
|
|
2358
|
+
if (confirm('Quitar la key de ' + row.getAttribute('data-key-slot') + '?')) {
|
|
2359
|
+
clearKey(row.getAttribute('data-key-slot'));
|
|
2360
|
+
}
|
|
2361
|
+
}));
|
|
2362
|
+
const keSave = $('#ke-save');
|
|
2363
|
+
const keCancel = $('#ke-cancel');
|
|
2364
|
+
const keClear = $('#ke-clear');
|
|
2365
|
+
if (keSave) keSave.addEventListener('click', saveKeyEditor);
|
|
2366
|
+
if (keCancel) keCancel.addEventListener('click', closeKeyEditor);
|
|
2367
|
+
if (keClear) keClear.addEventListener('click', () => {
|
|
2368
|
+
if (_keyEditorSlot && confirm('Quitar la key de ' + _keyEditorSlot + '?')) {
|
|
2369
|
+
clearKey(_keyEditorSlot);
|
|
2370
|
+
closeKeyEditor();
|
|
2371
|
+
}
|
|
2372
|
+
});
|
|
2153
2373
|
setMicButtonsState('idle');
|
|
2154
2374
|
updateTtsToggleButtons();
|
|
2155
2375
|
|
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.32",
|
|
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>",
|