Skip to content

Commit acec956

Browse files
committed
refactor: simplify canonical lifecycle emission
1 parent a6f98df commit acec956

12 files changed

Lines changed: 222 additions & 450 deletions

File tree

codex-rs/app-server/src/bespoke_event_handling.rs

Lines changed: 142 additions & 316 deletions
Large diffs are not rendered by default.

codex-rs/app-server/src/thread_state.rs

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -67,56 +67,13 @@ pub(crate) enum ThreadListenerCommand {
6767
}
6868

6969
/// Per-conversation accumulation of the latest states e.g. error message while a turn runs.
70-
#[derive(Clone, Copy, PartialEq, Eq)]
71-
pub(crate) enum LegacyItemLifecycle {
72-
Started,
73-
Completed,
74-
}
75-
76-
#[derive(Clone)]
77-
struct PendingLegacyItemSuppression {
78-
lifecycle: LegacyItemLifecycle,
79-
item_id: String,
80-
}
81-
8270
#[derive(Default, Clone)]
8371
pub(crate) struct TurnSummary {
8472
pub(crate) started_at: Option<i64>,
8573
pub(crate) command_execution_started: HashSet<String>,
86-
pending_legacy_item_suppression: Option<PendingLegacyItemSuppression>,
8774
pub(crate) last_error: Option<TurnError>,
8875
}
8976

