diff --git a/src/backend/database/db/index.ts b/src/backend/database/db/index.ts index f38ad243..0bb198ef 100644 --- a/src/backend/database/db/index.ts +++ b/src/backend/database/db/index.ts @@ -585,6 +585,32 @@ const migrateSchema = () => { addColumnIfNotExists("ssh_data", "socks5_password", "TEXT"); addColumnIfNotExists("ssh_data", "socks5_proxy_chain", "TEXT"); + addColumnIfNotExists( + "ssh_data", + "show_terminal_in_sidebar", + "INTEGER NOT NULL DEFAULT 1", + ); + addColumnIfNotExists( + "ssh_data", + "show_file_manager_in_sidebar", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists( + "ssh_data", + "show_tunnel_in_sidebar", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists( + "ssh_data", + "show_docker_in_sidebar", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists( + "ssh_data", + "show_server_stats_in_sidebar", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists("ssh_credentials", "private_key", "TEXT"); addColumnIfNotExists("ssh_credentials", "public_key", "TEXT"); addColumnIfNotExists("ssh_credentials", "detected_key_type", "TEXT"); diff --git a/src/backend/database/db/schema.ts b/src/backend/database/db/schema.ts index 70393d47..14860b92 100644 --- a/src/backend/database/db/schema.ts +++ b/src/backend/database/db/schema.ts @@ -90,6 +90,21 @@ export const sshData = sqliteTable("ssh_data", { enableDocker: integer("enable_docker", { mode: "boolean" }) .notNull() .default(false), + showTerminalInSidebar: integer("show_terminal_in_sidebar", { mode: "boolean" }) + .notNull() + .default(true), + showFileManagerInSidebar: integer("show_file_manager_in_sidebar", { mode: "boolean" }) + .notNull() + .default(false), + showTunnelInSidebar: integer("show_tunnel_in_sidebar", { mode: "boolean" }) + .notNull() + .default(false), + showDockerInSidebar: integer("show_docker_in_sidebar", { mode: "boolean" }) + .notNull() + .default(false), + showServerStatsInSidebar: integer("show_server_stats_in_sidebar", { mode: "boolean" }) + .notNull() + .default(false), defaultPath: text("default_path"), statsConfig: text("stats_config"), terminalConfig: text("terminal_config"), diff --git a/src/backend/database/routes/ssh.ts b/src/backend/database/routes/ssh.ts index fed3fa88..dd155da5 100644 --- a/src/backend/database/routes/ssh.ts +++ b/src/backend/database/routes/ssh.ts @@ -139,6 +139,11 @@ router.get("/db/host/internal", async (req: Request, res: Response) => { pin: !!host.pin, enableTerminal: !!host.enableTerminal, enableFileManager: !!host.enableFileManager, + showTerminalInSidebar: !!host.showTerminalInSidebar, + showFileManagerInSidebar: !!host.showFileManagerInSidebar, + showTunnelInSidebar: !!host.showTunnelInSidebar, + showDockerInSidebar: !!host.showDockerInSidebar, + showServerStatsInSidebar: !!host.showServerStatsInSidebar, tags: ["autostart"], }; }) @@ -213,6 +218,11 @@ router.get("/db/host/internal/all", async (req: Request, res: Response) => { pin: !!host.pin, enableTerminal: !!host.enableTerminal, enableFileManager: !!host.enableFileManager, + showTerminalInSidebar: !!host.showTerminalInSidebar, + showFileManagerInSidebar: !!host.showFileManagerInSidebar, + showTunnelInSidebar: !!host.showTunnelInSidebar, + showDockerInSidebar: !!host.showDockerInSidebar, + showServerStatsInSidebar: !!host.showServerStatsInSidebar, defaultPath: host.defaultPath, createdAt: host.createdAt, updatedAt: host.updatedAt, @@ -298,6 +308,11 @@ router.post( enableTunnel, enableFileManager, enableDocker, + showTerminalInSidebar, + showFileManagerInSidebar, + showTunnelInSidebar, + showDockerInSidebar, + showServerStatsInSidebar, defaultPath, tunnelConnections, jumpHosts, @@ -354,6 +369,11 @@ router.post( : null, enableFileManager: enableFileManager ? 1 : 0, enableDocker: enableDocker ? 1 : 0, + showTerminalInSidebar: showTerminalInSidebar ? 1 : 0, + showFileManagerInSidebar: showFileManagerInSidebar ? 1 : 0, + showTunnelInSidebar: showTunnelInSidebar ? 1 : 0, + showDockerInSidebar: showDockerInSidebar ? 1 : 0, + showServerStatsInSidebar: showServerStatsInSidebar ? 1 : 0, defaultPath: defaultPath || null, statsConfig: statsConfig ? JSON.stringify(statsConfig) : null, terminalConfig: terminalConfig ? JSON.stringify(terminalConfig) : null, @@ -426,6 +446,11 @@ router.post( : [], enableFileManager: !!createdHost.enableFileManager, enableDocker: !!createdHost.enableDocker, + showTerminalInSidebar: !!createdHost.showTerminalInSidebar, + showFileManagerInSidebar: !!createdHost.showFileManagerInSidebar, + showTunnelInSidebar: !!createdHost.showTunnelInSidebar, + showDockerInSidebar: !!createdHost.showDockerInSidebar, + showServerStatsInSidebar: !!createdHost.showServerStatsInSidebar, statsConfig: createdHost.statsConfig ? JSON.parse(createdHost.statsConfig as string) : undefined, @@ -569,6 +594,11 @@ router.put( enableTunnel, enableFileManager, enableDocker, + showTerminalInSidebar, + showFileManagerInSidebar, + showTunnelInSidebar, + showDockerInSidebar, + showServerStatsInSidebar, defaultPath, tunnelConnections, jumpHosts, @@ -626,6 +656,11 @@ router.put( : null, enableFileManager: enableFileManager ? 1 : 0, enableDocker: enableDocker ? 1 : 0, + showTerminalInSidebar: showTerminalInSidebar ? 1 : 0, + showFileManagerInSidebar: showFileManagerInSidebar ? 1 : 0, + showTunnelInSidebar: showTunnelInSidebar ? 1 : 0, + showDockerInSidebar: showDockerInSidebar ? 1 : 0, + showServerStatsInSidebar: showServerStatsInSidebar ? 1 : 0, defaultPath: defaultPath || null, statsConfig: statsConfig ? JSON.stringify(statsConfig) : null, terminalConfig: terminalConfig ? JSON.stringify(terminalConfig) : null, @@ -793,6 +828,11 @@ router.put( : [], enableFileManager: !!updatedHost.enableFileManager, enableDocker: !!updatedHost.enableDocker, + showTerminalInSidebar: !!updatedHost.showTerminalInSidebar, + showFileManagerInSidebar: !!updatedHost.showFileManagerInSidebar, + showTunnelInSidebar: !!updatedHost.showTunnelInSidebar, + showDockerInSidebar: !!updatedHost.showDockerInSidebar, + showServerStatsInSidebar: !!updatedHost.showServerStatsInSidebar, statsConfig: updatedHost.statsConfig ? JSON.parse(updatedHost.statsConfig as string) : undefined, @@ -928,6 +968,11 @@ router.get( quickActions: sshData.quickActions, notes: sshData.notes, enableDocker: sshData.enableDocker, + showTerminalInSidebar: sshData.showTerminalInSidebar, + showFileManagerInSidebar: sshData.showFileManagerInSidebar, + showTunnelInSidebar: sshData.showTunnelInSidebar, + showDockerInSidebar: sshData.showDockerInSidebar, + showServerStatsInSidebar: sshData.showServerStatsInSidebar, useSocks5: sshData.useSocks5, socks5Host: sshData.socks5Host, socks5Port: sshData.socks5Port, @@ -1017,6 +1062,11 @@ router.get( : [], enableFileManager: !!row.enableFileManager, enableDocker: !!row.enableDocker, + showTerminalInSidebar: !!row.showTerminalInSidebar, + showFileManagerInSidebar: !!row.showFileManagerInSidebar, + showTunnelInSidebar: !!row.showTunnelInSidebar, + showDockerInSidebar: !!row.showDockerInSidebar, + showServerStatsInSidebar: !!row.showServerStatsInSidebar, statsConfig: row.statsConfig ? JSON.parse(row.statsConfig as string) : undefined, @@ -1123,6 +1173,11 @@ router.get( jumpHosts: host.jumpHosts ? JSON.parse(host.jumpHosts) : [], quickActions: host.quickActions ? JSON.parse(host.quickActions) : [], enableFileManager: !!host.enableFileManager, + showTerminalInSidebar: !!host.showTerminalInSidebar, + showFileManagerInSidebar: !!host.showFileManagerInSidebar, + showTunnelInSidebar: !!host.showTunnelInSidebar, + showDockerInSidebar: !!host.showDockerInSidebar, + showServerStatsInSidebar: !!host.showServerStatsInSidebar, statsConfig: host.statsConfig ? JSON.parse(host.statsConfig) : undefined, diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx index 6d34a2b5..2ddbbdd7 100644 --- a/src/components/ui/tooltip.tsx +++ b/src/components/ui/tooltip.tsx @@ -36,7 +36,7 @@ function TooltipTrigger({ function TooltipContent({ className, - sideOffset = 0, + sideOffset = 4, children, ...props }: React.ComponentProps) { @@ -46,7 +46,7 @@ function TooltipContent({ data-slot="tooltip-content" sideOffset={sideOffset} className={cn( - "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance", + "bg-elevated text-foreground border border-edge-medium shadow-lg animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance", className, )} {...props} diff --git a/src/locales/en.json b/src/locales/en.json index 164640ea..812ea17e 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1108,6 +1108,19 @@ "quickActionName": "Action name", "noSnippetFound": "No snippet found", "quickActionsOrder": "Quick action buttons will appear in the order listed above on the Server Stats page", + "sidebarCustomization": "Sidebar Button Customization", + "sidebarCustomizationDesc": "Choose which actions appear as quick buttons in the sidebar. Actions not shown as buttons will appear in the dropdown menu.", + "showTerminalInSidebar": "Show Terminal Button", + "showTerminalInSidebarDesc": "Display terminal as a quick button in the sidebar", + "showFileManagerInSidebar": "Show File Manager Button", + "showFileManagerInSidebarDesc": "Display file manager as a quick button in the sidebar", + "showTunnelInSidebar": "Show Tunnel Button", + "showTunnelInSidebarDesc": "Display tunnel management as a quick button in the sidebar", + "showDockerInSidebar": "Show Docker Button", + "showDockerInSidebarDesc": "Display docker management as a quick button in the sidebar", + "showServerStatsInSidebar": "Show Server Stats Button", + "showServerStatsInSidebarDesc": "Display server statistics as a quick button in the sidebar", + "atLeastOneActionRequired": "At least one enabled action must be shown in the sidebar", "advancedAuthSettings": "Advanced Authentication Settings", "sudoPasswordAutoFill": "Sudo Password Auto-Fill", "sudoPasswordAutoFillDesc": "Automatically offer to insert SSH password when sudo prompts for password", diff --git a/src/types/index.ts b/src/types/index.ts index 786b0694..045aeb31 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -42,6 +42,11 @@ export interface SSHHost { enableTunnel: boolean; enableFileManager: boolean; enableDocker: boolean; + showTerminalInSidebar: boolean; + showFileManagerInSidebar: boolean; + showTunnelInSidebar: boolean; + showDockerInSidebar: boolean; + showServerStatsInSidebar: boolean; defaultPath: string; tunnelConnections: TunnelConnection[]; jumpHosts?: JumpHost[]; @@ -102,6 +107,11 @@ export interface SSHHostData { enableTunnel?: boolean; enableFileManager?: boolean; enableDocker?: boolean; + showTerminalInSidebar?: boolean; + showFileManagerInSidebar?: boolean; + showTunnelInSidebar?: boolean; + showDockerInSidebar?: boolean; + showServerStatsInSidebar?: boolean; defaultPath?: string; forceKeyboardInteractive?: boolean; tunnelConnections?: TunnelConnection[]; diff --git a/src/ui/desktop/apps/command-palette/CommandPalette.tsx b/src/ui/desktop/apps/command-palette/CommandPalette.tsx index a1a61bf4..ffcb74f7 100644 --- a/src/ui/desktop/apps/command-palette/CommandPalette.tsx +++ b/src/ui/desktop/apps/command-palette/CommandPalette.tsx @@ -37,6 +37,7 @@ import { DropdownMenuItem, } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button.tsx"; +import { ButtonGroup } from "@/components/ui/button-group.tsx"; interface SSHHost { id: number; @@ -364,19 +365,90 @@ export function CommandPalette({ }} className="flex items-center justify-between" > -
- - {title} +
+ + {title}
-
e.stopPropagation()} > + {host.enableTerminal && + (host.showTerminalInSidebar ?? true) && ( + + )} + + {host.enableFileManager && + (host.showFileManagerInSidebar ?? false) && ( + + )} + + {host.enableTunnel && + hasTunnelConnections && + (host.showTunnelInSidebar ?? false) && ( + + )} + + {host.enableDocker && + (host.showDockerInSidebar ?? false) && ( + + )} + + {shouldShowMetrics && + (host.showServerStatsInSidebar ?? false) && ( + + )} +
+ ); })} diff --git a/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx b/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx index 985aa5e3..79604720 100644 --- a/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx +++ b/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx @@ -514,7 +514,6 @@ export function CredentialEditor({ } backgroundColor="var(--bg-base)" /> -
) : (
- {value && ( - - )} {filteredCredentials.map((credential) => (
diff --git a/src/ui/desktop/apps/host-manager/hosts/HostManager.tsx b/src/ui/desktop/apps/host-manager/hosts/HostManager.tsx index 105c396a..f44fadb2 100644 --- a/src/ui/desktop/apps/host-manager/hosts/HostManager.tsx +++ b/src/ui/desktop/apps/host-manager/hosts/HostManager.tsx @@ -112,6 +112,7 @@ export function HostManager({ const handleTabChange = (value: string) => { if (activeTab === "add_host" && value !== "add_host") { setEditingHost(null); + lastProcessedHostIdRef.current = undefined; } if (activeTab === "add_credential" && value !== "add_credential") { setEditingCredential(null); diff --git a/src/ui/desktop/apps/host-manager/hosts/HostManagerEditor.tsx b/src/ui/desktop/apps/host-manager/hosts/HostManagerEditor.tsx index 752df715..29853b6b 100644 --- a/src/ui/desktop/apps/host-manager/hosts/HostManagerEditor.tsx +++ b/src/ui/desktop/apps/host-manager/hosts/HostManagerEditor.tsx @@ -418,6 +418,11 @@ export function HostManagerEditor({ ) .optional(), enableDocker: z.boolean().default(false), + showTerminalInSidebar: z.boolean().default(true), + showFileManagerInSidebar: z.boolean().default(false), + showTunnelInSidebar: z.boolean().default(false), + showDockerInSidebar: z.boolean().default(false), + showServerStatsInSidebar: z.boolean().default(false), }) .superRefine((data, ctx) => { if (data.authType === "none") { @@ -475,6 +480,21 @@ export function HostManagerEditor({ }); } }); + + const hasAtLeastOneSidebarAction = + (data.enableTerminal && data.showTerminalInSidebar) || + (data.enableFileManager && data.showFileManagerInSidebar) || + (data.enableTunnel && data.showTunnelInSidebar) || + (data.enableDocker && data.showDockerInSidebar) || + data.showServerStatsInSidebar; + + if (!hasAtLeastOneSidebarAction) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: t("hosts.atLeastOneActionRequired"), + path: ["showTerminalInSidebar"], + }); + } }); type FormData = z.infer; @@ -500,6 +520,11 @@ export function HostManagerEditor({ enableTerminal: true, enableTunnel: true, enableFileManager: true, + showTerminalInSidebar: true, + showFileManagerInSidebar: false, + showTunnelInSidebar: false, + showDockerInSidebar: false, + showServerStatsInSidebar: false, defaultPath: "/", tunnelConnections: [], jumpHosts: [], @@ -671,6 +696,11 @@ export function HostManagerEditor({ ? cleanedHost.socks5ProxyChain : [], enableDocker: Boolean(cleanedHost.enableDocker), + showTerminalInSidebar: cleanedHost.showTerminalInSidebar ?? true, + showFileManagerInSidebar: cleanedHost.showFileManagerInSidebar ?? false, + showTunnelInSidebar: cleanedHost.showTunnelInSidebar ?? false, + showDockerInSidebar: cleanedHost.showDockerInSidebar ?? false, + showServerStatsInSidebar: cleanedHost.showServerStatsInSidebar ?? false, }; if ( @@ -731,6 +761,11 @@ export function HostManagerEditor({ terminalConfig: DEFAULT_TERMINAL_CONFIG, forceKeyboardInteractive: false, enableDocker: false, + showTerminalInSidebar: true, + showFileManagerInSidebar: false, + showTunnelInSidebar: false, + showDockerInSidebar: false, + showServerStatsInSidebar: false, }; form.reset(defaultFormData as FormData); @@ -1073,7 +1108,6 @@ export function HostManagerEditor({ } backgroundColor="var(--bg-base)" /> - - +

{t("hosts.importJsonTitle")} @@ -952,10 +949,7 @@ export function HostManagerViewer({ onEditHost }: SSHManagerHostViewerProps) { {importing ? t("hosts.importing") : t("hosts.importJson")} - +

{t("hosts.importJsonTitle")} diff --git a/src/ui/desktop/apps/host-manager/hosts/tabs/HostGeneralTab.tsx b/src/ui/desktop/apps/host-manager/hosts/tabs/HostGeneralTab.tsx index a4df9a01..e0b56584 100644 --- a/src/ui/desktop/apps/host-manager/hosts/tabs/HostGeneralTab.tsx +++ b/src/ui/desktop/apps/host-manager/hosts/tabs/HostGeneralTab.tsx @@ -611,6 +611,132 @@ export function HostGeneralTab({ + + {t("hosts.sidebarCustomization")} + + + + {t("hosts.sidebarCustomizationDesc")} + + + + {form.watch("enableTerminal") && ( + ( + +

+ {t("hosts.showTerminalInSidebar")} + + {t("hosts.showTerminalInSidebarDesc")} + +
+ + + + + )} + /> + )} + + {form.watch("enableFileManager") && ( + ( + +
+ + {t("hosts.showFileManagerInSidebar")} + + + {t("hosts.showFileManagerInSidebarDesc")} + +
+ + + +
+ )} + /> + )} + + {form.watch("enableTunnel") && ( + ( + +
+ {t("hosts.showTunnelInSidebar")} + + {t("hosts.showTunnelInSidebarDesc")} + +
+ + + +
+ )} + /> + )} + + {form.watch("enableDocker") && ( + ( + +
+ {t("hosts.showDockerInSidebar")} + + {t("hosts.showDockerInSidebarDesc")} + +
+ + + +
+ )} + /> + )} + + ( + +
+ {t("hosts.showServerStatsInSidebar")} + + {t("hosts.showServerStatsInSidebarDesc")} + +
+ + + +
+ )} + /> + + + {t("hosts.advancedAuthSettings")} diff --git a/src/ui/desktop/navigation/animations/SimpleLoader.tsx b/src/ui/desktop/navigation/animations/SimpleLoader.tsx index 446f2f9d..28584c76 100644 --- a/src/ui/desktop/navigation/animations/SimpleLoader.tsx +++ b/src/ui/desktop/navigation/animations/SimpleLoader.tsx @@ -44,7 +44,7 @@ export function SimpleLoader({
- {host.enableTerminal && ( + {host.enableTerminal && (host.showTerminalInSidebar ?? true) && ( + )} + + {host.enableTunnel && + hasTunnelConnections && + (host.showTunnelInSidebar ?? false) && ( + + )} + + {host.enableDocker && (host.showDockerInSidebar ?? false) && ( + + )} + + {shouldShowMetrics && (host.showServerStatsInSidebar ?? false) && ( + + )} + @@ -182,40 +231,53 @@ export function Host({ host: initialHost }: HostProps): React.ReactElement { side="right" className="w-56 bg-canvas border-edge text-foreground" > - {shouldShowMetrics && ( + {host.enableTerminal && !(host.showTerminalInSidebar ?? true) && ( - addTab({ type: "server_stats", title, hostConfig: host }) - } + onClick={handleTerminalClick} className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" > - - {t("hosts.openServerStats")} + + {t("hosts.openTerminal")} )} - {host.enableFileManager && ( - - addTab({ type: "file_manager", title, hostConfig: host }) - } - className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" - > - - {t("hosts.openFileManager")} - - )} - {host.enableTunnel && hasTunnelConnections && ( - - addTab({ type: "tunnel", title, hostConfig: host }) - } - className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" - > - - {t("hosts.openTunnels")} - - )} - {host.enableDocker && ( + {shouldShowMetrics && + !(host.showServerStatsInSidebar ?? false) && ( + + addTab({ type: "server_stats", title, hostConfig: host }) + } + className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" + > + + {t("hosts.openServerStats")} + + )} + {host.enableFileManager && + !(host.showFileManagerInSidebar ?? false) && ( + + addTab({ type: "file_manager", title, hostConfig: host }) + } + className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" + > + + {t("hosts.openFileManager")} + + )} + {host.enableTunnel && + hasTunnelConnections && + !(host.showTunnelInSidebar ?? false) && ( + + addTab({ type: "tunnel", title, hostConfig: host }) + } + className="flex items-center gap-2 cursor-pointer px-3 py-2 hover:bg-hover text-foreground-secondary" + > + + {t("hosts.openTunnels")} + + )} + {host.enableDocker && !(host.showDockerInSidebar ?? false) && ( addTab({ type: "docker", title, hostConfig: host }) diff --git a/src/ui/main-axios.ts b/src/ui/main-axios.ts index ec6e79e5..1a747c16 100644 --- a/src/ui/main-axios.ts +++ b/src/ui/main-axios.ts @@ -959,6 +959,11 @@ export async function createSSHHost(hostData: SSHHostData): Promise { enableTunnel: Boolean(hostData.enableTunnel), enableFileManager: Boolean(hostData.enableFileManager), enableDocker: Boolean(hostData.enableDocker), + showTerminalInSidebar: Boolean(hostData.showTerminalInSidebar), + showFileManagerInSidebar: Boolean(hostData.showFileManagerInSidebar), + showTunnelInSidebar: Boolean(hostData.showTunnelInSidebar), + showDockerInSidebar: Boolean(hostData.showDockerInSidebar), + showServerStatsInSidebar: Boolean(hostData.showServerStatsInSidebar), defaultPath: hostData.defaultPath || "/", tunnelConnections: hostData.tunnelConnections || [], jumpHosts: hostData.jumpHosts || [], @@ -1033,6 +1038,11 @@ export async function updateSSHHost( enableTunnel: Boolean(hostData.enableTunnel), enableFileManager: Boolean(hostData.enableFileManager), enableDocker: Boolean(hostData.enableDocker), + showTerminalInSidebar: Boolean(hostData.showTerminalInSidebar), + showFileManagerInSidebar: Boolean(hostData.showFileManagerInSidebar), + showTunnelInSidebar: Boolean(hostData.showTunnelInSidebar), + showDockerInSidebar: Boolean(hostData.showDockerInSidebar), + showServerStatsInSidebar: Boolean(hostData.showServerStatsInSidebar), defaultPath: hostData.defaultPath || "/", tunnelConnections: hostData.tunnelConnections || [], jumpHosts: hostData.jumpHosts || [],