Switch alarms to structured triggers

This commit is contained in:
Eric Traut
2026-04-06 21:58:28 -07:00
parent 117ce78783
commit da2e581411
40 changed files with 1754 additions and 768 deletions
@@ -15,6 +15,7 @@ use crate::thread_status::ThreadWatchManager;
use codex_app_server_protocol::AccountRateLimitsUpdatedNotification;
use codex_app_server_protocol::AdditionalPermissionProfile as V2AdditionalPermissionProfile;
use codex_app_server_protocol::AgentMessageDeltaNotification;
use codex_app_server_protocol::AlarmTrigger;
use codex_app_server_protocol::ApplyPatchApprovalParams;
use codex_app_server_protocol::ApplyPatchApprovalResponse;
use codex_app_server_protocol::CodexErrorInfo as V2CodexErrorInfo;
@@ -166,9 +167,8 @@ struct CommandExecutionCompletionItem {
fn thread_alarm_from_core(value: codex_core::alarms::ThreadAlarm) -> ThreadAlarm {
ThreadAlarm {
id: value.id,
cron_expression: value.cron_expression,
trigger: alarm_trigger_from_core(value.trigger),
prompt: value.prompt,
run_once: value.run_once,
delivery: match value.delivery {
codex_core::alarms::AlarmDelivery::AfterTurn => {
codex_app_server_protocol::AlarmDelivery::AfterTurn
@@ -182,6 +182,17 @@ fn thread_alarm_from_core(value: codex_core::alarms::ThreadAlarm) -> ThreadAlarm
last_run_at: value.last_run_at,
}
}
fn alarm_trigger_from_core(value: codex_core::alarms::ThreadAlarmTrigger) -> AlarmTrigger {
match value {
codex_core::alarms::ThreadAlarmTrigger::Delay { seconds, repeat } => {
AlarmTrigger::Delay { seconds, repeat }
}
codex_core::alarms::ThreadAlarmTrigger::Schedule { dtstart, rrule } => {
AlarmTrigger::Schedule { dtstart, rrule }
}
}
}
#[allow(clippy::too_many_arguments)]
pub(crate) async fn apply_bespoke_event_handling(
event: Event,
@@ -25,6 +25,7 @@ use codex_app_server_protocol::Account;
use codex_app_server_protocol::AccountLoginCompletedNotification;
use codex_app_server_protocol::AccountUpdatedNotification;
use codex_app_server_protocol::AlarmDelivery as ApiAlarmDelivery;
use codex_app_server_protocol::AlarmTrigger as ApiAlarmTrigger;
use codex_app_server_protocol::AppInfo;
use codex_app_server_protocol::AppsListParams;
use codex_app_server_protocol::AppsListResponse;
@@ -3704,9 +3705,8 @@ impl CodexMessageProcessor {
) {
let ThreadAlarmCreateParams {
thread_id,
cron_expression,
trigger,
prompt,
run_once,
delivery,
} = params;
let Some(thread) = self.load_alarm_thread(request_id.clone(), &thread_id).await else {
@@ -3714,9 +3714,8 @@ impl CodexMessageProcessor {
};
match thread
.create_alarm(
cron_expression,
alarm_trigger_to_core(trigger),
prompt,
run_once.unwrap_or(false),
alarm_delivery_to_core(delivery),
)
.await
@@ -9053,12 +9052,33 @@ fn api_alarm_delivery_from_core(value: codex_core::alarms::AlarmDelivery) -> Api
}
}
fn alarm_trigger_to_core(value: ApiAlarmTrigger) -> codex_core::alarms::ThreadAlarmTrigger {
match value {
ApiAlarmTrigger::Delay { seconds, repeat } => {
codex_core::alarms::ThreadAlarmTrigger::Delay { seconds, repeat }
}
ApiAlarmTrigger::Schedule { dtstart, rrule } => {
codex_core::alarms::ThreadAlarmTrigger::Schedule { dtstart, rrule }
}
}
}
fn api_alarm_trigger_from_core(value: codex_core::alarms::ThreadAlarmTrigger) -> ApiAlarmTrigger {
match value {
codex_core::alarms::ThreadAlarmTrigger::Delay { seconds, repeat } => {
ApiAlarmTrigger::Delay { seconds, repeat }
}
codex_core::alarms::ThreadAlarmTrigger::Schedule { dtstart, rrule } => {
ApiAlarmTrigger::Schedule { dtstart, rrule }
}
}
}
fn api_thread_alarm_from_core(value: codex_core::alarms::ThreadAlarm) -> ApiThreadAlarm {
ApiThreadAlarm {
id: value.id,
cron_expression: value.cron_expression,
trigger: api_alarm_trigger_from_core(value.trigger),
prompt: value.prompt,
run_once: value.run_once,
delivery: api_alarm_delivery_from_core(value.delivery),
created_at: value.created_at,
next_run_at: value.next_run_at,