function readRecord(value: unknown): Record { return value && typeof value === "object" && !Array.isArray(value) ? (value as Record) : {}; } function readText(value: unknown) { return typeof value === "string" ? value.trim() : ""; } function getTaskPayloadRecords(payload: unknown) { const root = readRecord(payload); return { root, records: [ root, readRecord(root.task), readRecord(root.output), readRecord(root.result), ], }; } export function getOpenClawTaskStatus(payload: unknown) { const { root } = getTaskPayloadRecords(payload); return ( readText(readRecord(root.task).status) || readText(root.status) ).toLowerCase(); } export function isOpenClawAwaitingUserInputTurnComplete(payload: unknown) { const { records } = getTaskPayloadRecords(payload); const turnComplete = records.some( (record) => record.turn_complete === true || record.turnComplete === true ); const awaitingUserInput = records.some( (record) => record.awaiting_user_input === true || record.awaitingUserInput === true || readText(record.business_status ?? record.businessStatus).toLowerCase() === "awaiting_user_input" ); return turnComplete && awaitingUserInput; } export function getOpenClawTaskAnswer(payload: unknown) { const { root } = getTaskPayloadRecords(payload); const output = readRecord(root.output); const result = readRecord(root.result); return ( readText(root.answer) || readText(root.output) || readText(output.answer) || readText(output.output) || readText(root.result) || readText(result.answer) || readText(result.output) ); }