mirror of https://github.com/openclaw/openclaw.git
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import type { ExecApprovalRequestPayload } from "./exec-approvals.js";
|
|
|
|
const UNICODE_FORMAT_CHAR_REGEX = /\p{Cf}/gu;
|
|
|
|
function formatCodePointEscape(char: string): string {
|
|
return `\\u{${char.codePointAt(0)?.toString(16).toUpperCase() ?? "FFFD"}}`;
|
|
}
|
|
|
|
export function sanitizeExecApprovalDisplayText(commandText: string): string {
|
|
return commandText.replace(UNICODE_FORMAT_CHAR_REGEX, formatCodePointEscape);
|
|
}
|
|
|
|
function normalizePreview(commandText: string, commandPreview?: string | null): string | null {
|
|
const previewRaw = commandPreview?.trim() ?? "";
|
|
if (!previewRaw) {
|
|
return null;
|
|
}
|
|
const preview = sanitizeExecApprovalDisplayText(previewRaw);
|
|
if (preview === commandText) {
|
|
return null;
|
|
}
|
|
return preview;
|
|
}
|
|
|
|
export function resolveExecApprovalCommandDisplay(request: ExecApprovalRequestPayload): {
|
|
commandText: string;
|
|
commandPreview: string | null;
|
|
} {
|
|
const commandTextSource =
|
|
request.command ||
|
|
(request.host === "node" && request.systemRunPlan ? request.systemRunPlan.commandText : "");
|
|
const commandText = sanitizeExecApprovalDisplayText(commandTextSource);
|
|
const previewSource =
|
|
request.commandPreview ??
|
|
(request.host === "node" ? (request.systemRunPlan?.commandPreview ?? null) : null);
|
|
return {
|
|
commandText,
|
|
commandPreview: normalizePreview(commandText, previewSource),
|
|
};
|
|
}
|