90-
impl TurnSummary {
91-
pub(crate) fn suppress_next_legacy_item(
92-
&mut self,
93-
lifecycle: LegacyItemLifecycle,
94-
item_id: &str,
95-
) {
96-
self.pending_legacy_item_suppression = Some(PendingLegacyItemSuppression {
97-
lifecycle,
98-
item_id: item_id.to_string(),
99-
});
100-
}
101-
102-
pub(crate) fn take_legacy_item_suppression(
103-
&mut self,
104-
lifecycle: LegacyItemLifecycle,
105-
item_id: &str,
106-
) -> bool {
107-
if self
108-
.pending_legacy_item_suppression
109-
.as_ref()
110-
.is_some_and(|pending| pending.lifecycle == lifecycle && pending.item_id == item_id)
111-
{
112-
self.pending_legacy_item_suppression = None;
113-
true
114-
} else {
115-
false
116-
}
117-
}
118-
}
119-
12077
#[derive(Default)]
12178
pub(crate) struct ThreadState {
12279
pub(crate) pending_interrupts: PendingInterruptQueue,

codex-rs/core/src/tasks/user_shell.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ pub(crate) async fn execute_user_shell_command(
185185
session
186186
.emit_turn_item_started(
187187
turn_context.as_ref(),
188-
&TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_begin_event(
188+
&TurnItem::CommandExecution(CommandExecutionItem::from_begin_event(
189189
ExecCommandBeginEvent {
190190
call_id: call_id.clone(),
191191
process_id: None,
@@ -265,7 +265,7 @@ pub(crate) async fn execute_user_shell_command(
265265
session
266266
.emit_turn_item_completed(
267267
turn_context.as_ref(),
268-
TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_end_event(
268+
TurnItem::CommandExecution(CommandExecutionItem::from_end_event(
269269
ExecCommandEndEvent {
270270
call_id,
271271
process_id: None,
@@ -292,7 +292,7 @@ pub(crate) async fn execute_user_shell_command(
292292
session
293293
.emit_turn_item_completed(
294294
turn_context.as_ref(),
295-
TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_end_event(
295+
TurnItem::CommandExecution(CommandExecutionItem::from_end_event(
296296
ExecCommandEndEvent {
297297
call_id: call_id.clone(),
298298
process_id: None,
@@ -339,7 +339,7 @@ pub(crate) async fn execute_user_shell_command(
339339
session
340340
.emit_turn_item_completed(
341341
turn_context.as_ref(),
342-
TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_end_event(
342+
TurnItem::CommandExecution(CommandExecutionItem::from_end_event(
343343
ExecCommandEndEvent {
344344
call_id,
345345
process_id: None,

codex-rs/core/src/tools/events.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ pub(crate) async fn emit_exec_command_begin(
123123
ctx.session
124124
.emit_turn_item_started(
125125
ctx.turn,
126-
&TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_begin_event(event)),
126+
&TurnItem::CommandExecution(CommandExecutionItem::from_begin_event(event)),
127127
)
128128
.await;
129129
}
@@ -577,7 +577,7 @@ async fn emit_exec_end(
577577
ctx.session
578578
.emit_turn_item_completed(
579579
ctx.turn,
580-
TurnItem::CommandExecution(CommandExecutionItem::from_exec_command_end_event(event)),
580+
TurnItem::CommandExecution(CommandExecutionItem::from_end_event(event)),
581581
)
582582
.await;
583583
}

codex-rs/core/src/tools/handlers/dynamic.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ async fn request_dynamic_tool(
209209
session
210210
.emit_turn_item_started(
211211
turn_context,
212-
&TurnItem::DynamicToolCall(DynamicToolCallItem::from_dynamic_tool_call_request(event)),
212+
&TurnItem::DynamicToolCall(DynamicToolCallItem::from_request(event)),
213213
)
214214
.await;
215215
let response = rx_response.await.ok();
@@ -243,9 +243,7 @@ async fn request_dynamic_tool(
243243
session
244244
.emit_turn_item_completed(
245245
turn_context,
246-
TurnItem::DynamicToolCall(DynamicToolCallItem::from_dynamic_tool_call_response(
247-
response_event,
248-
)),
246+
TurnItem::DynamicToolCall(DynamicToolCallItem::from_response(response_event)),
249247
)
250248
.await;
251249

codex-rs/core/src/tools/handlers/multi_agents/close_agent.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ async fn handle_close_agent(
4747
emit_collab_tool_call_started(
4848
&session,
4949
&turn,
50-
CollabAgentToolCallItem::from_collab_close_begin_event(CollabCloseBeginEvent {
50+
CollabAgentToolCallItem::from_close_begin_event(CollabCloseBeginEvent {
5151
call_id: call_id.clone(),
5252
started_at_ms: now_unix_timestamp_ms(),
5353
sender_thread_id: session.thread_id,
@@ -70,7 +70,7 @@ async fn handle_close_agent(
7070
emit_collab_tool_call_completed(
7171
&session,
7272
&turn,
73-
CollabAgentToolCallItem::from_collab_close_end_event(CollabCloseEndEvent {
73+
CollabAgentToolCallItem::from_close_end_event(CollabCloseEndEvent {
7474
call_id: call_id.clone(),
7575
completed_at_ms: now_unix_timestamp_ms(),
7676
sender_thread_id: session.thread_id(),
@@ -91,7 +91,7 @@ async fn handle_close_agent(
9191
emit_collab_tool_call_completed(
9292
&session,
9393
&turn,
94-
CollabAgentToolCallItem::from_collab_close_end_event(CollabCloseEndEvent {
94+
CollabAgentToolCallItem::from_close_end_event(CollabCloseEndEvent {
9595
call_id,
9696
completed_at_ms: now_unix_timestamp_ms(),
9797
sender_thread_id: session.thread_id,

codex-rs/core/src/tools/handlers/multi_agents/resume_agent.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ async fn handle_resume_agent(
6060
emit_collab_tool_call_started(
6161
&session,
6262
&turn,
63-
CollabAgentToolCallItem::from_collab_resume_begin_event(CollabResumeBeginEvent {
63+
CollabAgentToolCallItem::from_resume_begin_event(CollabResumeBeginEvent {
6464
call_id: call_id.clone(),
6565
started_at_ms: now_unix_timestamp_ms(),
6666
sender_thread_id: session.thread_id,
@@ -115,7 +115,7 @@ async fn handle_resume_agent(
115115
emit_collab_tool_call_completed(
116116
&session,
117117
&turn,
118-
CollabAgentToolCallItem::from_collab_resume_end_event(CollabResumeEndEvent {
118+
CollabAgentToolCallItem::from_resume_end_event(CollabResumeEndEvent {
119119
call_id,
120120
completed_at_ms: now_unix_timestamp_ms(),
121121
sender_thread_id: session.thread_id(),

codex-rs/core/src/tools/handlers/multi_agents/send_input.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ impl Handler {
7070
emit_collab_tool_call_started(
7171
&session,
7272
&turn,
73-
CollabAgentToolCallItem::from_collab_agent_interaction_begin_event(
73+
CollabAgentToolCallItem::from_interaction_begin_event(
7474
CollabAgentInteractionBeginEvent {
7575
call_id: call_id.clone(),
7676
started_at_ms: now_unix_timestamp_ms(),
@@ -94,18 +94,16 @@ impl Handler {
9494
emit_collab_tool_call_completed(
9595
&session,
9696
&turn,
97-
CollabAgentToolCallItem::from_collab_agent_interaction_end_event(
98-
CollabAgentInteractionEndEvent {
99-
call_id,
100-
completed_at_ms: now_unix_timestamp_ms(),
101-
sender_thread_id: session.thread_id,
102-
receiver_thread_id,
103-
receiver_agent_nickname: receiver_agent.agent_nickname,
104-
receiver_agent_role: receiver_agent.agent_role,
105-
prompt,
106-
status,
107-
},
108-
),
97+
CollabAgentToolCallItem::from_interaction_end_event(CollabAgentInteractionEndEvent {
98+
call_id,
99+
completed_at_ms: now_unix_timestamp_ms(),
100+
sender_thread_id: session.thread_id,
101+
receiver_thread_id,
102+
receiver_agent_nickname: receiver_agent.agent_nickname,
103+
receiver_agent_role: receiver_agent.agent_role,
104+
prompt,
105+
status,
106+
}),
109107
)
110108
.await;
111109
let submission_id = result?;

codex-rs/core/src/tools/handlers/multi_agents/spawn.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ async fn handle_spawn_agent(
7474
emit_collab_tool_call_started(
7575
&session,
7676
&turn,
77-
CollabAgentToolCallItem::from_collab_agent_spawn_begin_event(CollabAgentSpawnBeginEvent {
77+
CollabAgentToolCallItem::from_spawn_begin_event(CollabAgentSpawnBeginEvent {
7878
call_id: call_id.clone(),
7979
started_at_ms: now_unix_timestamp_ms(),
8080
sender_thread_id: session.thread_id,
@@ -180,7 +180,7 @@ async fn handle_spawn_agent(
180180
emit_collab_tool_call_completed(
181181
&session,
182182
&turn,
183-
CollabAgentToolCallItem::from_collab_agent_spawn_end_event(CollabAgentSpawnEndEvent {
183+
CollabAgentToolCallItem::from_spawn_end_event(CollabAgentSpawnEndEvent {
184184
call_id,
185185
completed_at_ms: now_unix_timestamp_ms(),
186186
sender_thread_id: session.thread_id,

codex-rs/core/src/tools/handlers/multi_agents/wait.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl Handler {
100100
emit_collab_tool_call_started(
101101
&session,
102102
&turn,
103-
CollabAgentToolCallItem::from_collab_waiting_begin_event(CollabWaitingBeginEvent {
103+
CollabAgentToolCallItem::from_waiting_begin_event(CollabWaitingBeginEvent {
104104
started_at_ms: now_unix_timestamp_ms(),
105105
sender_thread_id: session.thread_id,
106106
receiver_thread_ids: receiver_thread_ids.clone(),
@@ -130,18 +130,13 @@ impl Handler {
130130
emit_collab_tool_call_completed(
131131
&session,
132132
&turn,
133-
CollabAgentToolCallItem::from_collab_waiting_end_event(
134-
CollabWaitingEndEvent {
135-
sender_thread_id: session.thread_id,
136-
call_id: call_id.clone(),
137-
completed_at_ms: now_unix_timestamp_ms(),
138-
agent_statuses: build_wait_agent_statuses(
139-
&statuses,
140-
&receiver_agents,
141-
),
142-
statuses,
143-
},
144-
),
133+
CollabAgentToolCallItem::from_waiting_end_event(CollabWaitingEndEvent {
134+
sender_thread_id: session.thread_id,
135+
call_id: call_id.clone(),
136+
completed_at_ms: now_unix_timestamp_ms(),
137+
agent_statuses: build_wait_agent_statuses(&statuses, &receiver_agents),
138+
statuses,
139+
}),
145140
)
146141
.await;
147142
return Err(collab_agent_error(*id, err));
@@ -200,7 +195,7 @@ impl Handler {
200195
emit_collab_tool_call_completed(
201196
&session,
202197
&turn,
203-
CollabAgentToolCallItem::from_collab_waiting_end_event(CollabWaitingEndEvent {
198+
CollabAgentToolCallItem::from_waiting_end_event(CollabWaitingEndEvent {
204199
sender_thread_id: session.thread_id,
205200
call_id,
206201
completed_at_ms: now_unix_timestamp_ms(),

0 commit comments

Comments
 (0)