import type { ThreadMessage } from "@rakazo/contracts"; export function isInterruptedStepMessage(message: ThreadMessage): boolean { if ( message.blocks.some( (b) => b.kind === "meta" && /interrupted|cancelled|unterbrochen/i.test(b.text), ) ) { return true; } const hasMeaningfulContent = message.blocks.some((b) => { if (b.kind === "text") { const trimmed = b.text.trim(); return trimmed.length > 3 || (trimmed.length > 0 && /[.!?:]/.test(trimmed)); } return ( b.kind === "image" || b.kind === "file" || b.kind === "card" || b.kind === "chart" || b.kind === "skill_draft" || b.kind === "mcp_approval" ); }); if (hasMeaningfulContent) { return false; } return message.blocks.some( (b) => b.kind === "text" && b.text.trim().length > 0 && b.text.trim().length <= 3 && !/[.!?:]/.test(b.text.trim()), ); }