diff --git a/codex-rs/core/src/goals.rs b/codex-rs/core/src/goals.rs
index 6e0663655c..a4206730f9 100644
--- a/codex-rs/core/src/goals.rs
+++ b/codex-rs/core/src/goals.rs
@@ -30,7 +30,9 @@ use codex_prompts::continuation_prompt;
use codex_prompts::objective_updated_prompt;
use codex_protocol::ThreadId;
use codex_protocol::config_types::ModeKind;
+use codex_protocol::error::CodexErr;
use codex_protocol::models::ResponseItem;
+use codex_protocol::protocol::CodexErrorInfo;
use codex_protocol::protocol::EventMsg;
use codex_protocol::protocol::ThreadGoal;
use codex_protocol::protocol::ThreadGoalStatus;
@@ -129,13 +131,14 @@ pub(crate) enum GoalRuntimeEvent<'a> {
turn_context: &'a TurnContext,
turn_completed: bool,
},
+ TurnErrored {
+ turn_context: &'a TurnContext,
+ error: &'a CodexErr,
+ },
MaybeContinueIfIdle,
TaskAborted {
turn_context: Option<&'a TurnContext>,
},
- UsageLimitReached {
- turn_context: &'a TurnContext,
- },
ExternalMutationStarting,
ExternalSet {
external_set: ExternalGoalSet,
@@ -144,6 +147,12 @@ pub(crate) enum GoalRuntimeEvent<'a> {
ThreadResumed,
}
+#[derive(Clone, Copy)]
+enum TerminalGoalErrorStatus {
+ Paused,
+ UsageLimited,
+}
+
pub(crate) struct GoalRuntimeState {
pub(crate) state_db: Mutex