mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-30 11:21:07 +00:00
Merged via squash.
Prepared head SHA: f243379094
Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Reviewed-by: @huntharo
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { callGatewayTool } from "./tools/gateway.js";
|
|
|
|
type ExecApprovalFollowupParams = {
|
|
approvalId: string;
|
|
sessionKey?: string;
|
|
turnSourceChannel?: string;
|
|
turnSourceTo?: string;
|
|
turnSourceAccountId?: string;
|
|
turnSourceThreadId?: string | number;
|
|
resultText: string;
|
|
};
|
|
|
|
export function buildExecApprovalFollowupPrompt(resultText: string): string {
|
|
return [
|
|
"An async command the user already approved has completed.",
|
|
"Do not run the command again.",
|
|
"",
|
|
"Exact completion details:",
|
|
resultText.trim(),
|
|
"",
|
|
"Reply to the user in a helpful way.",
|
|
"If it succeeded, share the relevant output.",
|
|
"If it failed, explain what went wrong.",
|
|
].join("\n");
|
|
}
|
|
|
|
export async function sendExecApprovalFollowup(
|
|
params: ExecApprovalFollowupParams,
|
|
): Promise<boolean> {
|
|
const sessionKey = params.sessionKey?.trim();
|
|
const resultText = params.resultText.trim();
|
|
if (!sessionKey || !resultText) {
|
|
return false;
|
|
}
|
|
|
|
const channel = params.turnSourceChannel?.trim();
|
|
const to = params.turnSourceTo?.trim();
|
|
const threadId =
|
|
params.turnSourceThreadId != null && params.turnSourceThreadId !== ""
|
|
? String(params.turnSourceThreadId)
|
|
: undefined;
|
|
|
|
await callGatewayTool(
|
|
"agent",
|
|
{ timeoutMs: 60_000 },
|
|
{
|
|
sessionKey,
|
|
message: buildExecApprovalFollowupPrompt(resultText),
|
|
deliver: true,
|
|
bestEffortDeliver: true,
|
|
channel: channel && to ? channel : undefined,
|
|
to: channel && to ? to : undefined,
|
|
accountId: channel && to ? params.turnSourceAccountId?.trim() || undefined : undefined,
|
|
threadId: channel && to ? threadId : undefined,
|
|
idempotencyKey: `exec-approval-followup:${params.approvalId}`,
|
|
},
|
|
{ expectFinal: true },
|
|
);
|
|
|
|
return true;
|
|
}
|