Wire notification sender into exec-server RPC foundation

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
starr-openai
2026-03-18 14:32:35 -07:00
parent 0a846a2625
commit c5dbe421bb
3 changed files with 12 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ use std::time::Duration;
use tokio::io::AsyncRead;
use tokio::io::AsyncWrite;
use tokio::sync::mpsc;
use tokio::time::timeout;
use tokio_tungstenite::connect_async;
use tracing::warn;
@@ -17,6 +18,7 @@ use crate::protocol::InitializeResponse;
use crate::rpc::RpcCallError;
use crate::rpc::RpcClient;
use crate::rpc::RpcClientEvent;
use crate::rpc::RpcNotificationSender;
mod local_backend;
use local_backend::LocalBackend;
@@ -126,7 +128,10 @@ impl ExecServerClient {
pub async fn connect_in_process(
options: ExecServerClientConnectOptions,
) -> Result<Self, ExecServerError> {
let backend = LocalBackend::new(crate::server::ExecServerHandler::new());
let (outgoing_tx, _outgoing_rx) = mpsc::channel(1);
let backend = LocalBackend::new(crate::server::ExecServerHandler::new(
RpcNotificationSender::new(outgoing_tx),
));
let inner = Arc::new(Inner {
backend: ClientBackend::InProcess(backend),
reader_task: tokio::spawn(async {}),

View File

@@ -2,15 +2,18 @@ use codex_app_server_protocol::JSONRPCErrorError;
use crate::protocol::InitializeResponse;
use crate::protocol::PROTOCOL_VERSION;
use crate::rpc::RpcNotificationSender;
pub(crate) struct ExecServerHandler {
_notifications: RpcNotificationSender,
initialize_requested: bool,
initialized: bool,
}
impl ExecServerHandler {
pub(crate) fn new() -> Self {
pub(crate) fn new(notifications: RpcNotificationSender) -> Self {
Self {
_notifications: notifications,
initialize_requested: false,
initialized: false,
}

View File

@@ -20,8 +20,8 @@ pub(crate) async fn run_connection(connection: JsonRpcConnection) {
let (json_outgoing_tx, mut incoming_rx, _connection_tasks) = connection.into_parts();
let (outgoing_tx, mut outgoing_rx) =
mpsc::channel::<RpcServerOutboundMessage>(CHANNEL_CAPACITY);
let handler = Arc::new(Mutex::new(ExecServerHandler::new()));
let _notifications = RpcNotificationSender::new(outgoing_tx.clone());
let notifications = RpcNotificationSender::new(outgoing_tx.clone());
let handler = Arc::new(Mutex::new(ExecServerHandler::new(notifications)));
let outbound_task = tokio::spawn(async move {
while let Some(message) = outgoing_rx.recv().await {