@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.
@@ -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,CAkuExD"}
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"}
@@ -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" data-settings-toggle aria-label="ajustes" title="Ajustes (modo voz, STT, TTS, claves)">⚙</button>
510
- <button class="lang-btn" data-lang-open aria-label="${escapeHtml(tr.languageButton)}" title="${escapeHtml(tr.languageButton)}">🌐</button>
511
- <button class="keys-btn" data-vault-open aria-label="${escapeHtml(tr.keysButton)}" title="${escapeHtml(tr.keysButton)}">${escapeHtml(tr.keysButton)}</button>
512
- <button id="full-mini" data-nac-id="yujin.panel.full-to-mini" aria-label="${escapeHtml(tr.minimiseButton)}" title="${escapeHtml(tr.minimiseButton)}">▭</button>
513
- <button id="full-close" data-nac-id="yujin.panel.full-close" aria-label="${escapeHtml(tr.closeButton)}" title="${escapeHtml(tr.closeButton)}">✕</button>
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">Voz TTS</span>
528
- <button type="button" data-tts-voice-btn class="set-btn">es-ES-Neural2-A (Lucia)</button>
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>...</span>
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>...</span>
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>...</span>
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>...</span>
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>...</span>
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>...</span>
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">cargando...</span>
596
+ <span class="set-status" id="set-license-status">--</span>
562
597
  </div>
563
598
  <div class="set-row">
564
- <a href="https://polar.sh/checkout/polar_c_FXDtc94fvh5H8rXORu24IQcSpnOhp9ijG3Cxn4CUWxr"
565
- target="_blank" rel="noopener" class="set-link">Comprar / activar plan en polar.sh</a>
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: GETs /api/forge/keys-status (new endpoint)
1191
- * and renders a short summary in the settings dropdown. */
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 el = document.getElementById('set-keys-status');
1194
- if (!el) return;
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
- el.textContent = 'error: ' + (data.error || r.status);
1264
+ if (licEl) licEl.textContent = 'error: ' + (data.error || r.status);
1201
1265
  return;
1202
1266
  }
1203
1267
  const k = data.keys || {};
1204
- const parts = [];
1205
- parts.push((k.anthropic ? '✓' : '✗') + ' brain');
1206
- parts.push((k.google_stt ? '' : '✗') + ' stt');
1207
- parts.push((k.google_tts || k.elevenlabs ? '' : '✗') + ' tts');
1208
- parts.push((k.license_paid ? '✓' : '✗') + ' license');
1209
- el.textContent = parts.join(' · ');
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
- el.textContent = 'error fetching: ' + (err && err.message ? err.message : 'unknown');
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
- const trimmed = String(text || '').replace(/\s+/g, ' ').trim();
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
- if (ch === '.' && /\d/.test(trimmed.charAt(i - 1) || '')
1648
- && /\d/.test(trimmed.charAt(i + 1) || '')) { i += 1; continue; }
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
 
@@ -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
@@ -4,5 +4,5 @@
4
4
  * into the npm metadata) so we don't end up with two versions
5
5
  * drifting.
6
6
  */
7
- export declare const VERSION = "0.2.0-alpha.31";
7
+ export declare const VERSION = "0.2.0-alpha.33";
8
8
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * into the npm metadata) so we don't end up with two versions
5
5
  * drifting.
6
6
  */
7
- export const VERSION = '0.2.0-alpha.31';
7
+ export const VERSION = '0.2.0-alpha.33';
8
8
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "0.2.0-alpha.31",
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>",