- {showWorktreeLevel
- ? buckets.map((bucket) => {
- const worktreeExpanded = isWorktreeExpanded(node, bucket);
- const isActiveWt = activeWorktreePath === bucket.path;
- return (
-
-
- {worktreeExpanded ? (
- (() => {
- const bucketKey = `${node.project.id}::${bucket.key}`;
- const showAll = Boolean(normalizedQuery) || expandedBucketsAll.has(bucketKey);
- const visibleSessions = showAll
- ? bucket.sessions
- : bucket.sessions.slice(0, SESSIONS_PER_BUCKET);
- const remaining = bucket.sessions.length - visibleSessions.length;
- return (
-
- {visibleSessions.map((session) => (
- handleSelectSession(session)}
- />
- ))}
- {remaining > 0 ? (
-
- setExpandedBucketsAll((previous) => {
- const next = new Set(previous);
- next.add(bucketKey);
- return next;
- })
- }
- />
- ) : null}
-
- );
- })()
- ) : null}
-
- );
- })
- : (() => {
- const bucket = buckets[0];
- if (!bucket) return null;
- const bucketKey = `${node.project.id}::${bucket.key}`;
- const showAll = Boolean(normalizedQuery) || expandedBucketsAll.has(bucketKey);
- const visibleSessions = showAll
- ? bucket.sessions
- : bucket.sessions.slice(0, SESSIONS_PER_BUCKET);
- const remaining = bucket.sessions.length - visibleSessions.length;
- return (
-
- {visibleSessions.map((session) => (
-
handleSelectSession(session)}
- />
- ))}
- {remaining > 0 ? (
-
- setExpandedBucketsAll((previous) => {
- const next = new Set(previous);
- next.add(bucketKey);
- return next;
- })
+ {(() => {
+ // Root (project-level) sessions always render as a flat list
+ // at the top — same as a project without worktrees — never
+ // hidden behind a worktree-style group.
+ const rootBucket = buckets.find((bucket) => bucket.worktree === null);
+ const worktreeBuckets = buckets.filter((bucket) => bucket.worktree !== null);
+ return (
+ <>
+ {rootBucket && rootBucket.sessions.length > 0
+ ? renderBucketSessions(node, rootBucket, PROJECT_SESSION_INDENT)
+ : null}
+ {worktreeBuckets.map((bucket) => {
+ const worktreeExpanded = isWorktreeExpanded(node, bucket);
+ const isActiveWt = activeWorktreePath === bucket.path;
+ return (
+
+
- );
- })()}
+ style={{ touchAction: 'manipulation' }}
+ >
+
+
+
+ {bucket.label}
+
+ {isActiveWt ? (
+
+ ) : null}
+
+ {bucket.sessions.length}
+
+
+ {worktreeExpanded
+ ? renderBucketSessions(node, bucket, WORKTREE_SESSION_INDENT)
+ : null}
+
+ );
+ })}
+ >
+ );
+ })()}
) : null}