Skip to content

Commit 98d77b3

Browse files
feat: add inline descriptions to agent mode dropdown options
1 parent adca7e4 commit 98d77b3

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

src/renderer/src/components/ai/AiPanel.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ export function AiPanel({ activeSession, splitSession, allSessions, getTerminalC
831831
function 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

Comments
 (0)