Surface wait_for_finish agent errors
This commit is contained in:
@@ -257,6 +257,17 @@ export function resolveCreateAgentTitles(options: {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveWaitForFinishError(options: {
|
||||||
|
status: "permission" | "error" | "idle";
|
||||||
|
final: AgentSnapshotPayload | null;
|
||||||
|
}): string | null {
|
||||||
|
if (options.status !== "error") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const message = options.final?.lastError;
|
||||||
|
return typeof message === "string" && message.trim().length > 0 ? message : "Agent failed";
|
||||||
|
}
|
||||||
|
|
||||||
type ProcessingPhase = "idle" | "transcribing";
|
type ProcessingPhase = "idle" | "transcribing";
|
||||||
|
|
||||||
type WorkspaceGitWatchTarget = {
|
type WorkspaceGitWatchTarget = {
|
||||||
@@ -6569,9 +6580,10 @@ export class Session {
|
|||||||
: record.lastStatus === "error"
|
: record.lastStatus === "error"
|
||||||
? "error"
|
? "error"
|
||||||
: "idle";
|
: "idle";
|
||||||
|
const error = resolveWaitForFinishError({ status, final });
|
||||||
this.emit({
|
this.emit({
|
||||||
type: "wait_for_finish_response",
|
type: "wait_for_finish_response",
|
||||||
payload: { requestId, status, final, error: null, lastMessage: null },
|
payload: { requestId, status, final, error, lastMessage: null },
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -6598,9 +6610,11 @@ export class Session {
|
|||||||
: result.status === "error"
|
: result.status === "error"
|
||||||
? "error"
|
? "error"
|
||||||
: "idle";
|
: "idle";
|
||||||
|
const error = resolveWaitForFinishError({ status, final });
|
||||||
|
|
||||||
this.emit({
|
this.emit({
|
||||||
type: "wait_for_finish_response",
|
type: "wait_for_finish_response",
|
||||||
payload: { requestId, status, final, error: null, lastMessage: result.lastMessage },
|
payload: { requestId, status, final, error, lastMessage: result.lastMessage },
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const isAbort =
|
const isAbort =
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import { describe, expect, test } from "vitest";
|
||||||
|
|
||||||
|
import { resolveWaitForFinishError } from "./session.js";
|
||||||
|
|
||||||
|
describe("resolveWaitForFinishError", () => {
|
||||||
|
test("returns the agent error when the wait result is an error", () => {
|
||||||
|
expect(
|
||||||
|
resolveWaitForFinishError({
|
||||||
|
status: "error",
|
||||||
|
final: { lastError: "invalid_json_schema" } as any,
|
||||||
|
}),
|
||||||
|
).toBe("invalid_json_schema");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns a generic fallback when the agent ended in error without a message", () => {
|
||||||
|
expect(
|
||||||
|
resolveWaitForFinishError({
|
||||||
|
status: "error",
|
||||||
|
final: {} as any,
|
||||||
|
}),
|
||||||
|
).toBe("Agent failed");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns null for non-error wait results", () => {
|
||||||
|
expect(
|
||||||
|
resolveWaitForFinishError({
|
||||||
|
status: "idle",
|
||||||
|
final: { lastError: "should not surface" } as any,
|
||||||
|
}),
|
||||||
|
).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user