UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

47 lines (46 loc) 2.87 kB
import { r as stripAnsi, t as sanitizeForLog } from "./ansi-DrXAcdMD.js"; import { n as sliceUtf16Safe, r as truncateUtf16Safe } from "./utf16-slice-D_ngcYKd.js"; import { n as sanitizeTerminalText } from "./safe-text-BGBqp1a4.js"; //#region src/process/command-error.ts function formatCommandOutput(output, maxChars = 800) { const text = stripAnsi(output.toString()).replace(/(^|[^\r])\r+(?=\n|$)/g, "$1").replace(/(^|\n)[^\n]*\r/g, "$1").trim().replace(/[^\n]+/g, sanitizeTerminalText); const tail = text.split("\n").slice(-12).join("\n"); return `${tail.length < text.length || tail.length > maxChars ? "…\n" : ""}${sliceUtf16Safe(tail, Math.max(0, tail.length - maxChars))}`; } /** Use an operation label, never argv that may contain credentials. */ function formatCommandResult(command, result) { const label = truncateUtf16Safe(sanitizeForLog(command.replace(/[\r\n]+/g, " ")), 256); const termination = result.outputLimitExceeded ? "output-limit" : result.termination; const signal = result.signal ? `, signal=${result.signal}` : ""; const killed = result.killed ? ", killed=true" : ""; return [`${label} ${result.code === 0 ? "exited" : "failed"} (code=${result.code}, termination=${termination}${signal}${killed})`, ...["stderr", "stdout"].flatMap((stream) => { const output = formatCommandOutput(result[stream]); return output ? [`${stream}: ${output}`] : []; })].join("\n"); } function createCommandError(command, result, options) { const stderr = formatCommandOutput(result.stderr, 2e3); const stdout = formatCommandOutput(result.stdout, 2e3); let detail = stderr || stdout; if (stderr && stdout) { const budget = 1983; const first = Math.min(stderr.length, Math.max(Math.ceil(budget / 2), budget - stdout.length)); const tail = (output, limit) => output.length <= limit ? output : `…\n${sliceUtf16Safe(output, 2 - limit)}`; detail = `stderr: ${tail(stderr, first)}\nstdout: ${tail(stdout, budget - first)}`; } const signal = result.signal ? `signal ${result.signal}` : ""; const limited = "outputLimitExceeded" in result && result.outputLimitExceeded ? "output limit exceeded" : ""; const exitReason = limited || (!signal && result.code !== null ? `exit code ${result.code}` : ""); const reason = [{ timeout: `timed out after ${options.timeoutMs / 1e3} seconds`, "no-output-timeout": "timed out waiting for output", "output-limit": "output limit exceeded", exit: exitReason, error: exitReason, signal: limited || (!signal ? "terminated" : "") }[result.termination], signal].filter(Boolean).join("; "); const label = truncateUtf16Safe(stripAnsi(command).replace(/[\r\n]+/g, " "), 256); return /* @__PURE__ */ new Error(`${label} failed${reason ? ` (${reason})` : ""}${detail ? `:\n${detail}` : ""}`); } //#endregion export { formatCommandOutput as n, formatCommandResult as r, createCommandError as t };