openhands / src /utils /automation-debug-prompt.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
5f40163 verified
Raw History Blame Contribute Delete
2.27 kB
export interface AutomationDebugPromptInput {
/** Human-readable automation name, if known. */
automationName?: string;
/** The automation's instructions (what it was set up to do). */
automationPrompt?: string | null;
/** Run-level error string; the durable fallback when stderr is unavailable. */
errorDetail?: string | null;
/** The run's captured stderr (the traceback shown in the Error tab). */
stderr?: string | null;
/** The failed run's id, included as a reference. */
runId: string;
}
// Keep the seeded first message bounded. A traceback's most useful part is the
// tail (the actual error), so when the captured output is huge we keep the end.
const MAX_ERROR_CHARS = 4000;
function keepTail(text: string, max: number): string {
if (text.length <= max) return text;
return `…(truncated)…\n${text.slice(text.length - max)}`;
}
/**
* Build the first message for a "Debug with OpenHands" conversation started
* from a failed automation run. This is an instruction to the agent (not
* user-facing UI copy), so it is intentionally in English and not localized.
*/
export function buildAutomationDebugPrompt({
automationName,
automationPrompt,
errorDetail,
stderr,
runId,
}: AutomationDebugPromptInput): string {
// Prefer the live stderr the user is looking at; fall back to the run-level
// error_detail when the sandbox is gone and stderr couldn't be fetched.
const rawError = stderr?.trim() || errorDetail?.trim() || "";
const errorSection = rawError
? keepTail(rawError, MAX_ERROR_CHARS)
: "No error output was captured for this run.";
const trimmedName = automationName?.trim();
const intro = trimmedName
? `The scheduled automation "${trimmedName}" failed during a run.`
: "A scheduled automation failed during a run.";
const lines: string[] = [
`${intro} Please investigate the error and fix the root cause.`,
];
const trimmedPrompt = automationPrompt?.trim();
if (trimmedPrompt) {
lines.push("", "What the automation was set up to do:", trimmedPrompt);
}
lines.push(
"",
`Error output from the failed run (run ${runId}):`,
errorSection,
"",
"Please diagnose why it failed and propose or implement a fix.",
);
return lines.join("\n");
}