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, }), }); }}