fix: report errors to progress comment when agent fails without throwing (#376)
* 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>
This commit is contained in:
committed by
pullfrog[bot]
parent
1ed3da8273
commit
6311138132
+29
-5
@@ -1,13 +1,37 @@
|
||||
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 function handleAgentResult(result: AgentResult): MainResult {
|
||||
if (!result.success) {
|
||||
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: result.error || "Agent execution failed",
|
||||
output: result.output!,
|
||||
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 || "",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -15,6 +39,6 @@ export function handleAgentResult(result: AgentResult): MainResult {
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: result.output || "",
|
||||
output: ctx.result.output || "",
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user