diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx
index 7b59530c955..6596edc9fef 100644
--- a/apps/web/src/components/ChatView.tsx
+++ b/apps/web/src/components/ChatView.tsx
@@ -3152,6 +3152,13 @@ function ChatViewContent(props: ChatViewProps) {
if (!activeThreadRef) return;
useRightPanelStore.getState().open(activeThreadRef, "agents");
}, [activeThreadRef]);
+ const addPlanSurface = useCallback(() => {
+ if (!activeThreadRef) return;
+ if (activeThreadKey) {
+ clearPlanSidebarDismissal(activeThreadKey);
+ }
+ useRightPanelStore.getState().open(activeThreadRef, "plan");
+ }, [activeThreadKey, activeThreadRef]);
const openFileSurface = useCallback(
(relativePath: string) => {
if (!activeThreadRef || !activeProject) return;
@@ -6316,6 +6323,7 @@ function ChatViewContent(props: ChatViewProps) {
onAddDiff={addDiffSurface}
onAddFiles={addFilesSurface}
onAddAgents={addAgentsSurface}
+ onAddPlan={addPlanSurface}
browserAvailable={isPreviewSupportedInRuntime()}
diffAvailable={isServerThread && isGitRepo}
filesAvailable={activeProject !== null}
@@ -6344,6 +6352,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}