diff --git a/apps/desktop/electron/main.ts b/apps/desktop/electron/main.ts index dfb4747f0392..b9e966067a38 100644 --- a/apps/desktop/electron/main.ts +++ b/apps/desktop/electron/main.ts @@ -9272,8 +9272,8 @@ ipcMain.handle('hermes:window:openInstance', async () => { // shortcuts and the View menu. Reads and writes target the asking window. ipcMain.handle('hermes:zoom:get', event => { const window = BrowserWindow.fromWebContents(event.sender) - const level = - window && !window.isDestroyed() ? window.webContents.getZoomLevel() : DEFAULT_ZOOM_LEVEL + + const level = window && !window.isDestroyed() ? window.webContents.getZoomLevel() : DEFAULT_ZOOM_LEVEL return { level, percent: zoomLevelToPercent(level) } }) diff --git a/apps/desktop/src/app/session/hooks/use-session-actions/index.ts b/apps/desktop/src/app/session/hooks/use-session-actions/index.ts index 9ec65d78d028..266a33b65fd2 100644 --- a/apps/desktop/src/app/session/hooks/use-session-actions/index.ts +++ b/apps/desktop/src/app/session/hooks/use-session-actions/index.ts @@ -558,6 +558,7 @@ export function useSessionActions({ resetViewSync() setSelectedStoredSessionId(storedSessionId) selectedStoredSessionIdRef.current = storedSessionId + // A session is EITHER the main thread OR a tile — never both. openSessionTile // enforces this from the tile side (it refuses to tile the selected session); // this enforces it from the main side. Loading an existing session into main @@ -570,6 +571,7 @@ export function useSessionActions({ if ($sessionTiles.get().some(t => t.storedSessionId === storedSessionId)) { closeSessionTile(storedSessionId) } + // Optimistically clear any prior resume-failure latch for this session: // we're attempting a fresh resume, so the self-heal in use-route-resume // must not keep treating it as stranded. It's re-armed below only if THIS diff --git a/apps/desktop/src/app/shell/model-menu-panel.tsx b/apps/desktop/src/app/shell/model-menu-panel.tsx index 5fd4c9691c8a..8ca63f5afd6d 100644 --- a/apps/desktop/src/app/shell/model-menu-panel.tsx +++ b/apps/desktop/src/app/shell/model-menu-panel.tsx @@ -259,7 +259,11 @@ export function ModelMenuPanel({ gateway, onSelectModel, profile = 'default', re textValue="" > {group.provider.name} - + {!collapsed && group.families.map(family => { diff --git a/apps/desktop/src/components/model-visibility-dialog.tsx b/apps/desktop/src/components/model-visibility-dialog.tsx index 995e1d9adbda..8b80c3d5d0d9 100644 --- a/apps/desktop/src/components/model-visibility-dialog.tsx +++ b/apps/desktop/src/components/model-visibility-dialog.tsx @@ -108,9 +108,11 @@ export function ModelVisibilityDialog({ } const allFamilies = collapseModelFamilies(provider.models ?? []) + const onCount = allFamilies.filter(family => visible.has(modelVisibilityKey(provider.slug, family.id)) ).length + const checkState = onCount === 0 ? false : onCount === allFamilies.length ? true : 'indeterminate' const collapsed = collapsedProviders.includes(provider.slug) && !q @@ -138,15 +140,16 @@ export function ModelVisibilityDialog({ const key = modelVisibilityKey(provider.slug, family.id) return ( -