
























@@ -57,8 +57,9 @@ async function handleAgentEndAndReadWarnMeta(ctx: EmbeddedPiSubscribeContext) {
57575858const warn = vi.mocked(ctx.log.warn);
5959expect(warn).toHaveBeenCalledTimes(1);
60-expect(warn.mock.calls.at(0)?.[0]).toBe("embedded run agent end");
61-return readRecord(warn.mock.calls.at(0)?.[1]);
60+const [message, meta] = firstMockCall(warn);
61+expect(message).toBe("embedded run agent end");
62+return readRecord(meta);
6263}
63646465function readRecord(value: unknown): Record<string, unknown> {
@@ -68,6 +69,18 @@ function readRecord(value: unknown): Record<string, unknown> {
6869return value as Record<string, unknown>;
6970}
707172+function firstMockCall(mock: { mock: { calls: ReadonlyArray<ReadonlyArray<unknown>> } }) {
73+const call = mock.mock.calls[0];
74+if (!call) {
75+throw new Error("expected first mock call");
76+}
77+return call;
78+}
79+80+function firstWarnMeta(ctx: EmbeddedPiSubscribeContext): Record<string, unknown> {
81+return readRecord(firstMockCall(vi.mocked(ctx.log.warn))[1]);
82+}
83+7184describe("handleAgentEnd", () => {
7285it("logs the resolved error message when run ends with assistant error", async () => {
7386const onAgentEvent = vi.fn();
@@ -137,8 +150,7 @@ describe("handleAgentEnd", () => {
137150138151await handleAgentEnd(ctx);
139152140-const warn = vi.mocked(ctx.log.warn);
141-const meta = readRecord(warn.mock.calls.at(0)?.[1]);
153+const meta = firstWarnMeta(ctx);
142154expect(meta.consoleMessage).toBe(
143155"embedded run agent end: runId=run-1 isError=true model=claude sonnet 4 provider=anthropic]8;;https://evil.test error=LLM request failed: connection refused by the provider endpoint. rawError=connection refused",
144156);
@@ -162,8 +174,7 @@ describe("handleAgentEnd", () => {
162174163175await handleAgentEnd(ctx);
164176165-const warn = vi.mocked(ctx.log.warn);
166-const meta = readRecord(warn.mock.calls.at(0)?.[1]);
177+const meta = firstWarnMeta(ctx);
167178expect(meta.event).toBe("embedded_run_agent_end");
168179expect(meta.error).toBe("x-api-key: ***");
169180expect(meta.rawErrorPreview).toBe("x-api-key: ***");
@@ -189,7 +200,7 @@ describe("handleAgentEnd", () => {
189200190201await handleAgentEnd(ctx);
191202192-const meta = readRecord(vi.mocked(ctx.log.warn).mock.calls.at(0)?.[1]);
203+const meta = firstWarnMeta(ctx);
193204expect(meta.failoverReason).toBe("auth");
194205expect(meta.providerRuntimeFailureKind).toBe("auth_scope");
195206expect(meta.httpCode).toBe("401");
@@ -207,8 +218,7 @@ describe("handleAgentEnd", () => {
207218208219await handleAgentEnd(ctx);
209220210-const warnMeta = vi.mocked(ctx.log.warn).mock.calls.at(0)?.[1];
211-const meta = readRecord(warnMeta);
221+const meta = firstWarnMeta(ctx);
212222expect(meta.providerRuntimeFailureKind).toBe("auth_html_403");
213223expect(meta.rawErrorPreview).toBe("403 <!DOCTYPE html><html><body>Access denied</body></html>");
214224expect(meta.error).toBe(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。