6311138132
* fix: report errors to progress comment when agent fails without throwing when an agent returns success: false without throwing (e.g., opencode exits with code 0 despite provider errors), the catch block in main.ts is never reached, leaving the progress comment stuck on "leaping into action." two fixes: - opencode: return success: false when 0 events processed and a provider error was detected (converts silent failures to explicit failures) - main.ts: after handleAgentResult, check if the progress comment was ever updated — if not, report the error to the comment as a safety net Co-authored-by: Cursor <cursoragent@cursor.com> * address review: use result directly and force failure on unreported progress * refactor: move safety-net logic into handleAgentResult --------- Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Anna Bocharova <robin_tail@me.com>
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import type { AgentResult } from "../agents/shared.ts";
|
|
import type { MainResult } from "../main.ts";
|
|
import type { ToolState } from "../mcp/server.ts";
|
|
import { log } from "./cli.ts";
|
|
import { reportErrorToComment } from "./errorReport.ts";
|
|
|
|
export interface HandleAgentResultParams {
|
|
result: AgentResult;
|
|
toolState: ToolState;
|
|
silent: boolean | undefined;
|
|
}
|
|
|
|
export async function handleAgentResult(ctx: HandleAgentResultParams): Promise<MainResult> {
|
|
if (!ctx.result.success) {
|
|
return {
|
|
success: false,
|
|
error: ctx.result.error || "Agent execution failed",
|
|
output: ctx.result.output!,
|
|
};
|
|
}
|
|
|
|
if (!ctx.toolState.wasUpdated && ctx.toolState.progressCommentId && !ctx.silent) {
|
|
const error = ctx.result.error || "agent completed without reporting progress";
|
|
try {
|
|
await reportErrorToComment({
|
|
toolState: ctx.toolState,
|
|
error,
|
|
title: "Error",
|
|
});
|
|
} catch {}
|
|
return {
|
|
success: false,
|
|
error,
|
|
output: ctx.result.output || "",
|
|
};
|
|
}
|
|
|
|
log.success("Task complete.");
|
|
|
|
return {
|
|
success: true,
|
|
output: ctx.result.output || "",
|
|
};
|
|
}
|