@wrongstack/desktop 1.0.0 → 1.0.3

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,4 +1,4 @@
1
- (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`wrongstack.desktop.locale`;function t(e){try{window.wrongstackDesktop?.setLocale?.(e)}catch{}}function n(){try{let t=localStorage.getItem(e);if(t&&t in l)return t}catch{}return`en`}var r=n();function i(n,i={}){if(n!==r){r=n;try{localStorage.setItem(e,n)}catch{}i.propagate!==!1&&t(n);for(let e of o)e()}}function a(){return r}var o=new Set;function s(e){return o.add(e),()=>{o.delete(e)}}var c=[`en`,`tr`,`de`,`fr`,`it`,`es`,`pt-BR`],l={en:{desktopNavAria:`Desktop navigation`,openProjectFolderTitle:`Open project folder`,openRegisteredProject:`Open project from projects.json`,removeFromProjectRegistry:`Remove from projects.json`,dismiss:`Dismiss`,active:`Active`,globalSettingsWorkspace:`Global settings workspace`,newSession:`New Session`,revealProjectFolder:`Reveal project folder`,registerProjectFolder:`Register project folder`,findProject:`Find project`,clearProjectSearch:`Clear project search`,register:`Register`,projectLists:`Project lists`,removeFromRegistry:`Remove from project registry`,none:`None`,quickView:`Quick view`,openChat:`Open chat`,openTerminal:`Open terminal`,term:`Term`,openFiles:`Open files`,files:`Files`,openInBrowser:`Open in browser`,closeSession:`Close session`,runtimeError:`Runtime Error`,openProject:`Open Project`,restoring:`Restoring`,workspace:`Workspace`,projects:`Projects`,quick:`Quick`,quickActions:`Quick actions`,all:`All`,recent:`Recent`,registered:`Registered`,globalSettings:`Global Settings`,settings:`Settings`,webui:`WebUI`,webuiCommands:`WebUI commands`,webuiReady:`WebUI ready`,webuiLoading:`WebUI loading`,webuiError:`WebUI error`,webuiIdle:`WebUI idle`,noActiveWebui:`No active WebUI`,chat:`Chat`,terminal:`Terminal`,newTerm:`New Term`,prompt:`Prompt`,command:`Command`,compact:`Compact`,yolo:`YOLO`,ready:`Ready`,loading:`Loading`,idle:`Idle`,error:`Error`,offline:`Offline`,running:`Running`,starting:`Starting`,stopped:`Stopped`,noProject:`No project`,noMatchingProjects:`No matching projects`,noRegisteredProjects:`No registered projects`,noOpenProjectSessions:`No open project sessions`,unknownError:`Unknown error`,next:`Next`,collapseSidebar:`Collapse desktop sidebar`,expandSidebar:`Expand desktop sidebar`,gs:`GS`,sessions:`Sessions`,runtimes:`Runtimes`,launcherError:`The active WebUI did not handle that launcher command. Try Reload if the view is still starting.`,sessionLauncherError:`That session WebUI did not handle the command yet. Try Reload if it is still starting.`,operationFailed:`Operation failed.`},tr:{desktopNavAria:`Masaüstü navigasyon`,openProjectFolderTitle:`Proje klasörünü aç`,dismiss:`Kapat`,active:`Aktif`,globalSettingsWorkspace:`Genel ayarlar çalışma alanı`,newSession:`Yeni Oturum`,revealProjectFolder:`Proje klasörünü göster`,registerProjectFolder:`Proje klasörünü kaydet`,findProject:`Proje bul`,clearProjectSearch:`Proje aramasını temizle`,register:`Kaydet`,projectLists:`Proje listeleri`,removeFromRegistry:`Proje kaydından kaldır`,none:`Yok`,quickView:`Hızlı görünüm`,openChat:`Sohbeti aç`,openTerminal:`Terminali aç`,term:`Term`,openFiles:`Dosyaları aç`,files:`Dosyalar`,openInBrowser:`Tarayıcıda aç`,closeSession:`Oturumu kapat`,runtimeError:`Çalışma Zamanı Hatası`,openProject:`Proje Aç`,restoring:`Geri yükleniyor`,workspace:`Çalışma alanı`,projects:`Projeler`,quick:`Hızlı`,quickActions:`Hızlı eylemler`,all:`Tümü`,recent:`Son`,registered:`Kayıtlı`,globalSettings:`Genel Ayarlar`,settings:`Ayarlar`,webui:`WebUI`,webuiCommands:`WebUI komutları`,webuiReady:`WebUI hazır`,webuiLoading:`WebUI yükleniyor`,webuiError:`WebUI hatası`,webuiIdle:`WebUI boşta`,noActiveWebui:`Etkin WebUI yok`,chat:`Sohbet`,terminal:`Terminal`,newTerm:`Yeni Terminal`,prompt:`İstem`,command:`Komut`,compact:`Sıkışık`,yolo:`YOLO`,ready:`Hazır`,loading:`Yükleniyor`,idle:`Boşta`,error:`Hata`,offline:`Çevrimdışı`,running:`Çalışıyor`,starting:`Başlatılıyor`,stopped:`Durduruldu`,noProject:`Proje yok`,noMatchingProjects:`Eşleşen proje yok`,noRegisteredProjects:`Kayıtlı proje yok`,noOpenProjectSessions:`Açık proje oturumu yok`,unknownError:`Bilinmeyen hata`,next:`İleri`,collapseSidebar:`Masaüstü kenar çubuğunu daralt`,expandSidebar:`Masaüstü kenar çubuğunu genişlet`,gs:`GA`,sessions:`Oturumlar`,runtimes:`Çalışma zamanları`},de:{desktopNavAria:`Desktop-Navigation`,openProjectFolderTitle:`Projektordner öffnen`,dismiss:`Verwerfen`,active:`Aktiv`,globalSettingsWorkspace:`Globale Einstellungen-Workspace`,newSession:`Neue Sitzung`,revealProjectFolder:`Projektordner anzeigen`,registerProjectFolder:`Projektordner registrieren`,findProject:`Projekt finden`,clearProjectSearch:`Projektsuche löschen`,register:`Registrieren`,projectLists:`Projektlisten`,removeFromRegistry:`Aus Projekt-Registry entfernen`,none:`Keine`,quickView:`Schnellansicht`,openChat:`Chat öffnen`,openTerminal:`Terminal öffnen`,term:`Term`,openFiles:`Dateien öffnen`,files:`Dateien`,openInBrowser:`Im Browser öffnen`,closeSession:`Sitzung schließen`,runtimeError:`Laufzeitfehler`,openProject:`Projekt öffnen`,restoring:`Wiederherstellen`,workspace:`Workspace`,projects:`Projekte`,quick:`Schnell`,quickActions:`Schnellaktionen`,all:`Alle`,recent:`Zuletzt`,registered:`Registriert`,globalSettings:`Globale Einstellungen`,settings:`Einstellungen`,webui:`WebUI`,webuiCommands:`WebUI-Befehle`,webuiReady:`WebUI bereit`,webuiLoading:`WebUI lädt`,webuiError:`WebUI-Fehler`,webuiIdle:`WebUI inaktiv`,noActiveWebui:`Kein aktives WebUI`,chat:`Chat`,terminal:`Terminal`,newTerm:`Neues Terminal`,prompt:`Prompt`,command:`Befehl`,compact:`Kompakt`,yolo:`YOLO`,ready:`Bereit`,loading:`Lädt`,idle:`Inaktiv`,error:`Fehler`,offline:`Offline`,running:`Läuft`,starting:`Startet`,stopped:`Gestoppt`,noProject:`Kein Projekt`,noMatchingProjects:`Keine passenden Projekte`,noRegisteredProjects:`Keine registrierten Projekte`,noOpenProjectSessions:`Keine offenen Projektsessions`,unknownError:`Unbekannter Fehler`,next:`Weiter`,collapseSidebar:`Desktop-Seitenleiste einklappen`,expandSidebar:`Desktop-Seitenleiste ausklappen`,gs:`GE`,sessions:`Sessions`,runtimes:`Runtimes`},fr:{desktopNavAria:`Navigation du bureau`,openProjectFolderTitle:`Ouvrir le dossier du projet`,dismiss:`Fermer`,active:`Actif`,globalSettingsWorkspace:`Espace des paramètres globaux`,newSession:`Nouvelle session`,revealProjectFolder:`Révéler le dossier du projet`,registerProjectFolder:`Enregistrer le dossier du projet`,findProject:`Rechercher un projet`,clearProjectSearch:`Effacer la recherche de projet`,register:`Enregistrer`,projectLists:`Listes de projets`,removeFromRegistry:`Retirer du registre des projets`,none:`Aucun`,quickView:`Vue rapide`,openChat:`Ouvrir le chat`,openTerminal:`Ouvrir le terminal`,term:`Term`,openFiles:`Ouvrir les fichiers`,files:`Fichiers`,openInBrowser:`Ouvrir dans le navigateur`,closeSession:`Fermer la session`,runtimeError:`Erreur d'exécution`,openProject:`Ouvrir un projet`,restoring:`Restauration`,workspace:`Espace de travail`,projects:`Projets`,quick:`Rapide`,quickActions:`Actions rapides`,all:`Tous`,recent:`Récents`,registered:`Enregistrés`,globalSettings:`Paramètres globaux`,settings:`Paramètres`,webui:`WebUI`,webuiCommands:`Commandes WebUI`,webuiReady:`WebUI prêt`,webuiLoading:`WebUI charge`,webuiError:`Erreur WebUI`,webuiIdle:`WebUI inactif`,noActiveWebui:`Pas de WebUI actif`,chat:`Chat`,terminal:`Terminal`,newTerm:`Nouveau terminal`,prompt:`Invite`,command:`Commande`,compact:`Compact`,yolo:`YOLO`,ready:`Prêt`,loading:`Chargement`,idle:`Inactif`,error:`Erreur`,offline:`Hors ligne`,running:`En cours`,starting:`Démarrage`,stopped:`Arrêté`,noProject:`Aucun projet`,noMatchingProjects:`Aucun projet correspondant`,noRegisteredProjects:`Aucun projet enregistré`,noOpenProjectSessions:`Aucune session de projet ouverte`,unknownError:`Erreur inconnue`,next:`Suivant`,collapseSidebar:`Réduire la barre latérale`,expandSidebar:`Agrandir la barre latérale`,gs:`PG`,sessions:`Sessions`,runtimes:`Runtimes`},it:{desktopNavAria:`Navigazione desktop`,openProjectFolderTitle:`Apri cartella progetto`,dismiss:`Chiudi`,active:`Attivo`,globalSettingsWorkspace:`Workspace impostazioni globali`,newSession:`Nuova sessione`,revealProjectFolder:`Rivela cartella progetto`,registerProjectFolder:`Registra cartella progetto`,findProject:`Trova progetto`,clearProjectSearch:`Cancella ricerca progetto`,register:`Registra`,projectLists:`Elenchi progetti`,removeFromRegistry:`Rimuovi dal registro progetti`,none:`Nessuno`,quickView:`Vista rapida`,openChat:`Apri chat`,openTerminal:`Apri terminale`,term:`Term`,openFiles:`Apri file`,files:`File`,openInBrowser:`Apri nel browser`,closeSession:`Chiudi sessione`,runtimeError:`Errore di runtime`,openProject:`Apri progetto`,restoring:`Ripristino`,workspace:`Workspace`,projects:`Progetti`,quick:`Rapido`,quickActions:`Azioni rapide`,all:`Tutti`,recent:`Recenti`,registered:`Registrati`,globalSettings:`Impostazioni globali`,settings:`Impostazioni`,webui:`WebUI`,webuiCommands:`Comandi WebUI`,webuiReady:`WebUI pronto`,webuiLoading:`WebUI carica`,webuiError:`Errore WebUI`,webuiIdle:`WebUI inattivo`,noActiveWebui:`Nessun WebUI attivo`,chat:`Chat`,terminal:`Terminale`,newTerm:`Nuovo terminale`,prompt:`Prompt`,command:`Comando`,compact:`Compatto`,yolo:`YOLO`,ready:`Pronto`,loading:`Caricamento`,idle:`Inattivo`,error:`Errore`,offline:`Offline`,running:`In corso`,starting:`Avvio`,stopped:`Fermato`,noProject:`Nessun progetto`,noMatchingProjects:`Nessun progetto corrispondente`,noRegisteredProjects:`Nessun progetto registrato`,noOpenProjectSessions:`Nessuna sessione di progetto aperta`,unknownError:`Errore sconosciuto`,next:`Avanti`,collapseSidebar:`Comprimi barra laterale`,expandSidebar:`Espandi barra laterale`,gs:`IG`,sessions:`Sessioni`,runtimes:`Runtime`},es:{desktopNavAria:`Navegación de escritorio`,openProjectFolderTitle:`Abrir carpeta del proyecto`,dismiss:`Cerrar`,active:`Activo`,globalSettingsWorkspace:`Espacio de ajustes globales`,newSession:`Nueva sesión`,revealProjectFolder:`Revelar carpeta del proyecto`,registerProjectFolder:`Registrar carpeta del proyecto`,findProject:`Buscar proyecto`,clearProjectSearch:`Borrar búsqueda de proyecto`,register:`Registrar`,projectLists:`Listas de proyectos`,removeFromRegistry:`Quitar del registro de proyectos`,none:`Ninguno`,quickView:`Vista rápida`,openChat:`Abrir chat`,openTerminal:`Abrir terminal`,term:`Term`,openFiles:`Abrir archivos`,files:`Archivos`,openInBrowser:`Abrir en el navegador`,closeSession:`Cerrar sesión`,runtimeError:`Error de ejecución`,openProject:`Abrir proyecto`,restoring:`Restaurando`,workspace:`Espacio de trabajo`,projects:`Proyectos`,quick:`Rápido`,quickActions:`Acciones rápidas`,all:`Todos`,recent:`Recientes`,registered:`Registrados`,globalSettings:`Ajustes globales`,settings:`Ajustes`,webui:`WebUI`,webuiCommands:`Comandos WebUI`,webuiReady:`WebUI listo`,webuiLoading:`WebUI cargando`,webuiError:`Error de WebUI`,webuiIdle:`WebUI inactivo`,noActiveWebui:`Sin WebUI activo`,chat:`Chat`,terminal:`Terminal`,newTerm:`Nuevo terminal`,prompt:`Indicación`,command:`Comando`,compact:`Compacto`,yolo:`YOLO`,ready:`Listo`,loading:`Cargando`,idle:`Inactivo`,error:`Error`,offline:`Desconectado`,running:`En ejecución`,starting:`Iniciando`,stopped:`Detenido`,noProject:`Sin proyecto`,noMatchingProjects:`Sin proyectos coincidentes`,noRegisteredProjects:`Sin proyectos registrados`,noOpenProjectSessions:`Sin sesiones de proyecto abiertas`,unknownError:`Error desconocido`,next:`Siguiente`,collapseSidebar:`Contraer barra lateral`,expandSidebar:`Expandir barra lateral`,gs:`AG`,sessions:`Sesiones`,runtimes:`Runtimes`},"pt-BR":{desktopNavAria:`Navegação do desktop`,openProjectFolderTitle:`Abrir pasta do projeto`,dismiss:`Dispensar`,active:`Ativo`,globalSettingsWorkspace:`Espaço de configurações globais`,newSession:`Nova sessão`,revealProjectFolder:`Revelar pasta do projeto`,registerProjectFolder:`Registrar pasta do projeto`,findProject:`Encontrar projeto`,clearProjectSearch:`Limpar busca de projeto`,register:`Registrar`,projectLists:`Listas de projetos`,removeFromRegistry:`Remover do registro de projetos`,none:`Nenhum`,quickView:`Vista rápida`,openChat:`Abrir chat`,openTerminal:`Abrir terminal`,term:`Term`,openFiles:`Abrir arquivos`,files:`Arquivos`,openInBrowser:`Abrir no navegador`,closeSession:`Fechar sessão`,runtimeError:`Erro de execução`,openProject:`Abrir projeto`,restoring:`Restaurando`,workspace:`Workspace`,projects:`Projetos`,quick:`Rápido`,quickActions:`Ações rápidas`,all:`Todos`,recent:`Recentes`,registered:`Registrados`,globalSettings:`Configurações globais`,settings:`Configurações`,webui:`WebUI`,webuiCommands:`Comandos WebUI`,webuiReady:`WebUI pronto`,webuiLoading:`WebUI carregando`,webuiError:`Erro WebUI`,webuiIdle:`WebUI inativo`,noActiveWebui:`Sem WebUI ativo`,chat:`Chat`,terminal:`Terminal`,newTerm:`Novo terminal`,prompt:`Prompt`,command:`Comando`,compact:`Compacto`,yolo:`YOLO`,ready:`Pronto`,loading:`Carregando`,idle:`Inativo`,error:`Erro`,offline:`Offline`,running:`Em execução`,starting:`Iniciando`,stopped:`Parado`,noProject:`Sem projeto`,noMatchingProjects:`Sem projetos correspondentes`,noRegisteredProjects:`Sem projetos registrados`,noOpenProjectSessions:`Sem sessões de projeto abertas`,unknownError:`Erro desconhecido`,next:`Próximo`,collapseSidebar:`Recolher barra lateral`,expandSidebar:`Expandir barra lateral`,gs:`CG`,sessions:`Sessões`,runtimes:`Runtimes`}};function u(e){return l[r]?.[e]??l.en[e]??e}try{window.wrongstackDesktop?.onLocaleChanged?.(e=>{e&&e in l&&i(e,{propagate:!1})})}catch{}var d={agents:`<path d="M16 21v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2"></path><circle cx="9.5" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.9"></path><path d="M16 3.1a4 4 0 0 1 0 7.8"></path>`,branch:`<circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><circle cx="18" cy="18" r="3"></circle><path d="M9 6h6"></path><path d="M18 9v6"></path><path d="M6 9v3a6 6 0 0 0 6 6h3"></path>`,chart:`<path d="M3 3v18h18"></path><rect x="7" y="12" width="3" height="5"></rect><rect x="12" y="8" width="3" height="9"></rect><rect x="17" y="5" width="3" height="12"></rect>`,check:`<path d="M20 6L9 17l-5-5"></path>`,checklist:`<path d="M9 6h11"></path><path d="M9 12h11"></path><path d="M9 18h11"></path><path d="M4 6l1 1 2-2"></path><path d="M4 12l1 1 2-2"></path><path d="M4 18l1 1 2-2"></path>`,chevron:`<path d="M9 18l6-6-6-6"></path>`,chip:`<rect x="7" y="7" width="10" height="10" rx="2"></rect><path d="M4 9h3"></path><path d="M4 15h3"></path><path d="M17 9h3"></path><path d="M17 15h3"></path><path d="M9 4v3"></path><path d="M15 4v3"></path><path d="M9 17v3"></path><path d="M15 17v3"></path>`,clock:`<circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3 2"></path>`,command:`<path d="M7 7h.01"></path><path d="M12 7h.01"></path><path d="M17 7h.01"></path><path d="M7 12h.01"></path><path d="M12 12h.01"></path><path d="M17 12h.01"></path><path d="M7 17h.01"></path><path d="M12 17h.01"></path><path d="M17 17h.01"></path>`,collab:`<circle cx="8" cy="8" r="3"></circle><circle cx="16" cy="8" r="3"></circle><path d="M3 20a5 5 0 0 1 10 0"></path><path d="M11 20a5 5 0 0 1 10 0"></path>`,compress:`<path d="M8 3v6H2"></path><path d="M16 3v6h6"></path><path d="M8 21v-6H2"></path><path d="M16 21v-6h6"></path>`,cursor:`<path d="M4 4l9 17 2-7 7-2L4 4z"></path>`,debug:`<path d="M8 2h8"></path><path d="M9 2v4"></path><path d="M15 2v4"></path><path d="M5 10h14"></path><path d="M7 10v4a5 5 0 0 0 10 0v-4"></path><path d="M3 14h4"></path><path d="M17 14h4"></path><path d="M4 20l3-3"></path><path d="M20 20l-3-3"></path>`,document:`<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><path d="M8 13h8"></path><path d="M8 17h6"></path>`,download:`<path d="M12 3v12"></path><path d="M7 10l5 5 5-5"></path><path d="M5 21h14"></path>`,external:`<path d="M15 3h6v6"></path><path d="M10 14L21 3"></path><path d="M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5"></path>`,files:`<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path>`,folder:`<path d="M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>`,"folder-plus":`<path d="M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><path d="M12 11v5"></path><path d="M9.5 13.5h5"></path>`,git:`<path d="M7 7h10"></path><path d="M7 12h10"></path><path d="M7 17h10"></path><path d="M4 7h.01"></path><path d="M4 12h.01"></path><path d="M4 17h.01"></path>`,gallery:`<rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><path d="M21 15l-5-5L5 21"></path>`,history:`<path d="M3 12a9 9 0 1 0 3-6.7"></path><path d="M3 4v6h6"></path><path d="M12 7v5l3 2"></path>`,kanban:`<rect x="3" y="4" width="18" height="16" rx="2"></rect><path d="M9 4v16"></path><path d="M15 4v16"></path><path d="M6 8h.01"></path><path d="M12 12h.01"></path><path d="M18 9h.01"></path>`,keyboard:`<rect x="3" y="5" width="18" height="14" rx="2"></rect><path d="M7 9h.01"></path><path d="M11 9h.01"></path><path d="M15 9h.01"></path><path d="M19 9h.01"></path><path d="M7 13h.01"></path><path d="M11 13h.01"></path><path d="M15 13h.01"></path><path d="M7 17h10"></path>`,list:`<path d="M8 6h13"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M3 6h.01"></path><path d="M3 12h.01"></path><path d="M3 18h.01"></path>`,mail:`<rect x="3" y="5" width="18" height="14" rx="2"></rect><path d="M3 7l9 6 9-6"></path>`,map:`<path d="M9 18l-6 3V6l6-3 6 3 6-3v15l-6 3-6-3z"></path><path d="M9 3v15"></path><path d="M15 6v15"></path>`,message:`<path d="M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"></path>`,monitor:`<rect x="3" y="4" width="18" height="14" rx="2"></rect><path d="M8 21h8"></path><path d="M12 18v3"></path><path d="M7 13l3-3 2 2 4-5 1 3"></path>`,phase:`<path d="M4 7h6"></path><path d="M14 7h6"></path><path d="M4 17h6"></path><path d="M14 17h6"></path><circle cx="12" cy="7" r="2"></circle><circle cx="12" cy="17" r="2"></circle><path d="M12 9v6"></path>`,plan:`<rect x="4" y="3" width="16" height="18" rx="2"></rect><path d="M8 8h8"></path><path d="M8 12h8"></path><path d="M8 16h5"></path>`,plus:`<path d="M12 5v14"></path><path d="M5 12h14"></path>`,project:`<rect x="3" y="4" width="18" height="16" rx="2"></rect><path d="M8 4v16"></path><path d="M8 9h13"></path>`,pulse:`<path d="M3 12h4l2-6 4 12 2-6h6"></path>`,refresh:`<path d="M21 12a9 9 0 0 1-15.4 6.4"></path><path d="M3 12A9 9 0 0 1 18.4 5.6"></path><path d="M18 2v5h-5"></path><path d="M6 22v-5h5"></path>`,search:`<circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path>`,settings:`<path d="M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8z"></path><path d="M4 12a8 8 0 0 1 .2-1.8l-2-1.5 2-3.4 2.4 1a8 8 0 0 1 3-1.7L10 2h4l.4 2.6a8 8 0 0 1 3 1.7l2.4-1 2 3.4-2 1.5A8 8 0 0 1 20 12a8 8 0 0 1-.2 1.8l2 1.5-2 3.4-2.4-1a8 8 0 0 1-3 1.7L14 22h-4l-.4-2.6a8 8 0 0 1-3-1.7l-2.4 1-2-3.4 2-1.5A8 8 0 0 1 4 12z"></path>`,shield:`<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path><path d="M9 12l2 2 4-5"></path>`,skill:`<path d="M12 2l2.5 6.5L21 11l-6.5 2.5L12 20l-2.5-6.5L3 11l6.5-2.5L12 2z"></path>`,spark:`<path d="M12 3l1.7 5.3L19 10l-5.3 1.7L12 17l-1.7-5.3L5 10l5.3-1.7L12 3z"></path><path d="M19 16l.8 2.2L22 19l-2.2.8L19 22l-.8-2.2L16 19l2.2-.8L19 16z"></path>`,target:`<circle cx="12" cy="12" r="9"></circle><circle cx="12" cy="12" r="5"></circle><circle cx="12" cy="12" r="1"></circle>`,tasks:`<path d="M4 6h2"></path><path d="M4 12h2"></path><path d="M4 18h2"></path><path d="M10 6h10"></path><path d="M10 12h10"></path><path d="M10 18h10"></path>`,terminal:`<path d="M4 17l6-5-6-5"></path><path d="M12 19h8"></path>`,wand:`<path d="M15 4l5 5"></path><path d="M14 5l-9 9 5 5 9-9"></path><path d="M5 3v4"></path><path d="M3 5h4"></path><path d="M19 17v4"></path><path d="M17 19h4"></path>`,x:`<path d="M18 6L6 18"></path><path d="M6 6l12 12"></path>`};function f(e){return`<svg class="svg-icon" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${d[e]}</svg>`}function p(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function m(e){return p(e).replace(/'/g,`&#39;`)}function h(e){return e.replace(/\\/g,`/`).replace(/\/+$/g,``).trim().toLowerCase()}function g(e,t){return h(e)===h(t)}function _(e){let t=new Set,n=[];for(let r of e){let e=h(r.root);!e||t.has(e)||(t.add(e),n.push(r))}return n}function v(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/g,``).trim();return t?t.split(`/`).filter(Boolean).pop()??t:e}function ee(e){return e.kind===`global-settings`?`global-settings`:`${e.kind}:${h(e.root)||e.id}`}function y(e){return e===`workspace`||e===`projects`||e===`quick`?e:null}function te(e){return e===`recent`||e===`registered`||e===`all`?e:null}function b(e,t){let n=new Map;for(let r of e){let e=ee(r),i=n.get(e);if(i){i.sessions.push(r);continue}n.set(e,{key:e,name:r.kind===`global-settings`?t(`globalSettings`):v(r.root)||r.name,root:r.root,kind:r.kind,sessions:[r]})}return[...n.values()]}function x(e,t){if(e.sessions.some(e=>e.id===t.activeRuntimeId))return!0;let n=t.runtimeGroupState[e.key];return typeof n==`boolean`?n:t.allRuntimeCount===e.sessions.length}function S(e,t){let n=e.sessions.some(e=>e.id===t.activeRuntimeId),r=e.sessions[0],i=x(e,t),a=e.sessions.length===1?`1 session`:`${e.sessions.length} sessions`;return`
1
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`wrongstack.desktop.locale`;function t(e){try{window.wrongstackDesktop?.setLocale?.(e)}catch{}}function n(){try{let t=localStorage.getItem(e);if(t&&t in l)return t}catch{}return`en`}var r=n();function i(n,i={}){if(n!==r){r=n;try{localStorage.setItem(e,n)}catch{}i.propagate!==!1&&t(n);for(let e of o)e()}}function a(){return r}var o=new Set;function s(e){return o.add(e),()=>{o.delete(e)}}var c=[`en`,`tr`,`de`,`fr`,`it`,`es`,`pt-BR`],l={en:{desktopNavAria:`Desktop navigation`,openProjectFolderTitle:`Open project folder`,openRegisteredProject:`Open project from projects.json`,removeFromProjectRegistry:`Remove from projects.json`,dismiss:`Dismiss`,active:`Active`,globalSettingsWorkspace:`Global settings workspace`,newSession:`New Session`,revealProjectFolder:`Reveal project folder`,registerProjectFolder:`Register project folder`,findProject:`Find project`,clearProjectSearch:`Clear project search`,register:`Register`,projectLists:`Project lists`,removeFromRegistry:`Remove from project registry`,none:`None`,quickView:`Quick view`,openChat:`Open chat`,openTerminal:`Open terminal`,term:`Term`,openFiles:`Open files`,files:`Files`,openInBrowser:`Open in browser`,closeSession:`Close session`,runtimeError:`Runtime Error`,openProject:`Open Project`,restoring:`Restoring`,workspace:`Workspace`,projects:`Projects`,quick:`Quick`,quickActions:`Quick actions`,all:`All`,recent:`Recent`,registered:`Registered`,globalSettings:`Global Settings`,settings:`Settings`,webui:`WebUI`,webuiCommands:`WebUI commands`,webuiReady:`WebUI ready`,webuiLoading:`WebUI loading`,webuiError:`WebUI error`,webuiIdle:`WebUI idle`,noActiveWebui:`No active WebUI`,chat:`Chat`,terminal:`Terminal`,newTerm:`New Term`,prompt:`Prompt`,command:`Command`,compact:`Compact`,yolo:`YOLO`,ready:`Ready`,loading:`Loading`,idle:`Idle`,error:`Error`,offline:`Offline`,running:`Running`,starting:`Starting`,stopped:`Stopped`,noProject:`No project`,noMatchingProjects:`No matching projects`,noRegisteredProjects:`No registered projects`,noOpenProjectSessions:`No open project sessions`,unknownError:`Unknown error`,next:`Next`,collapseSidebar:`Collapse desktop sidebar`,expandSidebar:`Expand desktop sidebar`,gs:`GS`,sessions:`Sessions`,runtimes:`Runtimes`,launcherError:`The active WebUI did not handle that launcher command. Try Reload if the view is still starting.`,sessionLauncherError:`That session WebUI did not handle the command yet. Try Reload if it is still starting.`,operationFailed:`Operation failed.`},tr:{desktopNavAria:`Masaüstü navigasyon`,openProjectFolderTitle:`Proje klasörünü aç`,dismiss:`Kapat`,active:`Aktif`,globalSettingsWorkspace:`Genel ayarlar çalışma alanı`,newSession:`Yeni Oturum`,revealProjectFolder:`Proje klasörünü göster`,registerProjectFolder:`Proje klasörünü kaydet`,findProject:`Proje bul`,clearProjectSearch:`Proje aramasını temizle`,register:`Kaydet`,projectLists:`Proje listeleri`,removeFromRegistry:`Proje kaydından kaldır`,none:`Yok`,quickView:`Hızlı görünüm`,openChat:`Sohbeti aç`,openTerminal:`Terminali aç`,term:`Term`,openFiles:`Dosyaları aç`,files:`Dosyalar`,openInBrowser:`Tarayıcıda aç`,closeSession:`Oturumu kapat`,runtimeError:`Çalışma Zamanı Hatası`,openProject:`Proje Aç`,restoring:`Geri yükleniyor`,workspace:`Çalışma alanı`,projects:`Projeler`,quick:`Hızlı`,quickActions:`Hızlı eylemler`,all:`Tümü`,recent:`Son`,registered:`Kayıtlı`,globalSettings:`Genel Ayarlar`,settings:`Ayarlar`,webui:`WebUI`,webuiCommands:`WebUI komutları`,webuiReady:`WebUI hazır`,webuiLoading:`WebUI yükleniyor`,webuiError:`WebUI hatası`,webuiIdle:`WebUI boşta`,noActiveWebui:`Etkin WebUI yok`,chat:`Sohbet`,terminal:`Terminal`,newTerm:`Yeni Terminal`,prompt:`İstem`,command:`Komut`,compact:`Sıkışık`,yolo:`YOLO`,ready:`Hazır`,loading:`Yükleniyor`,idle:`Boşta`,error:`Hata`,offline:`Çevrimdışı`,running:`Çalışıyor`,starting:`Başlatılıyor`,stopped:`Durduruldu`,noProject:`Proje yok`,noMatchingProjects:`Eşleşen proje yok`,noRegisteredProjects:`Kayıtlı proje yok`,noOpenProjectSessions:`Açık proje oturumu yok`,unknownError:`Bilinmeyen hata`,next:`İleri`,collapseSidebar:`Masaüstü kenar çubuğunu daralt`,expandSidebar:`Masaüstü kenar çubuğunu genişlet`,gs:`GA`,sessions:`Oturumlar`,runtimes:`Çalışma zamanları`},de:{desktopNavAria:`Desktop-Navigation`,openProjectFolderTitle:`Projektordner öffnen`,dismiss:`Verwerfen`,active:`Aktiv`,globalSettingsWorkspace:`Globale Einstellungen-Workspace`,newSession:`Neue Sitzung`,revealProjectFolder:`Projektordner anzeigen`,registerProjectFolder:`Projektordner registrieren`,findProject:`Projekt finden`,clearProjectSearch:`Projektsuche löschen`,register:`Registrieren`,projectLists:`Projektlisten`,removeFromRegistry:`Aus Projekt-Registry entfernen`,none:`Keine`,quickView:`Schnellansicht`,openChat:`Chat öffnen`,openTerminal:`Terminal öffnen`,term:`Term`,openFiles:`Dateien öffnen`,files:`Dateien`,openInBrowser:`Im Browser öffnen`,closeSession:`Sitzung schließen`,runtimeError:`Laufzeitfehler`,openProject:`Projekt öffnen`,restoring:`Wiederherstellen`,workspace:`Workspace`,projects:`Projekte`,quick:`Schnell`,quickActions:`Schnellaktionen`,all:`Alle`,recent:`Zuletzt`,registered:`Registriert`,globalSettings:`Globale Einstellungen`,settings:`Einstellungen`,webui:`WebUI`,webuiCommands:`WebUI-Befehle`,webuiReady:`WebUI bereit`,webuiLoading:`WebUI lädt`,webuiError:`WebUI-Fehler`,webuiIdle:`WebUI inaktiv`,noActiveWebui:`Kein aktives WebUI`,chat:`Chat`,terminal:`Terminal`,newTerm:`Neues Terminal`,prompt:`Prompt`,command:`Befehl`,compact:`Kompakt`,yolo:`YOLO`,ready:`Bereit`,loading:`Lädt`,idle:`Inaktiv`,error:`Fehler`,offline:`Offline`,running:`Läuft`,starting:`Startet`,stopped:`Gestoppt`,noProject:`Kein Projekt`,noMatchingProjects:`Keine passenden Projekte`,noRegisteredProjects:`Keine registrierten Projekte`,noOpenProjectSessions:`Keine offenen Projektsessions`,unknownError:`Unbekannter Fehler`,next:`Weiter`,collapseSidebar:`Desktop-Seitenleiste einklappen`,expandSidebar:`Desktop-Seitenleiste ausklappen`,gs:`GE`,sessions:`Sessions`,runtimes:`Runtimes`},fr:{desktopNavAria:`Navigation du bureau`,openProjectFolderTitle:`Ouvrir le dossier du projet`,dismiss:`Fermer`,active:`Actif`,globalSettingsWorkspace:`Espace des paramètres globaux`,newSession:`Nouvelle session`,revealProjectFolder:`Révéler le dossier du projet`,registerProjectFolder:`Enregistrer le dossier du projet`,findProject:`Rechercher un projet`,clearProjectSearch:`Effacer la recherche de projet`,register:`Enregistrer`,projectLists:`Listes de projets`,removeFromRegistry:`Retirer du registre des projets`,none:`Aucun`,quickView:`Vue rapide`,openChat:`Ouvrir le chat`,openTerminal:`Ouvrir le terminal`,term:`Term`,openFiles:`Ouvrir les fichiers`,files:`Fichiers`,openInBrowser:`Ouvrir dans le navigateur`,closeSession:`Fermer la session`,runtimeError:`Erreur d'exécution`,openProject:`Ouvrir un projet`,restoring:`Restauration`,workspace:`Espace de travail`,projects:`Projets`,quick:`Rapide`,quickActions:`Actions rapides`,all:`Tous`,recent:`Récents`,registered:`Enregistrés`,globalSettings:`Paramètres globaux`,settings:`Paramètres`,webui:`WebUI`,webuiCommands:`Commandes WebUI`,webuiReady:`WebUI prêt`,webuiLoading:`WebUI charge`,webuiError:`Erreur WebUI`,webuiIdle:`WebUI inactif`,noActiveWebui:`Pas de WebUI actif`,chat:`Chat`,terminal:`Terminal`,newTerm:`Nouveau terminal`,prompt:`Invite`,command:`Commande`,compact:`Compact`,yolo:`YOLO`,ready:`Prêt`,loading:`Chargement`,idle:`Inactif`,error:`Erreur`,offline:`Hors ligne`,running:`En cours`,starting:`Démarrage`,stopped:`Arrêté`,noProject:`Aucun projet`,noMatchingProjects:`Aucun projet correspondant`,noRegisteredProjects:`Aucun projet enregistré`,noOpenProjectSessions:`Aucune session de projet ouverte`,unknownError:`Erreur inconnue`,next:`Suivant`,collapseSidebar:`Réduire la barre latérale`,expandSidebar:`Agrandir la barre latérale`,gs:`PG`,sessions:`Sessions`,runtimes:`Runtimes`},it:{desktopNavAria:`Navigazione desktop`,openProjectFolderTitle:`Apri cartella progetto`,dismiss:`Chiudi`,active:`Attivo`,globalSettingsWorkspace:`Workspace impostazioni globali`,newSession:`Nuova sessione`,revealProjectFolder:`Rivela cartella progetto`,registerProjectFolder:`Registra cartella progetto`,findProject:`Trova progetto`,clearProjectSearch:`Cancella ricerca progetto`,register:`Registra`,projectLists:`Elenchi progetti`,removeFromRegistry:`Rimuovi dal registro progetti`,none:`Nessuno`,quickView:`Vista rapida`,openChat:`Apri chat`,openTerminal:`Apri terminale`,term:`Term`,openFiles:`Apri file`,files:`File`,openInBrowser:`Apri nel browser`,closeSession:`Chiudi sessione`,runtimeError:`Errore di runtime`,openProject:`Apri progetto`,restoring:`Ripristino`,workspace:`Workspace`,projects:`Progetti`,quick:`Rapido`,quickActions:`Azioni rapide`,all:`Tutti`,recent:`Recenti`,registered:`Registrati`,globalSettings:`Impostazioni globali`,settings:`Impostazioni`,webui:`WebUI`,webuiCommands:`Comandi WebUI`,webuiReady:`WebUI pronto`,webuiLoading:`WebUI carica`,webuiError:`Errore WebUI`,webuiIdle:`WebUI inattivo`,noActiveWebui:`Nessun WebUI attivo`,chat:`Chat`,terminal:`Terminale`,newTerm:`Nuovo terminale`,prompt:`Prompt`,command:`Comando`,compact:`Compatto`,yolo:`YOLO`,ready:`Pronto`,loading:`Caricamento`,idle:`Inattivo`,error:`Errore`,offline:`Offline`,running:`In corso`,starting:`Avvio`,stopped:`Fermato`,noProject:`Nessun progetto`,noMatchingProjects:`Nessun progetto corrispondente`,noRegisteredProjects:`Nessun progetto registrato`,noOpenProjectSessions:`Nessuna sessione di progetto aperta`,unknownError:`Errore sconosciuto`,next:`Avanti`,collapseSidebar:`Comprimi barra laterale`,expandSidebar:`Espandi barra laterale`,gs:`IG`,sessions:`Sessioni`,runtimes:`Runtime`},es:{desktopNavAria:`Navegación de escritorio`,openProjectFolderTitle:`Abrir carpeta del proyecto`,dismiss:`Cerrar`,active:`Activo`,globalSettingsWorkspace:`Espacio de ajustes globales`,newSession:`Nueva sesión`,revealProjectFolder:`Revelar carpeta del proyecto`,registerProjectFolder:`Registrar carpeta del proyecto`,findProject:`Buscar proyecto`,clearProjectSearch:`Borrar búsqueda de proyecto`,register:`Registrar`,projectLists:`Listas de proyectos`,removeFromRegistry:`Quitar del registro de proyectos`,none:`Ninguno`,quickView:`Vista rápida`,openChat:`Abrir chat`,openTerminal:`Abrir terminal`,term:`Term`,openFiles:`Abrir archivos`,files:`Archivos`,openInBrowser:`Abrir en el navegador`,closeSession:`Cerrar sesión`,runtimeError:`Error de ejecución`,openProject:`Abrir proyecto`,restoring:`Restaurando`,workspace:`Espacio de trabajo`,projects:`Proyectos`,quick:`Rápido`,quickActions:`Acciones rápidas`,all:`Todos`,recent:`Recientes`,registered:`Registrados`,globalSettings:`Ajustes globales`,settings:`Ajustes`,webui:`WebUI`,webuiCommands:`Comandos WebUI`,webuiReady:`WebUI listo`,webuiLoading:`WebUI cargando`,webuiError:`Error de WebUI`,webuiIdle:`WebUI inactivo`,noActiveWebui:`Sin WebUI activo`,chat:`Chat`,terminal:`Terminal`,newTerm:`Nuevo terminal`,prompt:`Indicación`,command:`Comando`,compact:`Compacto`,yolo:`YOLO`,ready:`Listo`,loading:`Cargando`,idle:`Inactivo`,error:`Error`,offline:`Desconectado`,running:`En ejecución`,starting:`Iniciando`,stopped:`Detenido`,noProject:`Sin proyecto`,noMatchingProjects:`Sin proyectos coincidentes`,noRegisteredProjects:`Sin proyectos registrados`,noOpenProjectSessions:`Sin sesiones de proyecto abiertas`,unknownError:`Error desconocido`,next:`Siguiente`,collapseSidebar:`Contraer barra lateral`,expandSidebar:`Expandir barra lateral`,gs:`AG`,sessions:`Sesiones`,runtimes:`Runtimes`},"pt-BR":{desktopNavAria:`Navegação do desktop`,openProjectFolderTitle:`Abrir pasta do projeto`,dismiss:`Dispensar`,active:`Ativo`,globalSettingsWorkspace:`Espaço de configurações globais`,newSession:`Nova sessão`,revealProjectFolder:`Revelar pasta do projeto`,registerProjectFolder:`Registrar pasta do projeto`,findProject:`Encontrar projeto`,clearProjectSearch:`Limpar busca de projeto`,register:`Registrar`,projectLists:`Listas de projetos`,removeFromRegistry:`Remover do registro de projetos`,none:`Nenhum`,quickView:`Vista rápida`,openChat:`Abrir chat`,openTerminal:`Abrir terminal`,term:`Term`,openFiles:`Abrir arquivos`,files:`Arquivos`,openInBrowser:`Abrir no navegador`,closeSession:`Fechar sessão`,runtimeError:`Erro de execução`,openProject:`Abrir projeto`,restoring:`Restaurando`,workspace:`Workspace`,projects:`Projetos`,quick:`Rápido`,quickActions:`Ações rápidas`,all:`Todos`,recent:`Recentes`,registered:`Registrados`,globalSettings:`Configurações globais`,settings:`Configurações`,webui:`WebUI`,webuiCommands:`Comandos WebUI`,webuiReady:`WebUI pronto`,webuiLoading:`WebUI carregando`,webuiError:`Erro WebUI`,webuiIdle:`WebUI inativo`,noActiveWebui:`Sem WebUI ativo`,chat:`Chat`,terminal:`Terminal`,newTerm:`Novo terminal`,prompt:`Prompt`,command:`Comando`,compact:`Compacto`,yolo:`YOLO`,ready:`Pronto`,loading:`Carregando`,idle:`Inativo`,error:`Erro`,offline:`Offline`,running:`Em execução`,starting:`Iniciando`,stopped:`Parado`,noProject:`Sem projeto`,noMatchingProjects:`Sem projetos correspondentes`,noRegisteredProjects:`Sem projetos registrados`,noOpenProjectSessions:`Sem sessões de projeto abertas`,unknownError:`Erro desconhecido`,next:`Próximo`,collapseSidebar:`Recolher barra lateral`,expandSidebar:`Expandir barra lateral`,gs:`CG`,sessions:`Sessões`,runtimes:`Runtimes`}};function u(e){return l[r]?.[e]??l.en[e]??e}try{window.wrongstackDesktop?.onLocaleChanged?.(e=>{e&&e in l&&i(e,{propagate:!1})})}catch{}var d={agents:`<path d="M16 21v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2"></path><circle cx="9.5" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.9"></path><path d="M16 3.1a4 4 0 0 1 0 7.8"></path>`,branch:`<circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><circle cx="18" cy="18" r="3"></circle><path d="M9 6h6"></path><path d="M18 9v6"></path><path d="M6 9v3a6 6 0 0 0 6 6h3"></path>`,chart:`<path d="M3 3v18h18"></path><rect x="7" y="12" width="3" height="5"></rect><rect x="12" y="8" width="3" height="9"></rect><rect x="17" y="5" width="3" height="12"></rect>`,check:`<path d="M20 6L9 17l-5-5"></path>`,checklist:`<path d="M9 6h11"></path><path d="M9 12h11"></path><path d="M9 18h11"></path><path d="M4 6l1 1 2-2"></path><path d="M4 12l1 1 2-2"></path><path d="M4 18l1 1 2-2"></path>`,chevron:`<path d="M9 18l6-6-6-6"></path>`,chip:`<rect x="7" y="7" width="10" height="10" rx="2"></rect><path d="M4 9h3"></path><path d="M4 15h3"></path><path d="M17 9h3"></path><path d="M17 15h3"></path><path d="M9 4v3"></path><path d="M15 4v3"></path><path d="M9 17v3"></path><path d="M15 17v3"></path>`,clock:`<circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3 2"></path>`,command:`<path d="M7 7h.01"></path><path d="M12 7h.01"></path><path d="M17 7h.01"></path><path d="M7 12h.01"></path><path d="M12 12h.01"></path><path d="M17 12h.01"></path><path d="M7 17h.01"></path><path d="M12 17h.01"></path><path d="M17 17h.01"></path>`,collab:`<circle cx="8" cy="8" r="3"></circle><circle cx="16" cy="8" r="3"></circle><path d="M3 20a5 5 0 0 1 10 0"></path><path d="M11 20a5 5 0 0 1 10 0"></path>`,compress:`<path d="M8 3v6H2"></path><path d="M16 3v6h6"></path><path d="M8 21v-6H2"></path><path d="M16 21v-6h6"></path>`,cursor:`<path d="M4 4l9 17 2-7 7-2L4 4z"></path>`,debug:`<path d="M8 2h8"></path><path d="M9 2v4"></path><path d="M15 2v4"></path><path d="M5 10h14"></path><path d="M7 10v4a5 5 0 0 0 10 0v-4"></path><path d="M3 14h4"></path><path d="M17 14h4"></path><path d="M4 20l3-3"></path><path d="M20 20l-3-3"></path>`,document:`<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><path d="M8 13h8"></path><path d="M8 17h6"></path>`,download:`<path d="M12 3v12"></path><path d="M7 10l5 5 5-5"></path><path d="M5 21h14"></path>`,external:`<path d="M15 3h6v6"></path><path d="M10 14L21 3"></path><path d="M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5"></path>`,files:`<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path>`,folder:`<path d="M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>`,"folder-plus":`<path d="M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><path d="M12 11v5"></path><path d="M9.5 13.5h5"></path>`,git:`<path d="M7 7h10"></path><path d="M7 12h10"></path><path d="M7 17h10"></path><path d="M4 7h.01"></path><path d="M4 12h.01"></path><path d="M4 17h.01"></path>`,gallery:`<rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><path d="M21 15l-5-5L5 21"></path>`,history:`<path d="M3 12a9 9 0 1 0 3-6.7"></path><path d="M3 4v6h6"></path><path d="M12 7v5l3 2"></path>`,kanban:`<rect x="3" y="4" width="18" height="16" rx="2"></rect><path d="M9 4v16"></path><path d="M15 4v16"></path><path d="M6 8h.01"></path><path d="M12 12h.01"></path><path d="M18 9h.01"></path>`,keyboard:`<rect x="3" y="5" width="18" height="14" rx="2"></rect><path d="M7 9h.01"></path><path d="M11 9h.01"></path><path d="M15 9h.01"></path><path d="M19 9h.01"></path><path d="M7 13h.01"></path><path d="M11 13h.01"></path><path d="M15 13h.01"></path><path d="M7 17h10"></path>`,list:`<path d="M8 6h13"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M3 6h.01"></path><path d="M3 12h.01"></path><path d="M3 18h.01"></path>`,mail:`<rect x="3" y="5" width="18" height="14" rx="2"></rect><path d="M3 7l9 6 9-6"></path>`,map:`<path d="M9 18l-6 3V6l6-3 6 3 6-3v15l-6 3-6-3z"></path><path d="M9 3v15"></path><path d="M15 6v15"></path>`,message:`<path d="M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"></path>`,monitor:`<rect x="3" y="4" width="18" height="14" rx="2"></rect><path d="M8 21h8"></path><path d="M12 18v3"></path><path d="M7 13l3-3 2 2 4-5 1 3"></path>`,phase:`<path d="M4 7h6"></path><path d="M14 7h6"></path><path d="M4 17h6"></path><path d="M14 17h6"></path><circle cx="12" cy="7" r="2"></circle><circle cx="12" cy="17" r="2"></circle><path d="M12 9v6"></path>`,plan:`<rect x="4" y="3" width="16" height="18" rx="2"></rect><path d="M8 8h8"></path><path d="M8 12h8"></path><path d="M8 16h5"></path>`,plus:`<path d="M12 5v14"></path><path d="M5 12h14"></path>`,project:`<rect x="3" y="4" width="18" height="16" rx="2"></rect><path d="M8 4v16"></path><path d="M8 9h13"></path>`,pulse:`<path d="M3 12h4l2-6 4 12 2-6h6"></path>`,refresh:`<path d="M21 12a9 9 0 0 1-15.4 6.4"></path><path d="M3 12A9 9 0 0 1 18.4 5.6"></path><path d="M18 2v5h-5"></path><path d="M6 22v-5h5"></path>`,search:`<circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path>`,settings:`<path d="M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8z"></path><path d="M4 12a8 8 0 0 1 .2-1.8l-2-1.5 2-3.4 2.4 1a8 8 0 0 1 3-1.7L10 2h4l.4 2.6a8 8 0 0 1 3 1.7l2.4-1 2 3.4-2 1.5A8 8 0 0 1 20 12a8 8 0 0 1-.2 1.8l2 1.5-2 3.4-2.4-1a8 8 0 0 1-3 1.7L14 22h-4l-.4-2.6a8 8 0 0 1-3-1.7l-2.4 1-2-3.4 2-1.5A8 8 0 0 1 4 12z"></path>`,shield:`<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path><path d="M9 12l2 2 4-5"></path>`,skill:`<path d="M12 2l2.5 6.5L21 11l-6.5 2.5L12 20l-2.5-6.5L3 11l6.5-2.5L12 2z"></path>`,spark:`<path d="M12 3l1.7 5.3L19 10l-5.3 1.7L12 17l-1.7-5.3L5 10l5.3-1.7L12 3z"></path><path d="M19 16l.8 2.2L22 19l-2.2.8L19 22l-.8-2.2L16 19l2.2-.8L19 16z"></path>`,target:`<circle cx="12" cy="12" r="9"></circle><circle cx="12" cy="12" r="5"></circle><circle cx="12" cy="12" r="1"></circle>`,tasks:`<path d="M4 6h2"></path><path d="M4 12h2"></path><path d="M4 18h2"></path><path d="M10 6h10"></path><path d="M10 12h10"></path><path d="M10 18h10"></path>`,terminal:`<path d="M4 17l6-5-6-5"></path><path d="M12 19h8"></path>`,wand:`<path d="M15 4l5 5"></path><path d="M14 5l-9 9 5 5 9-9"></path><path d="M5 3v4"></path><path d="M3 5h4"></path><path d="M19 17v4"></path><path d="M17 19h4"></path>`,x:`<path d="M18 6L6 18"></path><path d="M6 6l12 12"></path>`};function f(e){return`<svg class="svg-icon" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${d[e]}</svg>`}function p(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function m(e){return p(e).replace(/'/g,`&#39;`)}function h(e){return e.replace(/\\/g,`/`).replace(/\/+$/g,``).trim().toLowerCase()}function g(e,t){return h(e)===h(t)}function _(e){let t=new Set,n=[];for(let r of e){let e=h(r.root);e&&!t.has(e)&&(t.add(e),n.push(r))}return n}function v(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/g,``).trim();return t?t.split(`/`).filter(Boolean).pop()??t:e}function ee(e){return e.kind===`global-settings`?`global-settings`:`${e.kind}:${h(e.root)||e.id}`}function y(e){return e===`workspace`||e===`projects`||e===`quick`?e:null}function te(e){return e===`recent`||e===`registered`||e===`all`?e:null}function b(e,t){let n=new Map;for(let r of e){let e=ee(r),i=n.get(e);if(i){i.sessions.push(r);continue}n.set(e,{key:e,name:r.kind===`global-settings`?t(`globalSettings`):v(r.root)||r.name,root:r.root,kind:r.kind,sessions:[r]})}return[...n.values()]}function x(e,t){if(e.sessions.some(e=>e.id===t.activeRuntimeId))return!0;let n=t.runtimeGroupState[e.key];return typeof n==`boolean`?n:t.allRuntimeCount===e.sessions.length}function S(e,t){let n=e.sessions.some(e=>e.id===t.activeRuntimeId),r=e.sessions[0],i=x(e,t),a=e.sessions.length===1?`1 session`:`${e.sessions.length} sessions`;return`
2
2
  <div class="runtime-project-group ${n?`active`:``} ${i?`open`:`collapsed`}" data-runtime-group="${m(e.key)}">
3
3
  <div class="runtime-project-header">
4
4
  <button class="runtime-project-toggle" data-action="toggle-runtime-group" data-runtime-group-key="${m(e.key)}" aria-expanded="${i?`true`:`false`}" title="${m(e.root)}">
@@ -368,4 +368,4 @@
368
368
  </div>
369
369
  </section>
370
370
  `}function Se(e){return e.status===`starting`?u(`starting`):e.status===`running`?u(`running`):e.status===`error`?u(`error`):u(`stopped`)}async function Ce(){let[e,t]=await Promise.all([window.wrongstackDesktop.getState(),window.wrongstackDesktop.getWebuiStatus()]);D=e,O=t,H()}async function Q(e){if(!k){k=!0,A=null,H();try{await e()}catch(e){A=we(e),console.error(e)}finally{k=!1,H()}}}window.addEventListener(`keydown`,e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),window.wrongstackDesktop.navigateWebui({action:`open-command-palette`}))}),E.addEventListener(`input`,e=>{let t=e.target;if(!t?.classList.contains(`project-search-input`))return;let n=t.selectionStart??t.value.length;z=t.value,H(),ze(n)}),E.addEventListener(`change`,e=>{let t=e.target;if(t?.dataset.action!==`set-locale`)return;let n=c.find(e=>e===t.value);n&&n!==a()&&(i(n),H())}),E.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-action]`);if(!t)return;let n=t.dataset.action,r=t.dataset.runtime;if(n===`webui-command`){let e=t.dataset.command;if(!e)return;let n=t.dataset.label??u(`command`),r=e;try{let t=JSON.parse(e);$({state:`pending`,label:n,commandKey:r}),window.wrongstackDesktop.navigateWebui(t).then(e=>{if(e){$({state:`success`,label:n,commandKey:r});return}let t=u(`launcherError`);A=t,$({state:`error`,label:n,commandKey:r,message:t})}).catch(()=>{A=u(`launcherError`),$({state:`error`,label:n,commandKey:r,message:u(`launcherError`)})})}catch{}return}if(n===`session-webui-command`){if(!r)return;let e=t.dataset.command;if(!e)return;let n=t.dataset.label??`WebUI`,i=e;try{let t=JSON.parse(e);$({state:`pending`,label:n,commandKey:`${r}:${i}`}),Q(async()=>{if(D=await window.wrongstackDesktop.activateRuntime(r),await window.wrongstackDesktop.navigateWebui(t)){$({state:`success`,label:n,commandKey:`${r}:${i}`});return}let e=u(`sessionLauncherError`);A=e,$({state:`error`,label:n,commandKey:`${r}:${i}`,message:e})})}catch{}return}if(n===`clear-error`){A=null,H();return}if(n===`clear-project-search`){z=``,H(),ze(0);return}if(n===`toggle-shell-sidebar`){I=!I,De(),window.wrongstackDesktop.setShellSidebarCollapsed(I),H();return}if(n===`select-desktop-panel`){let e=y(t.dataset.panel);if(!e)return;L=e,ke(),H();return}if(n===`set-project-tab`){let e=te(t.dataset.projectTab);if(!e)return;R=e,je(),H();return}if(n===`toggle-runtime-group`){let e=t.dataset.runtimeGroupKey;if(!e)return;let n=b(D.runtimes,u).find(t=>t.key===e);if(!n)return;F={...F,[e]:!x(n,Z())},Pe(),H();return}Q(async()=>{if(n===`open-project`)D=await window.wrongstackDesktop.openProject();else if(n===`register-project`)D=await window.wrongstackDesktop.registerProject();else if(n===`open-project-path`){let e=t.dataset.projectRoot;e&&(D=await window.wrongstackDesktop.openProject(e))}else if(n===`unregister-project`){let e=t.dataset.projectRoot;e&&(D=await window.wrongstackDesktop.unregisterProject(e))}else n===`new-project-session`?D=await window.wrongstackDesktop.openProjectSession(r):n===`open-settings`?D=await window.wrongstackDesktop.openSettings():n===`activate`&&r?D=await window.wrongstackDesktop.activateRuntime(r):n===`close`&&r?D=await window.wrongstackDesktop.closeRuntime(r):n===`open-browser`&&r?await window.wrongstackDesktop.openRuntimeInBrowser(r):n===`reveal-root`&&r?await window.wrongstackDesktop.revealRuntimeRoot(r):n===`reload-webui`&&r?await window.wrongstackDesktop.reloadWebui():n===`session-reload-webui`&&r&&(D=await window.wrongstackDesktop.activateRuntime(r),await window.wrongstackDesktop.reloadWebui())})}),window.wrongstackDesktop.onStateChanged(e=>{D=e,H()}),window.wrongstackDesktop.onWebuiStatusChanged(e=>{O=e,H()}),window.wrongstackDesktop.onShellSidebarCollapsedChanged(e=>{I=e,De(),H()}),s(()=>H()),Ce(),window.wrongstackDesktop.setShellSidebarCollapsed(I);function we(e){return e instanceof Error?e.message:typeof e==`string`?e:u(`operationFailed`)}function Te(){return Ne(j)}function Ee(){try{return window.localStorage.getItem(M)===`true`}catch{return!1}}function De(){try{window.localStorage.setItem(M,String(I))}catch{}}function Oe(){return y(Me(N))??`workspace`}function ke(){try{window.localStorage.setItem(N,L)}catch{}}function Ae(){return te(Me(P))??`recent`}function je(){try{window.localStorage.setItem(P,R)}catch{}}function Me(e){try{return window.localStorage.getItem(e)}catch{return null}}function Ne(e){try{let t=window.localStorage.getItem(e);if(!t)return{};let n=JSON.parse(t);if(!n||typeof n!=`object`||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n))typeof t==`boolean`&&(r[e]=t);return r}catch{return{}}}function Pe(){Fe(j,F)}function Fe(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function Ie(e){return JSON.stringify(e)}function Le(e){let t=e.kind===`global-settings`?u(`gs`):e.name||v(e.root),n=t.replace(/[_-]+/g,` `).split(/\s+/).filter(Boolean);return(n.length>=2?`${n[0]?.[0]??``}${n[1]?.[0]??``}`:t.slice(0,2)).toUpperCase()}function Re(){return String(_([...D.recentProjects,...D.registeredProjects]).length)}function $(e){V+=1;let t=V;B={id:t,...e},H(),e.state!==`pending`&&window.setTimeout(()=>{B?.id===t&&(B=null,H())},e.state===`success`?1250:3e3)}function ze(e){window.requestAnimationFrame(()=>{let t=document.querySelector(`.project-search-input`);if(!t)return;t.focus();let n=Math.max(0,Math.min(e,t.value.length));t.setSelectionRange(n,n)})}
371
- //# sourceMappingURL=index-DXtNdHCN.js.map
371
+ //# sourceMappingURL=index-0PiIJ5rt.js.map
@@ -8,7 +8,7 @@
8
8
  content="default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self' data:"
9
9
  />
10
10
  <title>WrongStack Desktop</title>
11
- <script type="module" crossorigin src="./assets/index-DXtNdHCN.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-0PiIJ5rt.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="./assets/index-DNaesuTF.css">
13
13
  </head>
14
14
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/desktop",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack Desktop - Electron shell for managing multiple local WrongStack runtimes.",
6
6
  "keywords": [
@@ -27,13 +27,14 @@
27
27
  },
28
28
  "files": [
29
29
  "bin",
30
- "dist"
30
+ "dist",
31
+ "!dist/**/*.map"
31
32
  ],
32
33
  "dependencies": {
33
- "@wrongstack/core": "1.0.0",
34
- "@wrongstack/webui": "1.0.0",
35
- "@wrongstack/webui-protocol": "1.0.0",
36
- "@wrongstack/webui-server": "1.0.0",
34
+ "@wrongstack/core": "1.0.3",
35
+ "@wrongstack/webui": "1.0.3",
36
+ "@wrongstack/webui-protocol": "1.0.3",
37
+ "@wrongstack/webui-server": "1.0.3",
37
38
  "electron": "^43.4.1",
38
39
  "ws": "^8.21.3",
39
40
  "zod": "^4.4.3"
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/main/agent-bridge.ts"],
4
- "sourcesContent": ["/**\n * Desktop Agent Bridge - WebSocket communication with runtimes.\n * Handles conversation management and WebSocket connections with automatic reconnection.\n */\nimport { randomUUID } from 'node:crypto';\nimport { EventEmitter } from 'node:events';\nimport {\n createSurfaceConnectionState,\n DEFAULT_SURFACE_CONNECTION_CONFIG,\n decodeProtocolFrame,\n markConnectionActivity,\n markConnectionConnecting,\n markConnectionOpen,\n planConnectionReconnect,\n resetConnection,\n type SurfaceConnectionState,\n stopConnection,\n} from '@wrongstack/webui-protocol';\nimport WebSocket from 'ws';\nimport type {\n DesktopConversationMessage,\n DesktopConversationSnapshot,\n DesktopConversationStatus,\n} from '../shared/types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface ConversationInternal {\n runtimeId: string;\n status: DesktopConversationStatus;\n sessionId?: string | undefined;\n error?: string | undefined;\n messages: DesktopConversationMessage[];\n ws: WebSocket | null;\n connectPromise: Promise<void> | null;\n activeAssistantMessageId: string | null;\n /** Reconnection state */\n reconnectAttempt: number;\n reconnectTimer: ReturnType<typeof setTimeout> | null;\n reconnectUrl: string | null;\n connectionState: SurfaceConnectionState;\n // Per-reconnect message-handler bookkeeping. The anonymous\n // `ws.on('message', \u2026)` pattern pins the socket + its closure (which\n // captures `conversation`) for the socket's full lifetime \u2014 fine for\n // open sockets, fatal across reconnects, where each new connect() leaks\n // a stale message listener + closure onto the previous (now-orphaned)\n // WebSocket. RAM-leak audit 2026-08-11, HIGH.\n onMessage: ((data: WebSocket.RawData) => void) | null;\n socketGeneration: number;\n}\n\ninterface ServerMessage {\n type: string;\n payload?: Record<string, unknown> | undefined;\n}\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\nconst MAX_MESSAGES = 300;\n\n/** Reconnection configuration */\nconst RECONNECT_CONFIG = {\n /** Maximum number of reconnection attempts (0 = disabled) */\n maxAttempts: 5,\n /** Initial delay in ms before first reconnection */\n initialDelayMs: 1000,\n /** Maximum delay in ms between reconnection attempts */\n maxDelayMs: 30000,\n /** Multiplier for exponential backoff */\n backoffMultiplier: 2,\n /** Jitter factor (0-1) to add randomness to delays */\n jitterFactor: 0.1,\n};\n\nconst DESKTOP_CONNECTION_CONFIG = {\n ...DEFAULT_SURFACE_CONNECTION_CONFIG,\n maxReconnectAttempts: RECONNECT_CONFIG.maxAttempts,\n initialBackoffMs: RECONNECT_CONFIG.initialDelayMs,\n maxBackoffMs: RECONNECT_CONFIG.maxDelayMs,\n backoffMultiplier: RECONNECT_CONFIG.backoffMultiplier,\n jitterRatio: RECONNECT_CONFIG.jitterFactor,\n};\n\n// ============================================================================\n// Bridge Implementation\n// ============================================================================\n\nexport class DesktopAgentBridge extends EventEmitter {\n private readonly conversations = new Map<string, ConversationInternal>();\n\n snapshot(runtimeId: string): DesktopConversationSnapshot {\n return publicConversation(this.getOrCreate(runtimeId));\n }\n\n /**\n * Get reconnection status for a runtime.\n */\n getReconnectStatus(runtimeId: string): { attempt: number; maxAttempts: number } | null {\n const conversation = this.conversations.get(runtimeId);\n if (!conversation) return null;\n return {\n attempt: conversation.reconnectAttempt,\n maxAttempts: RECONNECT_CONFIG.maxAttempts,\n };\n }\n\n /**\n * Force reconnection for a runtime (resets reconnection state).\n */\n forceReconnect(runtimeId: string, wsUrl: string): void {\n const conversation = this.getOrCreate(runtimeId);\n this.cancelReconnect(conversation);\n conversation.reconnectAttempt = 0;\n conversation.connectionState = resetConnection(conversation.connectionState);\n // User-triggered reconnect returns void \u2014 there is no caller to receive a\n // rejection, and connect()'s error path already records the failure state.\n // Absorb it: a dead runtime must not raise an unhandled rejection.\n void this.ensureConnected(runtimeId, wsUrl).catch(() => undefined);\n }\n\n async ensureConnected(runtimeId: string, wsUrl: string): Promise<DesktopConversationSnapshot> {\n const conversation = this.getOrCreate(runtimeId);\n\n // If already connected, return immediately\n if (conversation.ws?.readyState === WebSocket.OPEN) return publicConversation(conversation);\n\n // If currently connecting, wait for it\n if (conversation.connectPromise) {\n await conversation.connectPromise;\n return publicConversation(conversation);\n }\n\n // A user action cannot continue while only a delayed reconnect exists:\n // sendMessage() would otherwise write to a closed socket.\n if (conversation.reconnectTimer) {\n this.cancelReconnect(conversation);\n await this.connect(runtimeId, wsUrl);\n return publicConversation(conversation);\n }\n\n // Start fresh connection\n conversation.reconnectUrl = wsUrl;\n conversation.reconnectAttempt = 0;\n conversation.connectionState = resetConnection(conversation.connectionState);\n await this.connect(runtimeId, wsUrl);\n return publicConversation(conversation);\n }\n\n /**\n * Internal connect method that actually establishes the WebSocket.\n */\n private async connect(runtimeId: string, wsUrl: string): Promise<void> {\n const conversation = this.getOrCreate(runtimeId);\n\n // Cancel any pending reconnect timer\n this.cancelReconnect(conversation);\n\n conversation.status = 'connecting';\n conversation.connectionState = markConnectionConnecting(conversation.connectionState);\n conversation.error = undefined;\n this.emitChanged(conversation);\n this.emitReconnectEvent(conversation, 'connecting');\n\n // Store the in-flight connect promise so concurrent ensureConnected()\n // calls dedup through the conversation.connectPromise read at L129-130.\n // Without this, the dedup branch is dead and two parallel calls each\n // construct a fresh WebSocket \u2014 the loser's close-handler guard\n // (if (conversation.ws === ws)) means the superseded socket is never\n // closed, leaking one OPEN socket per race until close().\n const promise = new Promise<void>((resolve, reject) => {\n const ws = new WebSocket(wsUrl);\n conversation.ws = ws;\n\n // Bump the generation so a message handler from this socket knows it\n // is the current one. Each connect() call gets a unique generation,\n // so a stale socket that fires a late 'message' after its successor\n // has taken over sees a mismatch and bails before touching state.\n // RAM-leak audit 2026-08-11, HIGH.\n const myGeneration = ++conversation.socketGeneration;\n\n // Named (not anonymous) so we can detach it in close() and in the\n // 'close' handler. An anonymous ws.on('message', \u2026) was never removed,\n // so the closure pinned ConversationInternal (and its messages[],\n // ws, sessionId, \u2026) until the WebSocket was GC'd \u2014 across a reconnect\n // storm this leaked every ConversationInternal that ever connected.\n // RAM-leak audit 2026-08-11, HIGH.\n const onMessage = (data: unknown): void => {\n if (conversation.socketGeneration !== myGeneration) return;\n this.handleServerMessage(conversation, String(data));\n };\n conversation.onMessage = onMessage;\n ws.on('message', onMessage);\n\n // Set connection timeout\n const timeout = setTimeout(() => {\n if (conversation.ws === ws) {\n ws.close();\n reject(new Error('Connection timeout'));\n }\n }, 10000);\n\n ws.once('open', () => {\n clearTimeout(timeout);\n conversation.status = 'connected';\n conversation.error = undefined;\n conversation.connectPromise = null;\n conversation.reconnectAttempt = 0;\n conversation.connectionState = markConnectionOpen(conversation.connectionState);\n this.emitChanged(conversation);\n this.emitReconnectEvent(conversation, 'connected');\n resolve();\n });\n\n ws.once('error', (err) => {\n clearTimeout(timeout);\n conversation.status = 'error';\n conversation.error = err instanceof Error ? err.message : String(err);\n conversation.connectPromise = null;\n this.appendMessage(conversation, {\n role: 'system',\n text: `Connection error: ${conversation.error}`,\n });\n this.emitChanged(conversation);\n this.emitReconnectEvent(conversation, 'error');\n reject(err);\n });\n\n ws.once('close', () => {\n clearTimeout(timeout);\n // Only the socket that currently owns the conversation invalidates\n // the generation \u2014 a superseded socket closing must not clobber its\n // successor's generation, or late messages from the successor would\n // be wrongly dropped. RAM-leak audit 2026-08-11, HIGH (chimera review).\n if (conversation.ws === ws) {\n conversation.socketGeneration++;\n conversation.ws = null;\n }\n // Detach our named message handler so the closure (which retains\n // conversation) is releasable even if the ws is kept alive by the\n // runtime or pending GC. RAM-leak audit 2026-08-11, HIGH.\n ws.off('message', onMessage);\n // Only clear the tracked handler if it's still ours \u2014 a newer\n // connect() may have already installed its own. Clearing\n // unconditionally would orphan the new handler's reference,\n // making it impossible for close(runtimeId) to detach it later.\n // RAM-leak audit 2026-08-11, HIGH (chimera review Medium #1).\n if (conversation.onMessage === onMessage) {\n conversation.onMessage = null;\n }\n conversation.connectPromise = null;\n\n if (conversation.status !== 'error') {\n conversation.status = 'disconnected';\n }\n conversation.activeAssistantMessageId = null;\n this.emitChanged(conversation);\n\n // Schedule reconnection if applicable\n if (\n conversation.reconnectUrl &&\n (conversation.status === 'disconnected' || conversation.status === 'error')\n ) {\n this.scheduleReconnect(conversation);\n }\n });\n });\n conversation.connectPromise = promise;\n return promise;\n }\n\n /**\n * Schedule a reconnection attempt with exponential backoff.\n */\n private scheduleReconnect(conversation: ConversationInternal): void {\n const reconnect = planConnectionReconnect(\n conversation.connectionState,\n DESKTOP_CONNECTION_CONFIG,\n );\n conversation.connectionState = reconnect.state;\n conversation.reconnectAttempt = reconnect.state.reconnectAttempt;\n if (!reconnect.plan) {\n this.emitReconnectEvent(conversation, 'exhausted');\n return;\n }\n this.emitReconnectEvent(conversation, 'scheduled', {\n delay: reconnect.plan.delayMs,\n attempt: reconnect.plan.attempt,\n });\n\n conversation.reconnectTimer = setTimeout(() => {\n conversation.reconnectTimer = null;\n if (!conversation.reconnectUrl) return;\n\n // Check if still disconnected\n if (conversation.ws?.readyState !== WebSocket.OPEN) {\n // The reconnect loop owns failure handling: connect()'s error path\n // already records status/error and schedules the next attempt (or\n // exhausts the budget). Absorb the rejection \u2014 an automatic retry\n // firing at a dead runtime must not surface as an unhandled promise\n // rejection in the Electron main process.\n void this.connect(conversation.runtimeId, conversation.reconnectUrl).catch(\n () => undefined,\n );\n }\n }, reconnect.plan.delayMs);\n }\n\n /**\n * Cancel pending reconnection.\n */\n private cancelReconnect(conversation: ConversationInternal): void {\n if (conversation.reconnectTimer) {\n clearTimeout(conversation.reconnectTimer);\n conversation.reconnectTimer = null;\n }\n }\n\n /**\n * Emit reconnection event for UI feedback.\n */\n private emitReconnectEvent(\n conversation: ConversationInternal,\n status: 'connecting' | 'connected' | 'error' | 'scheduled' | 'exhausted',\n data?: { delay?: number; attempt?: number },\n ): void {\n this.emit('reconnect', {\n runtimeId: conversation.runtimeId,\n status,\n attempt: conversation.reconnectAttempt,\n maxAttempts: RECONNECT_CONFIG.maxAttempts,\n ...data,\n });\n }\n\n async sendMessage(\n runtimeId: string,\n wsUrl: string,\n content: string,\n ): Promise<DesktopConversationSnapshot> {\n const trimmed = content.trim();\n if (!trimmed) return this.snapshot(runtimeId);\n\n // Reset reconnection state on manual action\n const conversation = this.getOrCreate(runtimeId);\n conversation.reconnectAttempt = 0;\n conversation.connectionState = resetConnection(conversation.connectionState);\n\n await this.ensureConnected(runtimeId, wsUrl);\n\n // Refresh conversation after connect\n const conv = this.getOrCreate(runtimeId);\n this.appendMessage(conv, {\n id: `user_${randomUUID()}`,\n role: 'user',\n text: trimmed,\n });\n conv.status = 'running';\n conv.activeAssistantMessageId = null;\n this.emitChanged(conv);\n this.send(conv, {\n type: 'user_message',\n payload: {\n id: `msg_${Date.now()}_${randomUUID().slice(0, 8)}`,\n content: trimmed,\n timestamp: Date.now(),\n ...(conv.sessionId ? { sessionId: conv.sessionId } : {}),\n },\n });\n return publicConversation(conv);\n }\n\n async abort(runtimeId: string, wsUrl: string): Promise<DesktopConversationSnapshot> {\n // Reset reconnection state on manual action\n const conversation = this.getOrCreate(runtimeId);\n conversation.reconnectAttempt = 0;\n conversation.connectionState = resetConnection(conversation.connectionState);\n\n await this.ensureConnected(runtimeId, wsUrl);\n const conv = this.getOrCreate(runtimeId);\n this.send(conv, {\n type: 'abort',\n payload: conv.sessionId ? { sessionId: conv.sessionId } : {},\n });\n conv.status = 'connected';\n this.appendMessage(conv, { role: 'system', text: 'Abort requested.' });\n return publicConversation(conv);\n }\n\n close(runtimeId: string): void {\n const conversation = this.conversations.get(runtimeId);\n if (!conversation) return;\n\n // Cancel reconnection and clear state\n this.cancelReconnect(conversation);\n conversation.reconnectAttempt = 0;\n conversation.reconnectUrl = null;\n conversation.connectionState = stopConnection(conversation.connectionState);\n\n // Detach the per-reconnect message listener BEFORE nulling the ws ref.\n // Without this, the ws.on('message', \u2026) closure pins ConversationInternal\n // (and its messages[]) until the socket is GC'd. RAM-leak audit 2026-08-11, HIGH.\n if (conversation.onMessage) {\n conversation.ws?.off('message', conversation.onMessage);\n conversation.onMessage = null;\n }\n // Invalidate this conversation's generation so any in-flight socket whose\n // 'close' event fires after deletion cannot resurrect the conversation ref.\n conversation.socketGeneration++;\n conversation.ws?.close();\n conversation.ws = null;\n conversation.connectPromise = null;\n conversation.status = 'disconnected';\n conversation.activeAssistantMessageId = null;\n this.emitChanged(conversation);\n\n // Remove from the map so closed conversations don't accumulate in memory.\n this.conversations.delete(runtimeId);\n }\n\n closeAll(): void {\n // Snapshot keys first \u2014 close() deletes from the map during iteration.\n for (const runtimeId of [...this.conversations.keys()]) {\n this.close(runtimeId);\n }\n }\n\n private handleServerMessage(conversation: ConversationInternal, raw: string): void {\n const decoded = decodeProtocolFrame(raw, 'server');\n if (!decoded.ok) return;\n conversation.connectionState = markConnectionActivity(conversation.connectionState);\n const message = decoded.message as ServerMessage;\n const payload = message.payload ?? {};\n switch (message.type) {\n case 'session.start': {\n const sessionId = stringValue(payload['sessionId']);\n if (sessionId) conversation.sessionId = sessionId;\n conversation.status = conversation.status === 'running' ? 'running' : 'connected';\n this.emitChanged(conversation);\n break;\n }\n case 'provider.text_delta': {\n conversation.status = 'running';\n this.appendAssistantDelta(conversation, stringValue(payload['text']) ?? '');\n break;\n }\n case 'tool.started': {\n conversation.status = 'running';\n const name = stringValue(payload['name']) ?? 'tool';\n this.appendMessage(conversation, { role: 'tool', text: `Started ${name}` });\n break;\n }\n case 'tool.executed': {\n const name = stringValue(payload['name']) ?? 'tool';\n const ok = payload['ok'] === true;\n this.appendMessage(conversation, {\n role: 'tool',\n text: `${name} ${ok ? 'completed' : 'failed'}`,\n });\n break;\n }\n case 'provider.error':\n case 'provider.stream_error':\n case 'error': {\n const text =\n stringValue(payload['message']) ??\n stringValue(payload['description']) ??\n `${message.type} received`;\n conversation.status = 'error';\n conversation.error = text;\n this.appendMessage(conversation, { role: 'system', text });\n break;\n }\n case 'run.result': {\n const finalText = stringValue(payload['finalText']);\n // Only append the final text when this run did not already stream it\n // via text_delta into the active assistant message. Checking the\n // current run (activeAssistantMessageId) \u2014 not the last assistant\n // message in the whole history \u2014 avoids silently dropping a run whose\n // output arrives only as finalText (e.g. tool-only turns) because a\n // *prior* run's assistant message happened to have text.\n const lastMsg = conversation.messages[conversation.messages.length - 1];\n const streamedAlready =\n lastMsg?.role === 'assistant' && lastMsg.id === conversation.activeAssistantMessageId;\n if (finalText && !streamedAlready) {\n this.appendMessage(conversation, { role: 'assistant', text: finalText });\n }\n conversation.status = payload['status'] === 'failed' ? 'error' : 'connected';\n conversation.activeAssistantMessageId = null;\n this.emitChanged(conversation);\n break;\n }\n }\n }\n\n private send(conversation: ConversationInternal, message: Record<string, unknown>): void {\n if (conversation.ws?.readyState !== WebSocket.OPEN) {\n throw new Error('Runtime socket is not connected');\n }\n conversation.ws.send(JSON.stringify(message));\n }\n\n private appendAssistantDelta(conversation: ConversationInternal, text: string): void {\n if (!text) return;\n let message = conversation.messages.find((m) => m.id === conversation.activeAssistantMessageId);\n if (!message) {\n message = {\n id: `assistant_${randomUUID()}`,\n role: 'assistant',\n text: '',\n timestamp: Date.now(),\n };\n conversation.activeAssistantMessageId = message.id;\n conversation.messages.push(message);\n }\n message.text += text;\n this.trimMessages(conversation);\n this.emitChanged(conversation);\n }\n\n private appendMessage(\n conversation: ConversationInternal,\n input: Partial<DesktopConversationMessage> & Pick<DesktopConversationMessage, 'role' | 'text'>,\n ): void {\n conversation.messages.push({\n id: input.id ?? `${input.role}_${randomUUID()}`,\n role: input.role,\n text: input.text,\n timestamp: input.timestamp ?? Date.now(),\n });\n this.trimMessages(conversation);\n this.emitChanged(conversation);\n }\n\n private trimMessages(conversation: ConversationInternal): void {\n if (conversation.messages.length <= MAX_MESSAGES) return;\n conversation.messages.splice(0, conversation.messages.length - MAX_MESSAGES);\n }\n\n private getOrCreate(runtimeId: string): ConversationInternal {\n let conversation = this.conversations.get(runtimeId);\n if (conversation) return conversation;\n conversation = {\n runtimeId,\n status: 'disconnected',\n messages: [],\n ws: null,\n connectPromise: null,\n activeAssistantMessageId: null,\n reconnectAttempt: 0,\n reconnectTimer: null,\n reconnectUrl: null,\n connectionState: createSurfaceConnectionState(),\n onMessage: null,\n socketGeneration: 0,\n };\n this.conversations.set(runtimeId, conversation);\n return conversation;\n }\n\n private emitChanged(conversation: ConversationInternal): void {\n this.emit('changed', publicConversation(conversation));\n }\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction publicConversation(conversation: ConversationInternal): DesktopConversationSnapshot {\n return {\n runtimeId: conversation.runtimeId,\n status: conversation.status,\n sessionId: conversation.sessionId,\n error: conversation.error,\n messages: conversation.messages.map((message) => ({ ...message })),\n };\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n// ============================================================================\n// Reconnect Event Type (for external consumers)\n// ============================================================================\n\nexport interface DesktopBridgeReconnectEvent {\n runtimeId: string;\n status: 'connecting' | 'connected' | 'error' | 'scheduled' | 'exhausted';\n attempt: number;\n maxAttempts: number;\n delay?: number;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }