Add Windows Electron desktop support (#1093)

* fix: make upstream sync actions target the selected remote

Ensure fetch and pull actually honor upstream selection so fork maintenance works from the Git sidebar, and surface upstream branch status alongside the primary origin-tracking indicators.

* feat: add Windows Electron desktop foundation

* fix(electron): stabilize Windows desktop packaging

* fix(electron): stabilize Windows desktop chrome

Use native Windows titlebar behavior with an Alt-accessible hidden menu, and harden Windows dev command launching so the desktop app follows platform conventions.

* fix(electron): stabilize Windows dev startup

* fix(electron): clarify desktop artifact names

* fix(electron): harden Windows desktop release and launch

* fix(electron): address Windows release review

* fix(electron): point updater and release links to org repo

* Fix Windows settings persistence fallback

* Fix Windows Electron dev startup

* Add Windows Electron window controls

* Fix Windows Electron install and opencode launch

* fix: resolve git status for repositories without upstream

Fixes repository detection stuck on Checking repository
Handles git status when no upstream is configured
Adds regression coverage for git status loading

* Add Windows app menu button

* fix: preserve file editor line endings

* ci: add desktop release smoke workflow

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Dave Otero
2026-05-26 18:13:59 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent cc7969ac00
commit becd240168
59 changed files with 2260 additions and 246 deletions
+11 -1
View File
@@ -506,6 +506,9 @@ export const dict: Record<I18nKey, string> = {
"gitView.header.noProfiles": "No hay perfiles disponibles para aplicar.",
"gitView.header.removeRemoteAria": "Eliminar remoto",
"gitView.header.removeRemoteTitle": "Eliminar remoto",
"gitView.header.upstreamSynced": "sincronizado",
"gitView.header.upstreamTooltip": "Comparado con {target}.",
"gitView.header.upstreamTooltipTracking": "Comparado con {target}. Los indicadores principales de sincronización aún reflejan {tracking}.",
"gitView.history.binary": "Binario",
"gitView.history.binaryNoDiff": "Archivo binario — no hay diff disponible",
"gitView.history.commitsPlaceholder": "Buscar commits...",
@@ -763,7 +766,7 @@ export const dict: Record<I18nKey, string> = {
"gitView.toast.mergedIntoBranch": "Merge de {branch} en {currentBranch}",
"gitView.toast.pulledFilesPlural": "Se trajeron {count} archivos de {name}",
"gitView.toast.pulledFilesSingle": "Se trajo {count} archivo de {name}",
"gitView.toast.pushedToUpstream": "Enviado al upstream",
"gitView.toast.pushedToUpstream": "Enviado a {name}",
"gitView.toast.commitOrStashBeforeSync": "Haz commit o stash de tus cambios antes de sincronizar",
"gitView.toast.alreadyUpToDate": "Ya está actualizado",
"gitView.toast.syncedPulledPluralAndPushed": "Se trajeron {count} archivos de {name} y se envió al upstream",
@@ -1225,6 +1228,8 @@ export const dict: Record<I18nKey, string> = {
"helpDialog.proTips.themeCycling": "El ciclo de tema recuerda tu preferencia entre sesiones",
"header.actions.rightSidebarWithShortcut": "Barra lateral derecha ({shortcut})",
"header.actions.toggleRightSidebarAria": "Mostrar u ocultar barra lateral derecha",
"header.actions.openAppMenu": "Menú de OpenChamber",
"header.actions.openAppMenuAria": "Abrir menú de OpenChamber",
"header.actions.openSessionsWithShortcut": "Abrir sesiones ({shortcut})",
"header.actions.openSessionsAria": "Abrir sesiones",
"header.actions.closeSessionsAria": "Cerrar sesiones",
@@ -2051,6 +2056,11 @@ export const dict: Record<I18nKey, string> = {
"header.actions.newMiniChatAria": "Abrir una nueva ventana Mini Chat",
"header.actions.openSessionMiniChat": "Abrir sesión en Mini Chat",
"header.actions.openSessionMiniChatAria": "Abrir la sesión actual en Mini Chat",
"header.windowControls.groupAria": "Controles de ventana",
"header.windowControls.minimize": "Minimizar ventana",
"header.windowControls.maximize": "Maximizar ventana",
"header.windowControls.restore": "Restaurar ventana",
"header.windowControls.close": "Cerrar ventana",
"errorBoundary.title": "Algo salió mal",
"errorBoundary.description": "La aplicación encontró un error inesperado. Esto se ha registrado para depuración.",
"errorBoundary.state.unknownError": "Error desconocido",