60 lines
1.7 KiB
TypeScript
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)
|
|
);
|
|
}
|