@@ -15,8 +15,8 @@ use cortex_core::widgets::{Brain, Message, MessageRole};
1515use cortex_tui_components:: welcome_card:: { InfoCard , InfoCardPair , ToLines , WelcomeCard } ;
1616
1717use crate :: app:: {
18- AppState , ApprovalState , InlineApprovalSelection , RiskLevelSelection ,
19- SubagentDisplayStatus , SubagentTaskDisplay ,
18+ AppState , ApprovalState , InlineApprovalSelection , RiskLevelSelection , SubagentDisplayStatus ,
19+ SubagentTaskDisplay ,
2020} ;
2121use crate :: ui:: colors:: AdaptiveColors ;
2222use crate :: ui:: consts:: border;
@@ -997,7 +997,12 @@ pub fn render_motd_compact(
997997/// │ [1] Low [2] Medium [3] High [Esc] Cancel │
998998/// ╰─────────────────────────────────────────────────────────╯
999999/// ```
1000- pub fn render_inline_approval ( area : Rect , buf : & mut Buffer , approval : & ApprovalState , colors : & AdaptiveColors ) {
1000+ pub fn render_inline_approval (
1001+ area : Rect ,
1002+ buf : & mut Buffer ,
1003+ approval : & ApprovalState ,
1004+ colors : & AdaptiveColors ,
1005+ ) {
10011006 if area. is_empty ( ) || area. height < 4 {
10021007 return ;
10031008 }
@@ -1057,42 +1062,72 @@ pub fn render_inline_approval(area: Rect, buf: &mut Buffer, approval: &ApprovalS
10571062 if approval. show_risk_submenu {
10581063 // Risk level submenu content
10591064 let y = area. y + 1 ;
1060-
1065+
10611066 // Build risk level options
10621067 let mut spans: Vec < Span < ' static > > = Vec :: new ( ) ;
1063-
1068+
10641069 let low_selected = approval. selected_risk_level == RiskLevelSelection :: Low ;
10651070 let med_selected = approval. selected_risk_level == RiskLevelSelection :: Medium ;
10661071 let high_selected = approval. selected_risk_level == RiskLevelSelection :: High ;
1067-
1072+
10681073 // [1] Low
1069- spans. push ( Span :: styled ( "[1]" , if low_selected { accent_style } else { dim_style } ) ) ;
1070- spans. push ( Span :: styled ( " Low " , if low_selected {
1071- Style :: default ( ) . fg ( colors. success )
1072- } else {
1073- dim_style
1074- } ) ) ;
1075-
1074+ spans. push ( Span :: styled (
1075+ "[1]" ,
1076+ if low_selected {
1077+ accent_style
1078+ } else {
1079+ dim_style
1080+ } ,
1081+ ) ) ;
1082+ spans. push ( Span :: styled (
1083+ " Low " ,
1084+ if low_selected {
1085+ Style :: default ( ) . fg ( colors. success )
1086+ } else {
1087+ dim_style
1088+ } ,
1089+ ) ) ;
1090+
10761091 // [2] Medium
1077- spans. push ( Span :: styled ( "[2]" , if med_selected { accent_style } else { dim_style } ) ) ;
1078- spans. push ( Span :: styled ( " Medium " , if med_selected {
1079- Style :: default ( ) . fg ( colors. warning )
1080- } else {
1081- dim_style
1082- } ) ) ;
1083-
1092+ spans. push ( Span :: styled (
1093+ "[2]" ,
1094+ if med_selected {
1095+ accent_style
1096+ } else {
1097+ dim_style
1098+ } ,
1099+ ) ) ;
1100+ spans. push ( Span :: styled (
1101+ " Medium " ,
1102+ if med_selected {
1103+ Style :: default ( ) . fg ( colors. warning )
1104+ } else {
1105+ dim_style
1106+ } ,
1107+ ) ) ;
1108+
10841109 // [3] High
1085- spans. push ( Span :: styled ( "[3]" , if high_selected { accent_style } else { dim_style } ) ) ;
1086- spans. push ( Span :: styled ( " High " , if high_selected {
1087- Style :: default ( ) . fg ( colors. error )
1088- } else {
1089- dim_style
1090- } ) ) ;
1091-
1110+ spans. push ( Span :: styled (
1111+ "[3]" ,
1112+ if high_selected {
1113+ accent_style
1114+ } else {
1115+ dim_style
1116+ } ,
1117+ ) ) ;
1118+ spans. push ( Span :: styled (
1119+ " High " ,
1120+ if high_selected {
1121+ Style :: default ( ) . fg ( colors. error )
1122+ } else {
1123+ dim_style
1124+ } ,
1125+ ) ) ;
1126+
10921127 // [Esc] Cancel
10931128 spans. push ( Span :: styled ( "[Esc]" , dim_style) ) ;
10941129 spans. push ( Span :: styled ( " Cancel" , dim_style) ) ;
1095-
1130+
10961131 let line = Line :: from ( spans) ;
10971132 Paragraph :: new ( line) . render (
10981133 Rect :: new ( content_x, y, area. width . saturating_sub ( 4 ) , 1 ) ,
@@ -1104,12 +1139,19 @@ pub fn render_inline_approval(area: Rect, buf: &mut Buffer, approval: &ApprovalS
11041139 let y1 = area. y + 1 ;
11051140 let warning_char = "⚠" ;
11061141 let tool_display = format ! ( " Execute: {}" , approval. tool_name) ;
1107- buf. set_string ( content_x, y1, warning_char, Style :: default ( ) . fg ( colors. warning ) ) ;
1142+ buf. set_string (
1143+ content_x,
1144+ y1,
1145+ warning_char,
1146+ Style :: default ( ) . fg ( colors. warning ) ,
1147+ ) ;
11081148 buf. set_string (
11091149 content_x + 2 ,
11101150 y1,
11111151 & tool_display,
1112- Style :: default ( ) . fg ( colors. text ) . add_modifier ( Modifier :: BOLD ) ,
1152+ Style :: default ( )
1153+ . fg ( colors. text )
1154+ . add_modifier ( Modifier :: BOLD ) ,
11131155 ) ;
11141156
11151157 // Line 2: args summary (truncated)
@@ -1124,37 +1166,67 @@ pub fn render_inline_approval(area: Rect, buf: &mut Buffer, approval: &ApprovalS
11241166
11251167 // Line 3: Action buttons
11261168 let y3 = area. y + 3 ;
1127-
1169+
11281170 let mut spans: Vec < Span < ' static > > = Vec :: new ( ) ;
1129-
1171+
11301172 let reject_selected = approval. selected_action == InlineApprovalSelection :: Reject ;
11311173 let accept_selected = approval. selected_action == InlineApprovalSelection :: AcceptOnce ;
11321174 let set_selected = approval. selected_action == InlineApprovalSelection :: AcceptAndSet ;
1133-
1175+
11341176 // [n] Reject
1135- spans. push ( Span :: styled ( "[n]" , if reject_selected { accent_style } else { dim_style } ) ) ;
1136- spans. push ( Span :: styled ( " Reject " , if reject_selected {
1137- Style :: default ( ) . fg ( colors. error )
1138- } else {
1139- dim_style
1140- } ) ) ;
1141-
1177+ spans. push ( Span :: styled (
1178+ "[n]" ,
1179+ if reject_selected {
1180+ accent_style
1181+ } else {
1182+ dim_style
1183+ } ,
1184+ ) ) ;
1185+ spans. push ( Span :: styled (
1186+ " Reject " ,
1187+ if reject_selected {
1188+ Style :: default ( ) . fg ( colors. error )
1189+ } else {
1190+ dim_style
1191+ } ,
1192+ ) ) ;
1193+
11421194 // [y] Accept Once
1143- spans. push ( Span :: styled ( "[y]" , if accept_selected { accent_style } else { dim_style } ) ) ;
1144- spans. push ( Span :: styled ( " Accept Once " , if accept_selected {
1145- Style :: default ( ) . fg ( colors. success )
1146- } else {
1147- dim_style
1148- } ) ) ;
1149-
1195+ spans. push ( Span :: styled (
1196+ "[y]" ,
1197+ if accept_selected {
1198+ accent_style
1199+ } else {
1200+ dim_style
1201+ } ,
1202+ ) ) ;
1203+ spans. push ( Span :: styled (
1204+ " Accept Once " ,
1205+ if accept_selected {
1206+ Style :: default ( ) . fg ( colors. success )
1207+ } else {
1208+ dim_style
1209+ } ,
1210+ ) ) ;
1211+
11501212 // [a] Accept & Set Risk
1151- spans. push ( Span :: styled ( "[a]" , if set_selected { accent_style } else { dim_style } ) ) ;
1152- spans. push ( Span :: styled ( " Accept & Set Risk" , if set_selected {
1153- Style :: default ( ) . fg ( colors. warning )
1154- } else {
1155- dim_style
1156- } ) ) ;
1157-
1213+ spans. push ( Span :: styled (
1214+ "[a]" ,
1215+ if set_selected {
1216+ accent_style
1217+ } else {
1218+ dim_style
1219+ } ,
1220+ ) ) ;
1221+ spans. push ( Span :: styled (
1222+ " Accept & Set Risk" ,
1223+ if set_selected {
1224+ Style :: default ( ) . fg ( colors. warning )
1225+ } else {
1226+ dim_style
1227+ } ,
1228+ ) ) ;
1229+
11581230 let line = Line :: from ( spans) ;
11591231 Paragraph :: new ( line) . render (
11601232 Rect :: new ( content_x, y3, area. width . saturating_sub ( 4 ) , 1 ) ,
@@ -1167,7 +1239,8 @@ pub fn render_inline_approval(area: Rect, buf: &mut Buffer, approval: &ApprovalS
11671239fn format_args_summary ( args : & serde_json:: Value , max_width : usize ) -> String {
11681240 match args {
11691241 serde_json:: Value :: Object ( map) => {
1170- let parts: Vec < String > = map. iter ( )
1242+ let parts: Vec < String > = map
1243+ . iter ( )
11711244 . take ( 3 ) // Only show first 3 args
11721245 . map ( |( k, v) | {
11731246 let v_str = match v {
0 commit comments