diff --git a/CHANGELOG.md b/CHANGELOG.md index f03d79e5..d930ec01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ All notable changes to this project will be documented in this file. - **Chat context attachments:** diff comments, terminal selections, browser annotations, linked issues/PRs and the rest now appear in the conversation as compact context cards instead of walls of raw text. - **Session tabs (opt-in):** the web/desktop header can show open sessions as browser-style tabs (Settings → General → Navigation). A tab switches the whole workspace; closing one never touches the session itself. - Sessions: switching is much faster in large workspaces — the sidebar no longer rebuilds on switch and recently viewed sessions restore their rendered messages; end-to-end switch time roughly halved with thousands of loaded sessions (thanks to @c-w-xiaohei). -- Permission cards answer to the keyboard: Alt+Enter allows once, Alt+Shift+Enter allows always, Alt+Backspace denies — the keys are printed on the buttons. The auto-accept toggle got Cmd/Ctrl+K, A. +- Permission: cards answer to the keyboard Alt+Enter allows once, Alt+Shift+Enter allows always, Alt+Backspace denies — the keys are printed on the buttons. The auto-accept toggle got Cmd/Ctrl+K, A. - Sessions: Cmd/Ctrl+Alt+Left/Right steps back and forward through the sessions you opened in this window, browser-history style; with session tabs enabled it moves between neighbouring tabs instead. - Git: Cmd/Ctrl+Enter in the commit message box commits. Diff review moves between changed files with Alt+Down/Up, expanding a collapsed file on arrival. - Chat: Cmd/Ctrl+Shift+T now cycles through every thinking level offered by the selected model instead of skipping levels after reaching the end (thanks to @nimobeeren). diff --git a/packages/ui/src/components/layout/Header.tsx b/packages/ui/src/components/layout/Header.tsx index 154ba5a5..2d48185d 100644 --- a/packages/ui/src/components/layout/Header.tsx +++ b/packages/ui/src/components/layout/Header.tsx @@ -434,7 +434,6 @@ export const Header: React.FC = () => { const { t } = useI18n(); const isSidebarOpen = useUIStore((state) => state.isSidebarOpen); const openContextOverview = useUIStore((state) => state.openContextOverview); - const openContextPlan = useUIStore((state) => state.openContextPlan); const closeContextPanel = useUIStore((state) => state.closeContextPanel); const shortcutOverrides = useUIStore((state) => state.shortcutOverrides); const sessionTabsEnabled = useUIStore((state) => state.sessionTabsEnabled); @@ -1263,21 +1262,6 @@ export const Header: React.FC = () => { const isContextPanelActive = activeContextMode === 'context'; - const handleOpenContextPlan = React.useCallback(() => { - const directory = normalize(openDirectory || ''); - if (!directory) { - return; - } - - const panelState = useUIStore.getState().contextPanelByDirectory[directory]; - if (getActiveContextMode(panelState) === 'plan') { - closeContextPanel(directory); - return; - } - - openContextPlan(directory); - }, [closeContextPanel, openContextPlan, openDirectory]); - const desktopHeaderIconButtonClass = DESKTOP_HEADER_ICON_BUTTON_CLASS; // Left padding the header needs to clear the OS window controls (macOS @@ -1448,16 +1432,6 @@ export const Header: React.FC = () => { return formatShortcutForDisplay(getEffectiveShortcutCombo(actionId, shortcutOverrides)); }, [shortcutOverrides]); - // Desktop keeps instances only: quota and MCP now live in the work-status - // panel, which reports them per session rather than per window. The mobile - // menu below is untouched — it has no panel to defer to. - const servicesTabs = React.useMemo(() => { - const base: Array<{ value: 'instance' | 'usage' | 'mcp'; label: string; icon: React.ReactNode }> = []; - if (isDesktopApp) { - base.push({ value: 'instance', label: t('layout.services.instance'), icon: }); - } - return base; - }, [isDesktopApp, t]); useKeybinds({ diff --git a/packages/ui/src/contexts/ThemeSystemContext.tsx b/packages/ui/src/contexts/ThemeSystemContext.tsx index cc3a3604..681e2caf 100644 --- a/packages/ui/src/contexts/ThemeSystemContext.tsx +++ b/packages/ui/src/contexts/ThemeSystemContext.tsx @@ -7,7 +7,6 @@ import React, { } from 'react'; import { flushSync } from 'react-dom'; import type { Theme, ThemeMode } from '@/types/theme'; -import type { DesktopSettings } from '@/lib/desktop'; import { isDesktopLocalOriginActive, isDesktopShell as detectDesktopShell, isVSCodeRuntime } from '@/lib/desktop'; import { setDesktopWindowTheme } from '@/lib/desktopNative'; import { CSSVariableGenerator } from '@/lib/theme/cssGenerator'; diff --git a/packages/ui/src/stores/useOpenInAppsStore.ts b/packages/ui/src/stores/useOpenInAppsStore.ts index 149791d9..39e17074 100644 --- a/packages/ui/src/stores/useOpenInAppsStore.ts +++ b/packages/ui/src/stores/useOpenInAppsStore.ts @@ -1,6 +1,6 @@ import { create } from 'zustand'; -import { fetchDesktopInstalledApps, isDesktopLocalOriginActive, isDesktopShell, type DesktopSettings, type InstalledDesktopAppInfo } from '@/lib/desktop'; +import { fetchDesktopInstalledApps, isDesktopLocalOriginActive, isDesktopShell, type InstalledDesktopAppInfo } from '@/lib/desktop'; import { OPEN_IN_APPS, DEFAULT_OPEN_IN_APP_ID, OPEN_IN_ALWAYS_AVAILABLE_APP_IDS, getOpenInAppById, getPlatformOpenInApp, type OpenInApp } from '@/lib/openInApps'; import { type SettingsSyncedDetail, updateDesktopSettings } from '@/lib/persistence'; diff --git a/packages/ui/src/stores/useUIStore.ts b/packages/ui/src/stores/useUIStore.ts index 5eceb243..8ec57362 100644 --- a/packages/ui/src/stores/useUIStore.ts +++ b/packages/ui/src/stores/useUIStore.ts @@ -819,7 +819,6 @@ interface UIStore { openContextFile: (directory: string, filePath: string) => void; openContextFileAtLine: (directory: string, filePath: string, line: number, column?: number) => void; openContextOverview: (directory: string) => void; - openContextPlan: (directory: string) => void; openContextPreview: (directory: string, url: string) => void; openContextBrowser: (directory: string, url?: string, options?: { reveal?: boolean }) => void; openNewContextBrowserTab: (directory: string) => void; @@ -1321,15 +1320,6 @@ export const useUIStore = create()( get().openContextPanelTab(normalizedDirectory, { mode: 'context' }); }, - openContextPlan: (directory) => { - const normalizedDirectory = normalizeDirectoryPath((directory || '').trim()); - if (!normalizedDirectory) { - return; - } - - get().openContextPanelTab(normalizedDirectory, { mode: 'plan' }); - }, - openContextPreview: (directory, url) => { const normalizedDirectory = normalizeDirectoryPath((directory || '').trim()); const normalizedUrl = (url || '').trim();