From be79ea4d2e2299e5f2e2060f68bbf1b22299c096 Mon Sep 17 00:00:00 2001 From: Sebastian Gottschlich Date: Thu, 6 Aug 2026 23:19:53 +0200 Subject: [PATCH 1/2] feat(web): add Plan tab to right panel picker Add an entry point for the task/plan panel in the right panel's empty state and the "+" add-surface menu, alongside Diff/Browser/Files/ Terminal/Agents. Previously the plan panel could only appear automatically when steps arrived, with no manual way to open it. --- apps/web/src/components/ChatView.tsx | 6 ++++++ apps/web/src/components/RightPanelTabs.tsx | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 7b59530c955..e5f3b92a60d 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -3152,6 +3152,10 @@ function ChatViewContent(props: ChatViewProps) { if (!activeThreadRef) return; useRightPanelStore.getState().open(activeThreadRef, "agents"); }, [activeThreadRef]); + const addPlanSurface = useCallback(() => { + if (!activeThreadRef) return; + useRightPanelStore.getState().open(activeThreadRef, "plan"); + }, [activeThreadRef]); const openFileSurface = useCallback( (relativePath: string) => { if (!activeThreadRef || !activeProject) return; @@ -6316,6 +6320,7 @@ function ChatViewContent(props: ChatViewProps) { onAddDiff={addDiffSurface} onAddFiles={addFilesSurface} onAddAgents={addAgentsSurface} + onAddPlan={addPlanSurface} browserAvailable={isPreviewSupportedInRuntime()} diffAvailable={isServerThread && isGitRepo} filesAvailable={activeProject !== null} @@ -6344,6 +6349,7 @@ function ChatViewContent(props: ChatViewProps) { onAddDiff={addDiffSurface} onAddFiles={addFilesSurface} onAddAgents={addAgentsSurface} + onAddPlan={addPlanSurface} browserAvailable={isPreviewSupportedInRuntime()} diffAvailable={isServerThread && isGitRepo} filesAvailable={activeProject !== null} diff --git a/apps/web/src/components/RightPanelTabs.tsx b/apps/web/src/components/RightPanelTabs.tsx index b0f18f6e126..834e06379ec 100644 --- a/apps/web/src/components/RightPanelTabs.tsx +++ b/apps/web/src/components/RightPanelTabs.tsx @@ -45,6 +45,7 @@ interface RightPanelTabsProps { onAddDiff: () => void; onAddFiles: () => void; onAddAgents: () => void; + onAddPlan: () => void; browserAvailable: boolean; diffAvailable: boolean; filesAvailable: boolean; @@ -93,6 +94,7 @@ function RightPanelEmptyState(props: { onAddDiff: () => void; onAddFiles: () => void; onAddAgents: () => void; + onAddPlan: () => void; browserAvailable: boolean; diffAvailable: boolean; filesAvailable: boolean; @@ -138,6 +140,14 @@ function RightPanelEmptyState(props: { disabledReason: null, onClick: props.onAddAgents, }, + { + label: "Plan", + description: "View plan steps and tasks.", + icon: ClipboardList, + available: true, + disabledReason: null, + onClick: props.onAddPlan, + }, ] as const; return ( @@ -484,6 +494,10 @@ export function RightPanelTabs(props: RightPanelTabsProps) { Agents + + + Plan + ) : null} @@ -499,6 +513,7 @@ export function RightPanelTabs(props: RightPanelTabsProps) { onAddDiff={props.onAddDiff} onAddFiles={props.onAddFiles} onAddAgents={props.onAddAgents} + onAddPlan={props.onAddPlan} browserAvailable={props.browserAvailable} diffAvailable={props.diffAvailable} filesAvailable={props.filesAvailable} From d73fc488d540311bb5d8d9b4561ac55707a24a55 Mon Sep 17 00:00:00 2001 From: Sebastian Gottschlich Date: Fri, 7 Aug 2026 08:47:06 +0200 Subject: [PATCH 2/2] fix(web): clear plan dismissal when opening plan tab manually addPlanSurface opened the plan panel without clearing the dismissal flag, so if the plan had been dismissed earlier in the turn, opening it manually from the empty state or "+" menu wouldn't clear it and could block the panel from auto-opening for later plan steps. --- apps/web/src/components/ChatView.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index e5f3b92a60d..6596edc9fef 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -3154,8 +3154,11 @@ function ChatViewContent(props: ChatViewProps) { }, [activeThreadRef]); const addPlanSurface = useCallback(() => { if (!activeThreadRef) return; + if (activeThreadKey) { + clearPlanSidebarDismissal(activeThreadKey); + } useRightPanelStore.getState().open(activeThreadRef, "plan"); - }, [activeThreadRef]); + }, [activeThreadKey, activeThreadRef]); const openFileSurface = useCallback( (relativePath: string) => { if (!activeThreadRef || !activeProject) return;