ai-chatbot/lib/openclaw-chat/task-protocol.ts

60 lines
1.7 KiB
TypeScript

function readRecord(value: unknown): Record<string, unknown> {
return value && typeof value === "object" && !Array.isArray(value)
? (value as Record<string, unknown>)
: {};
}
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)
);
}