@@ -38,6 +38,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
3838 . map ( |variable| match variable {
3939 "model" => Some ( Ok ( model_display) ) ,
4040 "model_id" => Some ( Ok ( claude_data. model . id . as_str ( ) ) ) ,
41+ "effort" => claude_data. effort . as_ref ( ) . map ( |e| Ok ( e. level . as_str ( ) ) ) ,
4142 _ => None ,
4243 } )
4344 . parse ( None , Some ( context) )
@@ -76,6 +77,7 @@ mod tests {
7677 context_window : crate :: context:: ContextWindow :: default ( ) ,
7778 cost : None ,
7879 workspace : None ,
80+ effort : None ,
7981 } ;
8082 let actual = ModuleRenderer :: new ( "claude_model" )
8183 . config ( toml:: toml! {
@@ -98,6 +100,7 @@ mod tests {
98100 context_window : crate :: context:: ContextWindow :: default ( ) ,
99101 cost : None ,
100102 workspace : None ,
103+ effort : None ,
101104 } ;
102105
103106 let actual = ModuleRenderer :: new ( "claude_model" )
@@ -125,6 +128,7 @@ mod tests {
125128 context_window : crate :: context:: ContextWindow :: default ( ) ,
126129 cost : None ,
127130 workspace : None ,
131+ effort : None ,
128132 } ;
129133
130134 let actual = ModuleRenderer :: new ( "claude_model" )
@@ -142,6 +146,62 @@ mod tests {
142146 assert_eq ! ( actual, expected) ;
143147 }
144148
149+ #[ test]
150+ fn test_effort_level ( ) {
151+ let data = crate :: context:: ClaudeCodeData {
152+ cwd : None ,
153+ model : crate :: context:: ModelInfo {
154+ id : "claude-opus-4-8" . to_string ( ) ,
155+ display_name : "Opus 4.8" . to_string ( ) ,
156+ } ,
157+ context_window : crate :: context:: ContextWindow :: default ( ) ,
158+ cost : None ,
159+ workspace : None ,
160+ effort : Some ( crate :: utils:: statusline:: EffortInfo {
161+ level : "high" . to_string ( ) ,
162+ } ) ,
163+ } ;
164+
165+ let actual = ModuleRenderer :: new ( "claude_model" )
166+ . config ( toml:: toml! {
167+ [ claude_model]
168+ symbol = ""
169+ format = "[$model $effort]($style)"
170+ } )
171+ . claude_code_data ( data)
172+ . collect ( ) ;
173+
174+ let expected = Some ( format ! ( "{}" , Color :: Blue . bold( ) . paint( "Opus 4.8 high" ) ) ) ;
175+ assert_eq ! ( actual, expected) ;
176+ }
177+
178+ #[ test]
179+ fn test_effort_absent_omits_variable ( ) {
180+ let data = crate :: context:: ClaudeCodeData {
181+ cwd : None ,
182+ model : crate :: context:: ModelInfo {
183+ id : "claude-opus-4-8" . to_string ( ) ,
184+ display_name : "Opus 4.8" . to_string ( ) ,
185+ } ,
186+ context_window : crate :: context:: ContextWindow :: default ( ) ,
187+ cost : None ,
188+ workspace : None ,
189+ effort : None ,
190+ } ;
191+
192+ let actual = ModuleRenderer :: new ( "claude_model" )
193+ . config ( toml:: toml! {
194+ [ claude_model]
195+ symbol = ""
196+ format = "[$model( \\ ($effort\\ ))]($style)"
197+ } )
198+ . claude_code_data ( data)
199+ . collect ( ) ;
200+
201+ let expected = Some ( format ! ( "{}" , Color :: Blue . bold( ) . paint( "Opus 4.8" ) ) ) ;
202+ assert_eq ! ( actual, expected) ;
203+ }
204+
145205 #[ test]
146206 fn test_alias_by_display_name ( ) {
147207 let data = crate :: context:: ClaudeCodeData {
@@ -153,6 +213,7 @@ mod tests {
153213 context_window : crate :: context:: ContextWindow :: default ( ) ,
154214 cost : None ,
155215 workspace : None ,
216+ effort : None ,
156217 } ;
157218
158219 let actual = ModuleRenderer :: new ( "claude_model" )
0 commit comments