101 lines
3.6 KiB
JavaScript
101 lines
3.6 KiB
JavaScript
function trimToUndefined(value) {
|
|
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
}
|
|
|
|
function normalizeCompletionStatus(status) {
|
|
if (status === "failed") return "failed";
|
|
if (status === "needs_user_action") return "needs_user_action";
|
|
return "completed";
|
|
}
|
|
|
|
function normalizeStringArray(value) {
|
|
return Array.isArray(value)
|
|
? value.map((item) => String(item).trim()).filter(Boolean)
|
|
: undefined;
|
|
}
|
|
|
|
export function buildRemoteExecutionCompletionPayload(task, payload) {
|
|
return {
|
|
taskId: task.taskId,
|
|
status: normalizeCompletionStatus(payload.status),
|
|
requestId: trimToUndefined(payload.requestId),
|
|
replyBody: trimToUndefined(payload.replyBody),
|
|
errorMessage: trimToUndefined(payload.errorMessage),
|
|
kind: trimToUndefined(payload.kind),
|
|
dialogId: trimToUndefined(payload.dialogId),
|
|
appName: trimToUndefined(payload.appName),
|
|
platform: trimToUndefined(payload.platform),
|
|
risk: trimToUndefined(payload.risk),
|
|
summary: trimToUndefined(payload.summary),
|
|
recommendedAction: trimToUndefined(payload.recommendedAction),
|
|
availableActions: normalizeStringArray(payload.availableActions),
|
|
dispatchExecutionId: trimToUndefined(payload.dispatchExecutionId),
|
|
targetProjectId: trimToUndefined(payload.targetProjectId),
|
|
targetThreadId: trimToUndefined(payload.targetThreadId),
|
|
targetUrl: trimToUndefined(payload.targetUrl),
|
|
targetApp: trimToUndefined(payload.targetApp),
|
|
rawThreadReply: trimToUndefined(payload.rawThreadReply),
|
|
executionProgress:
|
|
payload.executionProgress && typeof payload.executionProgress === "object"
|
|
? payload.executionProgress
|
|
: undefined,
|
|
};
|
|
}
|
|
|
|
export function buildComputerUseCompletionPayload(task, result) {
|
|
if (result?.status === "needs_user_action") {
|
|
return buildRemoteExecutionCompletionPayload(task, {
|
|
status: "needs_user_action",
|
|
requestId: result.requestId,
|
|
kind: result.kind,
|
|
dialogId: result.dialogId,
|
|
appName: result.appName,
|
|
platform: result.platform,
|
|
risk: result.risk,
|
|
summary: result.summary,
|
|
recommendedAction: result.recommendedAction,
|
|
availableActions: result.availableActions,
|
|
dispatchExecutionId: task.dispatchExecutionId,
|
|
targetProjectId: task.targetProjectId,
|
|
targetThreadId: task.targetThreadId,
|
|
targetApp: result.targetApp ?? result.appName,
|
|
});
|
|
}
|
|
|
|
return buildRemoteExecutionCompletionPayload(task, {
|
|
status: result?.status === "failed" ? "failed" : "completed",
|
|
requestId: result?.requestId,
|
|
replyBody: result?.replyBody,
|
|
errorMessage: result?.errorMessage,
|
|
dispatchExecutionId: task.dispatchExecutionId,
|
|
targetProjectId: task.targetProjectId,
|
|
targetThreadId: task.targetThreadId,
|
|
targetApp: result?.targetApp,
|
|
});
|
|
}
|
|
|
|
export function buildMasterAgentTaskCompletionRequestBody(config, payload) {
|
|
return {
|
|
deviceId: config.deviceId,
|
|
status: payload.status,
|
|
replyBody: payload.replyBody,
|
|
errorMessage: payload.errorMessage,
|
|
requestId: payload.requestId,
|
|
kind: payload.kind,
|
|
dialogId: payload.dialogId,
|
|
appName: payload.appName,
|
|
platform: payload.platform,
|
|
risk: payload.risk,
|
|
summary: payload.summary,
|
|
recommendedAction: payload.recommendedAction,
|
|
availableActions: payload.availableActions,
|
|
dispatchExecutionId: payload.dispatchExecutionId,
|
|
targetProjectId: payload.targetProjectId,
|
|
targetThreadId: payload.targetThreadId,
|
|
targetUrl: payload.targetUrl,
|
|
targetApp: payload.targetApp,
|
|
rawThreadReply: payload.rawThreadReply,
|
|
executionProgress: payload.executionProgress,
|
|
};
|
|
}
|