UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

180 lines (179 loc) 6.99 kB
import { u as resolveExecApprovalRequestAllowedDecisions } from "./exec-approvals-policy-CCFUzTzd.js"; import { n as summarizeApprovalScope } from "./approval-scope-BL54HpUv.js"; import { t as resolveCanonicalPluginApprovalRequestAllowedDecisions } from "./plugin-approval-canonical-decisions-CwBFXTtw.js"; import "./exec-approvals-BSZ-fPIY.js"; import { c as buildTypedApprovalActionDescriptors } from "./exec-approval-reply-ZdeEqz7J.js"; import { s as normalizeApprovalRequest } from "./approval-request-account-binding-Sc-eGYO-.js"; import { t as resolveExecApprovalCommandDisplay } from "./exec-approval-command-display-03IqfHT_.js"; import { t as SYSTEM_AGENT_APPROVAL_DECISIONS } from "./system-agent-approvals-r0J6k0r_.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(", ") }); if (request.request.scope) metadata.push({ label: "Scope", value: summarizeApprovalScope(request.request.scope) }); 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 }); if (request.request.scope) metadata.push({ label: "Scope", value: summarizeApprovalScope(request.request.scope) }); 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, ...request.request.scope ? { scope: request.request.scope } : {}, 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, ...request.request.scope ? { scope: request.request.scope } : {}, toolName: request.request.toolName ?? null, severity: request.request.severity ?? "warning" }; } function buildSystemAgentViewBase(request, phase) { return { approvalId: request.id, approvalKind: "system-agent", phase, title: phase === "pending" ? "OpenClaw change requires approval" : "OpenClaw change", description: request.request.description, metadata: request.request.agentId ? [{ label: "Agent", value: request.request.agentId }] : [], agentId: request.request.agentId ?? null, commandText: request.request.description, commandPreview: request.request.description, cwd: null, host: "gateway", nodeId: null, sessionKey: request.request.sessionKey ?? null, operationSummary: request.request.description }; } /** Builds the presentation model for an unresolved exec or plugin approval. */ function buildPendingApprovalView(request) { const normalizedRequest = normalizeApprovalRequest(request); if (normalizedRequest.approvalKind === "system-agent") return { ...buildSystemAgentViewBase(normalizedRequest, "pending"), actions: buildTypedApprovalActionDescriptors({ approvalCommandId: normalizedRequest.id, approvalKind: normalizedRequest.approvalKind, allowedDecisions: SYSTEM_AGENT_APPROVAL_DECISIONS }), expiresAtMs: normalizedRequest.expiresAtMs }; if (normalizedRequest.approvalKind === "plugin") return { ...buildPluginViewBase(normalizedRequest, "pending"), actions: buildTypedApprovalActionDescriptors({ approvalCommandId: normalizedRequest.id, approvalKind: normalizedRequest.approvalKind, allowedDecisions: resolveCanonicalPluginApprovalRequestAllowedDecisions(normalizedRequest.request) }), expiresAtMs: normalizedRequest.expiresAtMs }; return { ...buildExecViewBase(normalizedRequest, "pending"), actions: buildTypedApprovalActionDescriptors({ approvalCommandId: normalizedRequest.id, approvalKind: normalizedRequest.approvalKind, ask: normalizedRequest.request.ask, allowedDecisions: resolveExecApprovalRequestAllowedDecisions(normalizedRequest.request) }), expiresAtMs: normalizedRequest.expiresAtMs }; } /** Builds the presentation model for an approval after a decision was recorded. */ function buildResolvedApprovalView(request, resolved) { const normalizedRequest = normalizeApprovalRequest(request); if (normalizedRequest.approvalKind === "system-agent") return { ...buildSystemAgentViewBase(normalizedRequest, "resolved"), decision: resolved.decision, resolvedBy: resolved.resolvedBy, applicationStatus: resolved.applicationStatus, terminalStatus: resolved.terminalStatus }; if (normalizedRequest.approvalKind === "plugin") return { ...buildPluginViewBase(normalizedRequest, "resolved"), decision: resolved.decision, resolvedBy: resolved.resolvedBy }; return { ...buildExecViewBase(normalizedRequest, "resolved"), decision: resolved.decision, resolvedBy: resolved.resolvedBy }; } /** Builds the presentation model shown when an approval can no longer be acted on. */ function buildExpiredApprovalView(request) { const normalizedRequest = normalizeApprovalRequest(request); if (normalizedRequest.approvalKind === "system-agent") return buildSystemAgentViewBase(normalizedRequest, "expired"); if (normalizedRequest.approvalKind === "plugin") return buildPluginViewBase(normalizedRequest, "expired"); return buildExecViewBase(normalizedRequest, "expired"); } //#endregion export { buildPendingApprovalView as n, buildResolvedApprovalView as r, buildExpiredApprovalView as t };