openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
127 lines (126 loc) • 4.5 kB
JavaScript
import { u as resolvePluginApprovalRequestAllowedDecisions } from "./plugin-approvals-CcsweryB.js";
import { j as resolveExecApprovalRequestAllowedDecisions } from "./exec-approvals-C6M6SGY3.js";
import { a as buildExecApprovalActionDescriptors } from "./exec-approval-reply-BXMsffTv.js";
import { t as resolveExecApprovalCommandDisplay } from "./exec-approval-command-display-BYD_3EWn.js";
//#region src/infra/approval-view-model.ts
function buildExecMetadata(request) {
const metadata = [];
if (request.request.agentId) metadata.push({
label: "Agent",
value: request.request.agentId
});
if (request.request.cwd) metadata.push({
label: "CWD",
value: request.request.cwd
});
if (request.request.host) metadata.push({
label: "Host",
value: request.request.host
});
if (Array.isArray(request.request.envKeys) && request.request.envKeys.length > 0) metadata.push({
label: "Env Overrides",
value: request.request.envKeys.join(", ")
});
return metadata;
}
function buildPluginMetadata(request) {
const metadata = [];
const severity = request.request.severity ?? "warning";
metadata.push({
label: "Severity",
value: severity === "critical" ? "Critical" : severity === "info" ? "Info" : "Warning"
});
if (request.request.toolName) metadata.push({
label: "Tool",
value: request.request.toolName
});
if (request.request.pluginId) metadata.push({
label: "Plugin",
value: request.request.pluginId
});
if (request.request.agentId) metadata.push({
label: "Agent",
value: request.request.agentId
});
return metadata;
}
function buildExecViewBase(request, phase) {
const { commandText, commandPreview } = resolveExecApprovalCommandDisplay(request.request);
return {
approvalId: request.id,
approvalKind: "exec",
phase,
title: phase === "pending" ? "Exec Approval Required" : "Exec Approval",
description: phase === "pending" ? "A command needs your approval." : null,
metadata: buildExecMetadata(request),
ask: request.request.ask ?? null,
agentId: request.request.agentId ?? null,
warningText: request.request.warningText ?? null,
commandAnalysis: request.request.commandAnalysis ?? null,
commandText,
commandPreview,
cwd: request.request.cwd ?? null,
envKeys: request.request.envKeys ?? void 0,
host: request.request.host ?? null,
nodeId: request.request.nodeId ?? null,
sessionKey: request.request.sessionKey ?? null
};
}
function buildPluginViewBase(request, phase) {
return {
approvalId: request.id,
approvalKind: "plugin",
phase,
title: request.request.title,
description: request.request.description ?? null,
metadata: buildPluginMetadata(request),
agentId: request.request.agentId ?? null,
pluginId: request.request.pluginId ?? null,
toolName: request.request.toolName ?? null,
severity: request.request.severity ?? "warning"
};
}
/** Builds the presentation model for an unresolved exec or plugin approval. */
function buildPendingApprovalView(request) {
if (request.id.startsWith("plugin:")) {
const pluginRequest = request;
return {
...buildPluginViewBase(pluginRequest, "pending"),
actions: buildExecApprovalActionDescriptors({
approvalCommandId: pluginRequest.id,
allowedDecisions: resolvePluginApprovalRequestAllowedDecisions(pluginRequest.request)
}),
expiresAtMs: pluginRequest.expiresAtMs
};
}
const execRequest = request;
return {
...buildExecViewBase(execRequest, "pending"),
actions: buildExecApprovalActionDescriptors({
approvalCommandId: execRequest.id,
ask: execRequest.request.ask,
allowedDecisions: resolveExecApprovalRequestAllowedDecisions(execRequest.request)
}),
expiresAtMs: execRequest.expiresAtMs
};
}
/** Builds the presentation model for an approval after a decision was recorded. */
function buildResolvedApprovalView(request, resolved) {
if (request.id.startsWith("plugin:")) return {
...buildPluginViewBase(request, "resolved"),
decision: resolved.decision,
resolvedBy: resolved.resolvedBy
};
return {
...buildExecViewBase(request, "resolved"),
decision: resolved.decision,
resolvedBy: resolved.resolvedBy
};
}
/** Builds the presentation model shown when an approval can no longer be acted on. */
function buildExpiredApprovalView(request) {
if (request.id.startsWith("plugin:")) return buildPluginViewBase(request, "expired");
return buildExecViewBase(request, "expired");
}
//#endregion
export { buildPendingApprovalView as n, buildResolvedApprovalView as r, buildExpiredApprovalView as t };