From d144c81d17a0dd2096fe9e7667623c6e8d8ec366 Mon Sep 17 00:00:00 2001 From: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Date: Sun, 23 Aug 2026 14:18:38 +0800 Subject: [PATCH] fix(app): preserve session shell while loading (#44315) --- packages/app/src/session/route.tsx | 36 +++++++++++++----------- packages/app/src/session/screen.tsx | 13 ++++++--- packages/app/src/shell/routes/routes.tsx | 19 ++++++++++--- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/packages/app/src/session/route.tsx b/packages/app/src/session/route.tsx index c5d040bf815..86319ef5a61 100644 --- a/packages/app/src/session/route.tsx +++ b/packages/app/src/session/route.tsx @@ -15,7 +15,7 @@ import { SessionUIProvider } from "@/shell/routes/session-ui-provider" import { useTabs } from "@/shell/tabs/tabs" import { requireServerKey } from "@/shell/routes/session" import { useSessionModel } from "./model" -import { SessionPanelFrame, SessionRouteFrame } from "./session-frame" +import { SessionPanelFrame } from "./session-frame" import { IncompatibleServerPanel } from "./incompatible-server-panel" import { SessionErrorFallback } from "./route-error" import { createSessionResolution } from "./session-resolution" @@ -31,7 +31,7 @@ export function TargetSessionRouteContent() { params.id} /> - + @@ -45,16 +45,14 @@ function TargetSessionSettingsCommand() { } function SessionRouteErrorBoundary( - props: ParentProps<{ sessionID?: string; serverKey?: ServerConnection.Key; padded?: boolean }>, + props: ParentProps<{ sessionID?: string; serverKey?: ServerConnection.Key }>, ) { return ( ( - - - - - + + + )} > {props.children} @@ -78,16 +76,14 @@ function ResolvedTargetSessionRoute() { - - tabs.removeSessionTab({ server: server.key, sessionId: params.id })} - /> - - + + tabs.removeSessionTab({ server: server.key, sessionId: params.id })} + /> + } > - + }> {(value) => ( @@ -100,6 +96,14 @@ function ResolvedTargetSessionRoute() { ) } +function SessionStatePanel(props: ParentProps) { + return ( +
+ {props.children} +
+ ) +} + function TargetSessionPage() { const location = useWorkspaceLocation() const server = useServerSDK() diff --git a/packages/app/src/session/screen.tsx b/packages/app/src/session/screen.tsx index 122b9775ddc..99bb5cdeaac 100644 --- a/packages/app/src/session/screen.tsx +++ b/packages/app/src/session/screen.tsx @@ -8,7 +8,7 @@ import { useSettings } from "@/settings/model" import { MessageTimeline } from "@/session/timeline/message-timeline" import type { SessionModel } from "@/session/model" import { SESSION_PANEL_WIDTH_MIN } from "@/session/session-panel-width" -import { SessionPanelFrame, SessionRouteFrame } from "@/session/session-frame" +import { SessionPanelFrame } from "@/session/session-frame" import { TerminalPanel } from "@/session/terminal/panel" import { useUsageExceededDialogs } from "./usage-exceeded-dialogs" import { SessionErrorFallback } from "./route-error" @@ -58,10 +58,15 @@ export function SessionScreen(props: { session: SessionModel }) { const sessionPanelContent = () => ( <> - {timeline.resource() ?? ""} + {/* Surface query errors without suspending session metadata while messages load. */} + + {(error) => { + throw error() + }} +
@@ -117,7 +122,7 @@ export function SessionScreen(props: { session: SessionModel }) { ) return ( - + <>
@@ -220,6 +225,6 @@ export function SessionScreen(props: { session: SessionModel }) {
-
+ ) } diff --git a/packages/app/src/shell/routes/routes.tsx b/packages/app/src/shell/routes/routes.tsx index 42851b62234..e81b606d4ca 100644 --- a/packages/app/src/shell/routes/routes.tsx +++ b/packages/app/src/shell/routes/routes.tsx @@ -1,9 +1,10 @@ import { Route, useParams } from "@solidjs/router" -import { createMemo, lazy, Show, type ParentProps } from "solid-js" +import { createMemo, lazy, Show, Suspense, type ParentProps } from "solid-js" import { Home } from "@/home/route" import { ServerProvider } from "@/runtime/server/current" import { useGlobal } from "@/runtime/server/runtime" import { ServerConnection } from "@/runtime/server/registry" +import { SessionPanelFrame, SessionRouteFrame } from "@/session/session-frame" import { LayoutProvider } from "@/shell/state/layout" import Shell from "@/shell/shell" import { requireServerKey } from "./session" @@ -31,9 +32,19 @@ export function AppRoutes() { ( - - - + + + +
+ } + > + + + + + )} />