Codex Handbook
ext/goal/src/events.rs 34 lines
use std::sync::Arc;use codex_extension_api::ExtensionEventSink;use codex_protocol::protocol::Event;use codex_protocol::protocol::EventMsg;use codex_protocol::protocol::ThreadGoal;use codex_protocol::protocol::ThreadGoalUpdatedEvent;#[derive(Clone)]pub(crate) struct GoalEventEmitter {    sink: Arc<dyn ExtensionEventSink>,}impl GoalEventEmitter {    pub(crate) fn new(sink: Arc<dyn ExtensionEventSink>) -> Self {        Self { sink }    }    pub(crate) fn thread_goal_updated(        &self,        event_id: impl Into<String>,        turn_id: Option<String>,        goal: ThreadGoal,    ) {        self.sink.emit(Event {            id: event_id.into(),            msg: EventMsg::ThreadGoalUpdated(ThreadGoalUpdatedEvent {                thread_id: goal.thread_id,                turn_id,                goal,            }),        });    }}