fix(cron): share isolated announce flow + harden cron scheduling/delivery (#11641)

* fix(cron): comprehensive cron scheduling and delivery fixes

- Fix delivery target resolution for isolated agent cron jobs
- Improve schedule parsing and validation
- Add job retry logic and error handling
- Enhance cron ops with better state management
- Add timer improvements for more reliable cron execution
- Add cron event type to protocol schema
- Support cron events in heartbeat runner (skip empty-heartbeat check,
  use dedicated CRON_EVENT_PROMPT for relay)

* fix: remove cron debug test and add changelog/docs notes (#11641) (thanks @tyler6204)
This commit is contained in:
Tyler Yust
2026-02-07 19:46:01 -08:00
committed by GitHub
parent ebe5730401
commit 8fae55e8e0
19 changed files with 488 additions and 150 deletions

View File

@@ -345,6 +345,8 @@ export type SubagentRunOutcome = {
error?: string;
};
export type SubagentAnnounceType = "subagent task" | "cron job";
export async function runSubagentAnnounceFlow(params: {
childSessionKey: string;
childRunId: string;
@@ -360,6 +362,7 @@ export async function runSubagentAnnounceFlow(params: {
endedAt?: number;
label?: string;
outcome?: SubagentRunOutcome;
announceType?: SubagentAnnounceType;
}): Promise<boolean> {
let didAnnounce = false;
try {
@@ -433,9 +436,10 @@ export async function runSubagentAnnounceFlow(params: {
: "finished with unknown status";
// Build instructional message for main agent
const taskLabel = params.label || params.task || "background task";
const announceType = params.announceType ?? "subagent task";
const taskLabel = params.label || params.task || "task";
const triggerMessage = [
`A background task "${taskLabel}" just ${statusLabel}.`,
`A ${announceType} "${taskLabel}" just ${statusLabel}.`,
"",
"Findings:",
reply || "(no output)",
@@ -443,7 +447,7 @@ export async function runSubagentAnnounceFlow(params: {
statsLine,
"",
"Summarize this naturally for the user. Keep it brief (1-2 sentences). Flow it into the conversation naturally.",
"Do not mention technical details like tokens, stats, or that this was a background task.",
`Do not mention technical details like tokens, stats, or that this was a ${announceType}.`,
"You can respond with NO_REPLY if no announcement is needed (e.g., internal task with no user-facing result).",
].join("\n");