@@ -831,7 +831,7 @@ export function AiPanel({ activeSession, splitSession, allSessions, getTerminalC
831831function PillSelect < T extends string > ( {
832832 options, value, onChange, align = 'left' ,
833833} : {
834- options : { id : T ; label : string ; short : string ; icon ?: JSX . Element ; dimColor : string ; activeColor : string } [ ]
834+ options : { id : T ; label : string ; short : string ; icon ?: JSX . Element ; dimColor : string ; activeColor : string ; desc ?: string } [ ]
835835 value : T
836836 onChange : ( v : T ) => void
837837 align ?: 'left' | 'right'
@@ -873,7 +873,7 @@ function PillSelect<T extends string>({
873873 transform : align === 'right' ? 'translate(-100%, -100%)' : 'translateY(-100%)' ,
874874 zIndex : 9999 ,
875875 } }
876- className = "bg-popover border border-border/80 rounded-lg shadow-2xl min-w-[148px ] py-1 overflow-hidden"
876+ className = "bg-popover border border-border/80 rounded-lg shadow-2xl min-w-[200px ] py-1 overflow-hidden"
877877 >
878878 { options . map ( ( opt ) => {
879879 const isActive = value === opt . id
@@ -882,15 +882,22 @@ function PillSelect<T extends string>({
882882 key = { opt . id }
883883 onClick = { ( ) => { onChange ( opt . id ) ; setOpen ( false ) } }
884884 className = { cn (
885- 'w-full flex items-center gap-2.5 px-3 py-1.5 text-[12px] transition-colors text-left' ,
885+ 'w-full flex items-start gap-2.5 px-3 py-2 text-[12px] transition-colors text-left' ,
886886 isActive
887887 ? `${ opt . activeColor } bg-muted/60`
888888 : 'text-muted-foreground hover:text-foreground hover:bg-muted/40'
889889 ) }
890890 >
891- { opt . icon && < span className = "shrink-0" > { opt . icon } </ span > }
892- < span className = "flex-1" > { opt . label } </ span >
893- { isActive && < Check className = "w-3 h-3 shrink-0 opacity-80" /> }
891+ { opt . icon && < span className = "shrink-0 mt-0.5" > { opt . icon } </ span > }
892+ < span className = "flex-1 min-w-0" >
893+ < span className = "block font-medium leading-snug" > { opt . label } </ span >
894+ { opt . desc && (
895+ < span className = { cn ( 'block text-[10px] leading-relaxed mt-0.5' , isActive ? 'opacity-70' : 'text-muted-foreground/60' ) } >
896+ { opt . desc }
897+ </ span >
898+ ) }
899+ </ span >
900+ { isActive && < Check className = "w-3 h-3 shrink-0 opacity-80 mt-0.5" /> }
894901 </ button >
895902 )
896903 } ) }
@@ -928,16 +935,19 @@ function AgentModeSelector({ value, onChange }: { value: AiMode; onChange: (v: A
928935 options = { [
929936 {
930937 id : 'read-only' , label : 'Read Only' , short : 'Read Only' ,
938+ desc : 'Diagnose only — no changes to the device. Show, ping, ls, ps…' ,
931939 icon : < ShieldCheck className = "w-3 h-3" /> ,
932940 dimColor : 'text-emerald-500/70' , activeColor : 'text-emerald-400' ,
933941 } ,
934942 {
935943 id : 'fix' , label : 'Fix Mode' , short : 'Fix Mode' ,
944+ desc : 'Can apply config changes, but asks your approval before each command.' ,
936945 icon : < Wrench className = "w-3 h-3" /> ,
937946 dimColor : 'text-amber-500/70' , activeColor : 'text-amber-400' ,
938947 } ,
939948 {
940949 id : 'auto-pilot' , label : 'Auto Pilot' , short : 'Auto Pilot' ,
950+ desc : 'Executes commands automatically without stopping. Use with caution.' ,
941951 icon : < Zap className = "w-3 h-3" /> ,
942952 dimColor : 'text-red-500/70' , activeColor : 'text-red-400' ,
943953 } ,
0 commit comments