From 01d0307375726e84a4ad8c734217e704bf2c8daf Mon Sep 17 00:00:00 2001 From: Anton Panasenko Date: Wed, 11 Mar 2026 16:42:24 -0700 Subject: [PATCH] no dealy or reenroll --- codex-rs/app-server/README.md | 2 - codex-rs/app-server/src/message_processor.rs | 16 ------ codex-rs/app-server/src/transport.rs | 55 ++------------------ 3 files changed, 4 insertions(+), 69 deletions(-) diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index 5f654f6618..46dd1e40ec 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -80,8 +80,6 @@ Clients must send a single `initialize` request per transport connection before `initialize.params.capabilities` also supports per-connection notification opt-out via `optOutNotificationMethods`, which is a list of exact method names to suppress for that connection. Matching is exact (no wildcards/prefixes). Unknown method names are accepted and ignored. -For handshake timing tests, set `CODEX_APP_SERVER_INITIALIZE_RESPONSE_DELAY_MS=` before launching the server. When set to a valid integer, `codex app-server` and `codexd` will wait that long before sending the `initialize` response. - Applications building on top of `codex app-server` should identify themselves via the `clientInfo` parameter. **Important**: `clientInfo.name` is used to identify the client for the OpenAI Compliance Logs Platform. If diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 0f22eb57ba..5eda1edeb0 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -77,7 +77,6 @@ use toml::Value as TomlValue; use tracing::Instrument; const EXTERNAL_AUTH_REFRESH_TIMEOUT: Duration = Duration::from_secs(10); -const INITIALIZE_RESPONSE_DELAY_MS_ENV_VAR: &str = "CODEX_APP_SERVER_INITIALIZE_RESPONSE_DELAY_MS"; #[derive(Clone)] struct ExternalAuthRefreshBridge { @@ -583,21 +582,6 @@ impl MessageProcessor { platform_family: std::env::consts::FAMILY.to_string(), platform_os: std::env::consts::OS.to_string(), }; - if let Ok(raw_delay_ms) = std::env::var(INITIALIZE_RESPONSE_DELAY_MS_ENV_VAR) { - match raw_delay_ms.parse::() { - Ok(delay_ms) => { - tracing::info!( - "delaying initialize response by {delay_ms}ms because {INITIALIZE_RESPONSE_DELAY_MS_ENV_VAR} is set" - ); - tokio::time::sleep(Duration::from_millis(delay_ms)).await; - } - Err(err) => { - tracing::warn!( - "ignoring invalid {INITIALIZE_RESPONSE_DELAY_MS_ENV_VAR} value `{raw_delay_ms}`: {err}" - ); - } - } - } self.outgoing .send_response(connection_request_id, response) .await; diff --git a/codex-rs/app-server/src/transport.rs b/codex-rs/app-server/src/transport.rs index 9406ab602d..5c6e46d8ad 100644 --- a/codex-rs/app-server/src/transport.rs +++ b/codex-rs/app-server/src/transport.rs @@ -1447,8 +1447,7 @@ async fn connect_remote_control_websocket( Err(err) => { if matches!( &err, - tungstenite::Error::Http(response) - if matches!(response.status().as_u16(), 404 | 409) + tungstenite::Error::Http(response) if response.status().as_u16() == 404 ) { if let Err(clear_err) = update_persisted_remote_control_enrollment( remote_control_state_path, @@ -1464,40 +1463,6 @@ async fn connect_remote_control_websocket( ); } *enrollment = None; - - let new_enrollment = - enroll_remote_control_server(remote_control_target, &auth).await?; - if let Err(persist_err) = update_persisted_remote_control_enrollment( - remote_control_state_path, - remote_control_target, - auth.account_id.as_deref(), - Some(&new_enrollment), - ) - .await - { - warn!( - "failed to persist refreshed remote control enrollment in `{}`: {persist_err}", - remote_control_state_path.display() - ); - } - *enrollment = Some(new_enrollment); - - let retry_request = build_remote_control_websocket_request( - &remote_control_target.websocket_url, - enrollment - .as_ref() - .expect("refreshed enrollment should exist after re-enroll"), - &auth, - )?; - return connect_async(retry_request) - .await - .map(|(websocket_stream, _response)| websocket_stream) - .map_err(|retry_err| { - std::io::Error::other(format!( - "failed to connect app-server remote control websocket `{}` after refreshing enrollment: {retry_err}", - remote_control_target.websocket_url - )) - }); } Err(std::io::Error::other(format!( "failed to connect app-server remote control websocket `{}`: {err}", @@ -1576,7 +1541,6 @@ async fn run_remote_control_websocket_loop( Ok(websocket_stream) => { reconnect_backoff = REMOTE_CONTROL_RECONNECT_INITIAL_BACKOFF; reconnect_attempt = 0; - reconnect_reason = None; info!( "connected to app-server remote control websocket: {}", remote_control_target.websocket_url @@ -3113,9 +3077,8 @@ mod tests { let _ = remote_handle.await; } - async fn assert_remote_control_http_mode_refreshes_stale_persisted_enrollment( - handshake_status: &str, - ) { + #[tokio::test] + async fn remote_control_http_mode_clears_stale_persisted_enrollment_after_404() { let listener = TcpListener::bind("127.0.0.1:0") .await .expect("listener should bind"); @@ -3168,7 +3131,7 @@ mod tests { websocket_request.headers.get("x-codex-server-id"), Some(&stale_enrollment.server_id) ); - respond_with_status(websocket_request.stream, handshake_status, "").await; + respond_with_status(websocket_request.stream, "404 Not Found", "").await; let enroll_request = accept_http_request(&listener).await; assert_eq!( @@ -3201,16 +3164,6 @@ mod tests { let _ = remote_handle.await; } - #[tokio::test] - async fn remote_control_http_mode_refreshes_stale_persisted_enrollment_after_404() { - assert_remote_control_http_mode_refreshes_stale_persisted_enrollment("404 Not Found").await; - } - - #[tokio::test] - async fn remote_control_http_mode_refreshes_stale_persisted_enrollment_after_409() { - assert_remote_control_http_mode_refreshes_stale_persisted_enrollment("409 Conflict").await; - } - #[derive(Debug)] struct CapturedHttpRequest { stream: TcpStream,