* Content-aware one-line summary for tool outputs.
* Detects test results, compilation errors, and falls back to line count.
*/
export function formatToolSummary(
toolName: string,
argsHint: string | undefined,
lineCount: number,
_bytes: number,
ok: boolean,
previewText: string,
): string {
if (!ok) {
const firstLine = previewText.split("\n")[0]?.slice(0, 80) ?? "unknown error";
return `${toolName}: \u2717 ${firstLine}`;
}
const label = argsHint ? `${toolName}: ${argsHint}` : toolName;
if (toolName === "bash") {
const text = previewText;
const passing = text.match(/(\d+)\s*(?:passing|passed|ok)/i);
if (passing) {
const failing = text.match(/(\d+)\s*(?:failing|failed)/i);
return failing
? `${label} \u2192 \u2717 ${passing[1]} passed, ${failing[1]} failed`
: `${label} \u2192 \u2713 ${passing[1]} passed`;
}
if (/error\s*TS\d+|SyntaxError|TypeError|ReferenceError/i.test(text)) {
const errCount = (text.match(/error/gi) ?? []).length;
return `${label} \u2192 \u2717 ${errCount} error${errCount > 1 ? "s" : ""}`;
}
}
return `${label} \u2192 ${lineCount} lines`;
}