





















@@ -76,6 +76,84 @@ describe("resolveCronPayloadOutcome", () => {
76767777expect(result.hasFatalErrorPayload).toBe(true);
7878expect(result.embeddedRunError).toContain("Model context overflow");
79+expect(result.outputText).toBe("Model context overflow");
80+expect(result.deliveryPayloads).toEqual([{ text: "Model context overflow", isError: true }]);
81+});
82+83+it("treats standalone run-level errors as fatal and synthesizes delivery", () => {
84+const result = resolveCronPayloadOutcome({
85+payloads: [],
86+runLevelError: { kind: "provider_error", message: "model provider unreachable" },
87+});
88+89+expect(result.hasFatalErrorPayload).toBe(true);
90+expect(result.embeddedRunError).toBe("cron isolated run failed: model provider unreachable");
91+expect(result.summary).toBe("cron isolated run failed: model provider unreachable");
92+expect(result.outputText).toBe("cron isolated run failed: model provider unreachable");
93+expect(result.synthesizedText).toBe("cron isolated run failed: model provider unreachable");
94+expect(result.deliveryPayload).toEqual({
95+text: "cron isolated run failed: model provider unreachable",
96+isError: true,
97+});
98+expect(result.deliveryPayloads).toEqual([
99+{ text: "cron isolated run failed: model provider unreachable", isError: true },
100+]);
101+expect(result.deliveryPayloadHasStructuredContent).toBe(false);
102+});
103+104+it("uses string run-level errors when no error payload exists", () => {
105+const result = resolveCronPayloadOutcome({
106+payloads: [{ text: " " }],
107+runLevelError: "rate limit exceeded",
108+});
109+110+expect(result.hasFatalErrorPayload).toBe(true);
111+expect(result.embeddedRunError).toBe("cron isolated run failed: rate limit exceeded");
112+expect(result.deliveryPayloads).toEqual([
113+{ text: "cron isolated run failed: rate limit exceeded", isError: true },
114+]);
115+});
116+117+it("falls back to run-level error kind without exposing arbitrary objects", () => {
118+const result = resolveCronPayloadOutcome({
119+payloads: [{ text: "Partial assistant text before failure" }],
120+runLevelError: { kind: "retry_limit", detail: { provider: "example" } },
121+});
122+123+expect(result.hasFatalErrorPayload).toBe(true);
124+expect(result.embeddedRunError).toBe("cron isolated run failed: retry_limit");
125+expect(result.outputText).toBe("cron isolated run failed: retry_limit");
126+expect(result.deliveryPayloads).toEqual([
127+{ text: "cron isolated run failed: retry_limit", isError: true },
128+]);
129+});
130+131+it("uses a generic run-level error for unrecognized objects", () => {
132+const result = resolveCronPayloadOutcome({
133+payloads: [],
134+runLevelError: { detail: { provider: "example" } },
135+});
136+137+expect(result.hasFatalErrorPayload).toBe(true);
138+expect(result.embeddedRunError).toBe("cron isolated run failed");
139+expect(result.deliveryPayloads).toEqual([{ text: "cron isolated run failed", isError: true }]);
140+});
141+142+it("does not let later success clear a run-level error", () => {
143+const result = resolveCronPayloadOutcome({
144+payloads: [
145+{ text: "Temporary provider failure", isError: true },
146+{ text: "Partial success-looking text" },
147+],
148+runLevelError: "retry limit exceeded",
149+});
150+151+expect(result.hasFatalErrorPayload).toBe(true);
152+expect(result.embeddedRunError).toBe("Temporary provider failure");
153+expect(result.outputText).toBe("Temporary provider failure");
154+expect(result.deliveryPayloads).toEqual([
155+{ text: "Temporary provider failure", isError: true },
156+]);
79157});
8015881159it("truncates long summaries", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。