mirror of
https://github.com/openai/codex.git
synced 2026-04-29 02:41:12 +03:00
## Summary Adds a new mcp tool call, `codex-reply`, so we can continue existing sessions. This is a first draft and does not yet support sessions from previous processes. ## Testing - [x] tested with mcp client
39 lines
1.2 KiB
Rust
39 lines
1.2 KiB
Rust
use std::sync::Arc;
|
|
|
|
use crate::Codex;
|
|
use crate::config::Config;
|
|
use crate::protocol::Event;
|
|
use crate::protocol::EventMsg;
|
|
use crate::util::notify_on_sigint;
|
|
use tokio::sync::Notify;
|
|
use uuid::Uuid;
|
|
|
|
/// Spawn a new [`Codex`] and initialize the session.
|
|
///
|
|
/// Returns the wrapped [`Codex`] **and** the `SessionInitialized` event that
|
|
/// is received as a response to the initial `ConfigureSession` submission so
|
|
/// that callers can surface the information to the UI.
|
|
pub async fn init_codex(config: Config) -> anyhow::Result<(Codex, Event, Arc<Notify>, Uuid)> {
|
|
let ctrl_c = notify_on_sigint();
|
|
let (codex, init_id, session_id) = Codex::spawn(config, ctrl_c.clone()).await?;
|
|
|
|
// The first event must be `SessionInitialized`. Validate and forward it to
|
|
// the caller so that they can display it in the conversation history.
|
|
let event = codex.next_event().await?;
|
|
if event.id != init_id
|
|
|| !matches!(
|
|
&event,
|
|
Event {
|
|
id: _id,
|
|
msg: EventMsg::SessionConfigured(_),
|
|
}
|
|
)
|
|
{
|
|
return Err(anyhow::anyhow!(
|
|
"expected SessionInitialized but got {event:?}"
|
|
));
|
|
}
|
|
|
|
Ok((codex, event, ctrl_c, session_id))
|
|
}
|