@@ -9,14 +9,15 @@ interface SyncBarProps {
99 structureChanged : boolean ;
1010 syncStatus : "idle" | "running" | "error" ;
1111 syncMessage : string | null ;
12+ projectPath : string | undefined ;
1213 onSync : ( ) => void ;
1314 onCancelSync : ( ) => void ;
1415 onDismissMessage : ( ) => void ;
1516 onDismissDrift : ( ) => void ;
1617 onNavigateToNode ?: ( nodeId : string ) => void ;
1718}
1819
19- export function SyncBar ( { activeAgent, driftedNodes, structureChanged, syncStatus, syncMessage, onSync, onCancelSync, onDismissMessage, onDismissDrift, onNavigateToNode } : SyncBarProps ) {
20+ export function SyncBar ( { activeAgent, driftedNodes, structureChanged, syncStatus, syncMessage, projectPath , onSync, onCancelSync, onDismissMessage, onDismissDrift, onNavigateToNode } : SyncBarProps ) {
2021 const [ expanded , setExpanded ] = useState ( false ) ;
2122 const sortedDriftedNodes = useMemo (
2223 ( ) => [ ...driftedNodes ] . sort ( ( a , b ) => a . nodeName . localeCompare ( b . nodeName ) ) ,
@@ -34,25 +35,43 @@ export function SyncBar({ activeAgent, driftedNodes, structureChanged, syncStatu
3435 return ( ) => clearTimeout ( timer ) ;
3536 } , [ isSuccess ] ) ;
3637
37- // Don't render at all if no agent is available
38- if ( ! activeAgent ?. available ) return null ;
38+ // Don't render if no agent and no useful state to show
39+ if ( ! activeAgent ?. available && projectPath ) return null ;
40+ if ( ! activeAgent ?. available && ! projectPath ) {
41+ return (
42+ < div className = "shrink-0 border-t border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 select-none" >
43+ < div className = "flex items-center h-7 px-3 gap-3 text-[11px]" >
44+ < div className = "flex items-center gap-1.5 text-zinc-400 dark:text-zinc-500" >
45+ < span > No codebase linked yet</ span >
46+ </ div >
47+ </ div >
48+ </ div >
49+ ) ;
50+ }
3951
40- const agentName = activeAgent . name ;
52+ const agentName = activeAgent ! . name ;
4153
4254 return (
4355 < div className = "shrink-0 border-t border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 select-none" >
4456 { /* Main bar row */ }
4557 < div className = "flex items-center h-7 px-3 gap-3 text-[11px]" >
46- { /* Agent identity */ }
47- < div className = "flex items-center gap-1.5 shrink-0" >
48- < div className = "h-1.5 w-1.5 rounded-full bg-emerald-500 shrink-0" />
49- < span className = "text-zinc-500 dark:text-zinc-400 font-medium" > { agentName } </ span >
50- </ div >
51-
52- < div className = "w-px h-3 bg-zinc-200 dark:bg-zinc-700" />
58+ { /* Agent identity — only when linked to a codebase */ }
59+ { projectPath ? (
60+ < >
61+ < div className = "flex items-center gap-1.5 shrink-0" >
62+ < div className = "h-1.5 w-1.5 rounded-full bg-emerald-500 shrink-0" />
63+ < span className = "text-zinc-500 dark:text-zinc-400 font-medium" > { agentName } </ span >
64+ </ div >
65+ < div className = "w-px h-3 bg-zinc-200 dark:bg-zinc-700" />
66+ </ >
67+ ) : null }
5368
5469 { /* Sync status */ }
55- { syncStatus === "running" ? (
70+ { ! projectPath ? (
71+ < div className = "flex items-center gap-1.5 text-zinc-400 dark:text-zinc-500" >
72+ < span > No codebase linked yet</ span >
73+ </ div >
74+ ) : syncStatus === "running" ? (
5675 < >
5776 < div className = "flex items-center gap-1.5 text-amber-600 dark:text-amber-400" >
5877 < Loader2 className = "h-3 w-3 animate-spin" />
0 commit comments