@@ -63,7 +63,9 @@ impl CliProcess {
6363 "request_id" : request_id,
6464 "request" : { "subtype" : "set_model" , "model" : model}
6565 } ) ;
66- let mut req_str = serde_json:: to_string ( & req) . unwrap ( ) ;
66+ let mut req_str = serde_json:: to_string ( & req) . map_err ( |e| {
67+ ProviderError :: RequestFailed ( format ! ( "Failed to serialize set_model request: {e}" ) )
68+ } ) ?;
6769 req_str. push ( '\n' ) ;
6870 self . stdin
6971 . write_all ( req_str. as_bytes ( ) )
@@ -89,6 +91,14 @@ impl CliProcess {
8991 }
9092 if let Ok ( parsed) = serde_json:: from_str :: < Value > ( trimmed) {
9193 if parsed. get ( "type" ) . and_then ( |t| t. as_str ( ) ) == Some ( "control_response" ) {
94+ // Skip responses that don't match our request_id
95+ if parsed
96+ . pointer ( "/response/request_id" )
97+ . and_then ( |id| id. as_str ( ) )
98+ != Some ( request_id. as_str ( ) )
99+ {
100+ continue ;
101+ }
92102 let success =
93103 parsed. pointer ( "/response/subtype" ) . and_then ( |s| s. as_str ( ) )
94104 == Some ( "success" ) ;
@@ -639,7 +649,9 @@ impl Provider for ClaudeCodeProvider {
639649 "request_id" : "model_list" ,
640650 "request" : { "subtype" : "initialize" }
641651 } ) ;
642- let mut request_str = serde_json:: to_string ( & request) . unwrap ( ) ;
652+ let mut request_str = serde_json:: to_string ( & request) . map_err ( |e| {
653+ ProviderError :: RequestFailed ( format ! ( "Failed to serialize initialize request: {e}" ) )
654+ } ) ?;
643655 request_str. push ( '\n' ) ;
644656 stdin. write_all ( request_str. as_bytes ( ) ) . await . map_err ( |e| {
645657 ProviderError :: RequestFailed ( format ! ( "Failed to write initialize request: {e}" ) )
@@ -670,7 +682,7 @@ impl Provider for ClaudeCodeProvider {
670682 }
671683 }
672684
673- let _ = child. start_kill ( ) ;
685+ let _ = child. kill ( ) . await ;
674686 Ok ( parse_models_from_lines ( & lines) )
675687 }
676688
0 commit comments