





















@@ -144,6 +144,21 @@ function coerceSchedule(schedule: UnknownRecord) {
144144return next;
145145}
146146147+function inferTopLevelSchedule(next: UnknownRecord): UnknownRecord | null {
148+const kindRaw = normalizeLowercaseStringOrEmpty(next.kind);
149+const kind = kindRaw === "at" || kindRaw === "every" || kindRaw === "cron" ? kindRaw : undefined;
150+const schedule: UnknownRecord = {};
151+if (kind) {
152+schedule.kind = kind;
153+}
154+for (const field of ["at", "atMs", "everyMs", "anchorMs", "expr", "cron", "tz", "staggerMs"]) {
155+if (field in next) {
156+schedule[field] = next[field];
157+}
158+}
159+return Object.keys(schedule).length > 0 ? coerceSchedule(schedule) : null;
160+}
161+147162function coercePayload(payload: UnknownRecord) {
148163const next: UnknownRecord = { ...payload };
149164const kindRaw = normalizeLowercaseStringOrEmpty(next.kind);
@@ -367,7 +382,9 @@ function copyTopLevelAgentTurnFields(next: UnknownRecord, payload: UnknownRecord
367382}
368383}
369384if (!("toolsAllow" in payload) || payload.toolsAllow === undefined) {
370-const toolsAllow = normalizeTrimmedStringArray(next.toolsAllow, { allowNull: true });
385+const toolsAllow =
386+normalizeTrimmedStringArray(next.toolsAllow, { allowNull: true }) ??
387+normalizeTrimmedStringArray(next.tools);
371388if (toolsAllow !== undefined) {
372389payload.toolsAllow = toolsAllow;
373390}
@@ -393,6 +410,16 @@ function stripLegacyTopLevelFields(next: UnknownRecord) {
393410delete next.allowUnsafeExternalContent;
394411delete next.message;
395412delete next.text;
413+delete next.kind;
414+delete next.cron;
415+delete next.tz;
416+delete next.at;
417+delete next.atMs;
418+delete next.everyMs;
419+delete next.anchorMs;
420+delete next.staggerMs;
421+delete next.session;
422+delete next.tools;
396423delete next.deliver;
397424delete next.channel;
398425delete next.to;
@@ -462,6 +489,11 @@ export function normalizeCronJobInput(
462489} else {
463490delete next.sessionTarget;
464491}
492+} else if ("session" in base) {
493+const normalized = normalizeSessionTarget(base.session);
494+if (normalized) {
495+next.sessionTarget = normalized;
496+}
465497}
466498467499if ("wakeMode" in base) {
@@ -475,6 +507,11 @@ export function normalizeCronJobInput(
475507476508if (isRecord(base.schedule)) {
477509next.schedule = coerceSchedule(base.schedule);
510+} else if (!isRecord(next.schedule)) {
511+const inferredSchedule = inferTopLevelSchedule(next);
512+if (inferredSchedule) {
513+next.schedule = inferredSchedule;
514+}
478515}
479516480517if (!("payload" in next) || !isRecord(next.payload)) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。