@@ -64,64 +64,79 @@ impl MessageProcessor {
6464
6565 pub ( crate ) async fn process_request ( & mut self , request : JSONRPCRequest ) {
6666 let request_id = request. id . clone ( ) ;
67- if let Ok ( request_json) = serde_json:: to_value ( request)
68- && let Ok ( codex_request) = serde_json:: from_value :: < ClientRequest > ( request_json)
69- {
70- match codex_request {
71- // Handle Initialize internally so CodexMessageProcessor does not have to concern
72- // itself with the `initialized` bool.
73- ClientRequest :: Initialize { request_id, params } => {
74- if self . initialized {
75- let error = JSONRPCErrorError {
76- code : INVALID_REQUEST_ERROR_CODE ,
77- message : "Already initialized" . to_string ( ) ,
78- data : None ,
79- } ;
80- self . outgoing . send_error ( request_id, error) . await ;
81- return ;
82- } else {
83- let ClientInfo {
84- name,
85- title : _title,
86- version,
87- } = params. client_info ;
88- let user_agent_suffix = format ! ( "{name}; {version}" ) ;
89- if let Ok ( mut suffix) = USER_AGENT_SUFFIX . lock ( ) {
90- * suffix = Some ( user_agent_suffix) ;
91- }
67+ let request_json = match serde_json:: to_value ( & request) {
68+ Ok ( request_json) => request_json,
69+ Err ( err) => {
70+ let error = JSONRPCErrorError {
71+ code : INVALID_REQUEST_ERROR_CODE ,
72+ message : format ! ( "Invalid request: {err}" ) ,
73+ data : None ,
74+ } ;
75+ self . outgoing . send_error ( request_id, error) . await ;
76+ return ;
77+ }
78+ } ;
9279
93- let user_agent = get_codex_user_agent ( ) ;
94- let response = InitializeResponse { user_agent } ;
95- self . outgoing . send_response ( request_id, response) . await ;
80+ let codex_request = match serde_json:: from_value :: < ClientRequest > ( request_json) {
81+ Ok ( codex_request) => codex_request,
82+ Err ( err) => {
83+ let error = JSONRPCErrorError {
84+ code : INVALID_REQUEST_ERROR_CODE ,
85+ message : format ! ( "Invalid request: {err}" ) ,
86+ data : None ,
87+ } ;
88+ self . outgoing . send_error ( request_id, error) . await ;
89+ return ;
90+ }
91+ } ;
9692
97- self . initialized = true ;
98- return ;
93+ match codex_request {
94+ // Handle Initialize internally so CodexMessageProcessor does not have to concern
95+ // itself with the `initialized` bool.
96+ ClientRequest :: Initialize { request_id, params } => {
97+ if self . initialized {
98+ let error = JSONRPCErrorError {
99+ code : INVALID_REQUEST_ERROR_CODE ,
100+ message : "Already initialized" . to_string ( ) ,
101+ data : None ,
102+ } ;
103+ self . outgoing . send_error ( request_id, error) . await ;
104+ return ;
105+ } else {
106+ let ClientInfo {
107+ name,
108+ title : _title,
109+ version,
110+ } = params. client_info ;
111+ let user_agent_suffix = format ! ( "{name}; {version}" ) ;
112+ if let Ok ( mut suffix) = USER_AGENT_SUFFIX . lock ( ) {
113+ * suffix = Some ( user_agent_suffix) ;
99114 }
115+
116+ let user_agent = get_codex_user_agent ( ) ;
117+ let response = InitializeResponse { user_agent } ;
118+ self . outgoing . send_response ( request_id, response) . await ;
119+
120+ self . initialized = true ;
121+ return ;
100122 }
101- _ => {
102- if ! self . initialized {
103- let error = JSONRPCErrorError {
104- code : INVALID_REQUEST_ERROR_CODE ,
105- message : "Not initialized" . to_string ( ) ,
106- data : None ,
107- } ;
108- self . outgoing . send_error ( request_id , error ) . await ;
109- return ;
110- }
123+ }
124+ _ => {
125+ if ! self . initialized {
126+ let error = JSONRPCErrorError {
127+ code : INVALID_REQUEST_ERROR_CODE ,
128+ message : "Not initialized" . to_string ( ) ,
129+ data : None ,
130+ } ;
131+ self . outgoing . send_error ( request_id , error ) . await ;
132+ return ;
111133 }
112134 }
113-
114- self . codex_message_processor
115- . process_request ( codex_request)
116- . await ;
117- } else {
118- let error = JSONRPCErrorError {
119- code : INVALID_REQUEST_ERROR_CODE ,
120- message : "Invalid request" . to_string ( ) ,
121- data : None ,
122- } ;
123- self . outgoing . send_error ( request_id, error) . await ;
124135 }
136+
137+ self . codex_message_processor
138+ . process_request ( codex_request)
139+ . await ;
125140 }
126141
127142 pub ( crate ) async fn process_notification ( & self , notification : JSONRPCNotification ) {
0 commit comments