diff --git a/surfaces/gui/src/components/Composer.tsx b/surfaces/gui/src/components/Composer.tsx index 67663eff..a0fa586a 100644 --- a/surfaces/gui/src/components/Composer.tsx +++ b/surfaces/gui/src/components/Composer.tsx @@ -24,10 +24,19 @@ import { // kept so saved sessions and configs keep working. Auto-Approve ("auto-approve") is the // reviewer mode (spec: reviewed-auto-mode.md); it appears only when the server says the // feature flag is on, wired in the settings pass — until then the picker omits it. -const PERMISSION_OPTIONS: Option[] = [ +// `note` renders as a second, dimmer line under the description; `caution` prefixes the +// label with a warning triangle. Both are picker-local extensions of Dropdown's Option. +type ModeOption = Option & { note?: string; caution?: boolean }; + +const PERMISSION_OPTIONS: ModeOption[] = [ { value: "discuss", label: "Discuss", description: "Chat and explore — no edits or commands" }, { value: "interactive", label: "Ask for approval", description: "Ask before edits and commands" }, - { value: "auto", label: "Bypass approvals", description: "Run everything without asking — approvals off" }, + { + value: "auto", + label: "Bypass approvals", + description: "Run everything without asking — approvals off", + caution: true, + }, ]; // No hardcoded model fallback: until the server supplies the list (a few seconds after a @@ -877,13 +886,22 @@ function ModeMenu({ > + {o.caution && ( + + )} {o.label} {o.value === mode && } {o.description} + {o.note && ( + + {o.note} + + )} ))} {onUnattendedChange && ( diff --git a/surfaces/gui/src/components/Icon.tsx b/surfaces/gui/src/components/Icon.tsx index cf366719..da3b5ce8 100644 --- a/surfaces/gui/src/components/Icon.tsx +++ b/surfaces/gui/src/components/Icon.tsx @@ -42,6 +42,7 @@ export type IconName = | "table" | "mic" | "stop" + | "warning" | "x"; export function Icon({ @@ -182,6 +183,16 @@ export function Icon({ ); + case "warning": + // Caution triangle (Lucide-style): rounded triangle + exclamation. Marks the + // bypass-approvals mode in the picker — the one option that switches approvals off. + return ( + + + + + + ); case "folderPlus": // Same clean folder body + a centered plus (Lucide-style). return (