fix: show about settings only on mobile
Hides About from desktop settings navigation and command palette Keeps About available in mobile settings
This commit is contained in:
+18
-1
@@ -6,7 +6,24 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
- Security: LAN and remote browser access now require a UI password before the server will start.
|
- Security: LAN and remote browser access now require a UI password before the server will start.
|
||||||
- Desktop: if LAN access was enabled without a password, the app now starts locally and asks for a password before turning LAN access back on.
|
- Desktop: if LAN access was enabled without a password, the app now starts locally and asks for a password before turning LAN access back on.
|
||||||
- Git: worktree status and commit integration now use dedicated Git actions behind the scenes.
|
- Chat: file paths inside fenced code blocks are now clickable, including line and column targets (thanks to @robertoberto).
|
||||||
|
- Chat: context breakdowns now show message previews and cache hit rates (thanks to @robertoberto, @raz123).
|
||||||
|
- Chat: custom-answer question textareas resize more steadily while typing (thanks to @bigcoder84).
|
||||||
|
- Chat/Input: tab-completing a mention no longer changes the selected agent (thanks to @Quat3rnion).
|
||||||
|
- Chat/Input: Arrow Up moves the cursor inside multi-line drafts again instead of always opening prompt history.
|
||||||
|
- Files: added dedicated PDF files previews mode.
|
||||||
|
- Files: added an optional docked files editor toolbar (thanks to @robertoberto).
|
||||||
|
- Sessions: session menus now include a delete action (thanks to @ShogunPanda).
|
||||||
|
- Sessions: deleting a parent session no longer brings deleted child sessions back into the sidebar (thanks to @panzeyu2013).
|
||||||
|
- Sessions: switching sessions no longer leaves the chat area blank in some cases (thanks to @panzeyu2013).
|
||||||
|
- Sessions: selected rows now highlight across the full sidebar gutter.
|
||||||
|
- Comments: inline file/diff comment drafts now stay in place when focus changes.
|
||||||
|
- GitHub: GitHub settings can now use credentials from the `gh` CLI when available (thanks to @tomzx).
|
||||||
|
- Settings/MCP: importing MCP snippets from OpenCode config works again (thanks to @youzini).
|
||||||
|
- Usage: added Cursor plan as a usage-tracking provider..
|
||||||
|
- Notifications: notification streams now stay connected more reliably behind proxies (thanks to @kostazol).
|
||||||
|
- Mobile: the empty Changes view keeps a close control visible (thanks to @lilyzhaun).
|
||||||
|
- Security: file previews and downloads now reject paths outside the allowed workspace unless access has been granted.
|
||||||
|
|
||||||
## [1.12.4] - 2026-06-11
|
## [1.12.4] - 2026-06-11
|
||||||
|
|
||||||
|
|||||||
@@ -265,8 +265,8 @@ export const CommandPalette: React.FC = () => {
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
const settingsRuntimeCtx = React.useMemo<SettingsRuntimeContext>(() => {
|
const settingsRuntimeCtx = React.useMemo<SettingsRuntimeContext>(() => {
|
||||||
const isDesktop = isDesktopShell();
|
const isDesktop = isDesktopShell();
|
||||||
return { isVSCode: isVSCodeRuntime(), isWeb: !isDesktop && isWebRuntime(), isDesktop };
|
return { isVSCode: isVSCodeRuntime(), isWeb: !isDesktop && isWebRuntime(), isDesktop, isMobile };
|
||||||
}, []);
|
}, [isMobile]);
|
||||||
|
|
||||||
const settingsEntries = React.useMemo<CommandEntry[]>(() => {
|
const settingsEntries = React.useMemo<CommandEntry[]>(() => {
|
||||||
return SETTINGS_PAGE_METADATA
|
return SETTINGS_PAGE_METADATA
|
||||||
|
|||||||
@@ -109,10 +109,10 @@ const pageOrder: SettingsPageSlug[] = [
|
|||||||
const SNIPPETS_SETTINGS_ICON = { icon: 'chat-thread' } as const;
|
const SNIPPETS_SETTINGS_ICON = { icon: 'chat-thread' } as const;
|
||||||
const ADD_PROVIDER_SETTINGS_ID = '__add_provider__';
|
const ADD_PROVIDER_SETTINGS_ID = '__add_provider__';
|
||||||
|
|
||||||
function buildRuntimeContext(isDesktop: boolean): SettingsRuntimeContext {
|
function buildRuntimeContext(isDesktop: boolean, isMobile: boolean): SettingsRuntimeContext {
|
||||||
const isVSCode = isVSCodeRuntime();
|
const isVSCode = isVSCodeRuntime();
|
||||||
const isWeb = !isDesktop && isWebRuntime();
|
const isWeb = !isDesktop && isWebRuntime();
|
||||||
return { isVSCode, isWeb, isDesktop };
|
return { isVSCode, isWeb, isDesktop, isMobile };
|
||||||
}
|
}
|
||||||
|
|
||||||
function isPageAvailable(page: SettingsPageMeta, ctx: SettingsRuntimeContext): boolean {
|
function isPageAvailable(page: SettingsPageMeta, ctx: SettingsRuntimeContext): boolean {
|
||||||
@@ -333,7 +333,7 @@ export const SettingsView: React.FC<SettingsViewProps> = ({ onClose, forceMobile
|
|||||||
|
|
||||||
// keep platform check available for future window chrome tweaks
|
// keep platform check available for future window chrome tweaks
|
||||||
|
|
||||||
const runtimeCtx = React.useMemo(() => buildRuntimeContext(isDesktopApp), [isDesktopApp]);
|
const runtimeCtx = React.useMemo(() => buildRuntimeContext(isDesktopApp, isMobile), [isDesktopApp, isMobile]);
|
||||||
|
|
||||||
const visiblePages = React.useMemo(() => {
|
const visiblePages = React.useMemo(() => {
|
||||||
const allowedPages = visiblePageSlugs ? new Set<SettingsPageSlug>(visiblePageSlugs) : null;
|
const allowedPages = visiblePageSlugs ? new Set<SettingsPageSlug>(visiblePageSlugs) : null;
|
||||||
@@ -532,12 +532,12 @@ export const SettingsView: React.FC<SettingsViewProps> = ({ onClose, forceMobile
|
|||||||
const settingsSearchResults = React.useMemo(() => {
|
const settingsSearchResults = React.useMemo(() => {
|
||||||
return buildSettingsSearchResults({
|
return buildSettingsSearchResults({
|
||||||
query: settingsSearchQuery,
|
query: settingsSearchQuery,
|
||||||
runtimeCtx: { ...runtimeCtx, isMobile, isDesktopLocalOrigin },
|
runtimeCtx: { ...runtimeCtx, isDesktopLocalOrigin },
|
||||||
visiblePageSlugs,
|
visiblePageSlugs,
|
||||||
t,
|
t,
|
||||||
getPageTitle,
|
getPageTitle,
|
||||||
});
|
});
|
||||||
}, [getPageTitle, isDesktopLocalOrigin, isMobile, runtimeCtx, settingsSearchQuery, t, visiblePageSlugs]);
|
}, [getPageTitle, isDesktopLocalOrigin, runtimeCtx, settingsSearchQuery, t, visiblePageSlugs]);
|
||||||
|
|
||||||
const prepareSettingsSearchTarget = React.useCallback((result: SettingsSearchResult): string => {
|
const prepareSettingsSearchTarget = React.useCallback((result: SettingsSearchResult): string => {
|
||||||
if (result.id.startsWith('agents.')) {
|
if (result.id.startsWith('agents.')) {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ export interface SettingsRuntimeContext {
|
|||||||
isVSCode: boolean;
|
isVSCode: boolean;
|
||||||
isWeb: boolean;
|
isWeb: boolean;
|
||||||
isDesktop: boolean;
|
isDesktop: boolean;
|
||||||
|
isMobile: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SettingsPageMeta {
|
export interface SettingsPageMeta {
|
||||||
@@ -205,7 +206,7 @@ export const SETTINGS_PAGE_METADATA: readonly SettingsPageMeta[] = [
|
|||||||
{ slug: 'notifications', title: 'Notifications', group: 'general', kind: 'single', keywords: ['alerts', 'native', 'summary', 'summarization'], },
|
{ slug: 'notifications', title: 'Notifications', group: 'general', kind: 'single', keywords: ['alerts', 'native', 'summary', 'summarization'], },
|
||||||
{ slug: 'voice', title: 'Voice', group: 'advanced', kind: 'single', keywords: ['tts', 'speech', 'voice'], isAvailable: (ctx) => !ctx.isVSCode },
|
{ slug: 'voice', title: 'Voice', group: 'advanced', kind: 'single', keywords: ['tts', 'speech', 'voice'], isAvailable: (ctx) => !ctx.isVSCode },
|
||||||
{ slug: 'tunnel', title: 'Remote Tunnel', group: 'advanced', kind: 'single', keywords: ['tunnel', 'cloudflare', 'qr', 'remote', 'mobile', 'share'], isAvailable: (ctx) => !ctx.isVSCode },
|
{ slug: 'tunnel', title: 'Remote Tunnel', group: 'advanced', kind: 'single', keywords: ['tunnel', 'cloudflare', 'qr', 'remote', 'mobile', 'share'], isAvailable: (ctx) => !ctx.isVSCode },
|
||||||
{ slug: 'about', title: 'About', group: 'advanced', kind: 'single', keywords: ['about', 'version', 'updates', 'release', 'changelog'], },
|
{ slug: 'about', title: 'About', group: 'advanced', kind: 'single', keywords: ['about', 'version', 'updates', 'release', 'changelog'], isAvailable: (ctx) => ctx.isMobile },
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
export const LEGACY_SIDEBAR_SECTION_TO_SETTINGS_SLUG: Record<SidebarSection, SettingsPageSlug> = {
|
export const LEGACY_SIDEBAR_SECTION_TO_SETTINGS_SLUG: Record<SidebarSection, SettingsPageSlug> = {
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
- Chat: custom-answer question textareas resize more steadily while typing (thanks to @bigcoder84).
|
||||||
|
- Chat/Input: tab-completing a mention no longer changes the selected agent (thanks to @Quat3rnion).
|
||||||
|
- Chat/Input: Arrow Up moves the cursor inside multi-line drafts again instead of always opening prompt history.
|
||||||
|
- Sessions: session menus now include a delete action (thanks to @ShogunPanda).
|
||||||
|
- Sessions: deleting a parent session no longer brings deleted child sessions back into the sidebar (thanks to @panzeyu2013).
|
||||||
|
- Sessions: switching sessions no longer leaves the chat area blank in some cases (thanks to @panzeyu2013).
|
||||||
|
- Settings/MCP: importing MCP snippets from OpenCode config works again (thanks to @youzini).
|
||||||
|
|
||||||
## [1.12.4] - 2026-06-11
|
## [1.12.4] - 2026-06-11
|
||||||
|
|
||||||
- Agent Manager: creating isolated runs now opens sessions immediately while worktree setup continues in the background.
|
- Agent Manager: creating isolated runs now opens sessions immediately while worktree setup continues in the background.
|
||||||
|
|||||||
Reference in New Issue
Block a user