diff --git a/src/entrypoints/update-comment-link.ts b/src/entrypoints/update-comment-link.ts index 9090373..c29edf4 100644 --- a/src/entrypoints/update-comment-link.ts +++ b/src/entrypoints/update-comment-link.ts @@ -147,6 +147,7 @@ async function run() { } | null = null; let actionFailed = false; let errorDetails: string | undefined; + let errorSubtype: string | undefined; // First check if prepare step failed const prepareSuccess = process.env.PREPARE_SUCCESS !== "false"; @@ -166,23 +167,40 @@ async function run() { // Output file is an array, get the last element which contains execution details if (Array.isArray(outputData) && outputData.length > 0) { const lastElement = outputData[outputData.length - 1]; - if ( - lastElement.type === "result" && - "cost_usd" in lastElement && - "duration_ms" in lastElement - ) { + if (lastElement.type === "result") { + // Extract execution details executionDetails = { - cost_usd: lastElement.cost_usd, + cost_usd: lastElement.total_cost_usd, duration_ms: lastElement.duration_ms, duration_api_ms: lastElement.duration_api_ms, }; + + // Check if this is an error result based on subtype + switch (lastElement.subtype) { + case "error_during_execution": + errorSubtype = "Error during execution"; + // Override the actionFailed flag based on the result + actionFailed = true; + break; + case "error_max_turns": + errorSubtype = "Maximum turns exceeded"; + actionFailed = true; + break; + } } } } - // Check if the Claude action failed - const claudeSuccess = process.env.CLAUDE_SUCCESS !== "false"; - actionFailed = !claudeSuccess; + // Check if the Claude action failed (only if not already determined from result) + if (!actionFailed) { + const claudeSuccess = process.env.CLAUDE_SUCCESS !== "false"; + actionFailed = !claudeSuccess; + } + + // Use errorSubtype as errorDetails if no other error details are available + if (actionFailed && !errorDetails && errorSubtype) { + errorDetails = errorSubtype; + } } catch (error) { console.error("Error reading output file:", error); // If we can't read the file, check for any failure markers diff --git a/src/github/operations/comment-logic.ts b/src/github/operations/comment-logic.ts index 6a4551a..95a612e 100644 --- a/src/github/operations/comment-logic.ts +++ b/src/github/operations/comment-logic.ts @@ -114,6 +114,16 @@ export function updateCommentBody(input: CommentUpdateInput): string { if (actionFailed) { header = "**Claude encountered an error"; + + // Add error type to header if available + if (errorDetails) { + if (errorDetails === "Error during execution") { + header = "**Claude encountered an error during execution"; + } else if (errorDetails === "Maximum turns exceeded") { + header = "**Claude exceeded the maximum number of turns"; + } + } + if (durationStr) { header += ` after ${durationStr}`; } @@ -181,8 +191,13 @@ export function updateCommentBody(input: CommentUpdateInput): string { // Build the new body with blank line between header and separator let newBody = `${header}${links}`; - // Add error details if available - if (actionFailed && errorDetails) { + // Add error details if available (but not if it's just the error type we already showed in header) + if ( + actionFailed && + errorDetails && + errorDetails !== "Error during execution" && + errorDetails !== "Maximum turns exceeded" + ) { newBody += `\n\n\`\`\`\n${errorDetails}\n\`\`\``; }