diff --git a/apps/web/src/components/ChatView.browser.tsx b/apps/web/src/components/ChatView.browser.tsx index 06cbf0efbd..be9d5f9ac7 100644 --- a/apps/web/src/components/ChatView.browser.tsx +++ b/apps/web/src/components/ChatView.browser.tsx @@ -1041,6 +1041,19 @@ describe("ChatView timeline estimator parity (full app)", () => { }, ); + it("shows an explicit empty state for projects without threads in the sidebar", async () => { + const mounted = await mountChatView({ + viewport: DEFAULT_VIEWPORT, + snapshot: createDraftOnlySnapshot(), + }); + + try { + await expect.element(page.getByText("No threads yet")).toBeInTheDocument(); + } finally { + await mounted.cleanup(); + } + }); + it("opens the project cwd for draft threads without a worktree path", async () => { setDraftThreadWithoutWorktree(); diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index 100d0e3f47..b3b07e32fb 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -1050,6 +1050,7 @@ export default function Sidebar() { const renderedThreads = pinnedCollapsedThread ? [pinnedCollapsedThread] : visibleProjectThreads; + const showEmptyThreadState = project.expanded && projectThreads.length === 0; return { hasHiddenThreads, @@ -1058,6 +1059,7 @@ export default function Sidebar() { projectStatus, projectThreads, renderedThreads, + showEmptyThreadState, shouldShowThreadPanel, isThreadListExpanded, }; @@ -1203,6 +1205,7 @@ export default function Sidebar() { projectStatus, projectThreads, renderedThreads, + showEmptyThreadState, shouldShowThreadPanel, isThreadListExpanded, } = renderedProject; @@ -1535,6 +1538,16 @@ export default function Sidebar() { ref={attachThreadListAutoAnimateRef} className="mx-1 my-0 w-full translate-x-0 gap-0.5 overflow-hidden px-1.5 py-0" > + {shouldShowThreadPanel && showEmptyThreadState ? ( + +
+ No threads yet +
+
+ ) : null} {shouldShowThreadPanel && renderedThreads.map((thread) => renderThreadRow(thread))} {project.expanded && hasHiddenThreads && !isThreadListExpanded && (