diff --git a/Dockerfile b/Dockerfile index d440ff1c287..7aacb434797 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ RUN corepack enable WORKDIR /app COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ +COPY openclaw.mjs ./ COPY ui/package.json ./ui/package.json COPY patches ./patches COPY scripts/postinstall-bundled-plugins.mjs scripts/npm-runner.mjs scripts/windows-cmd-helpers.mjs ./scripts/ diff --git a/extensions/qa-lab/web/src/app.ts b/extensions/qa-lab/web/src/app.ts index 226720353a5..017552d6de7 100644 --- a/extensions/qa-lab/web/src/app.ts +++ b/extensions/qa-lab/web/src/app.ts @@ -1,4 +1,4 @@ -import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; +import { formatErrorMessage } from "./errors.js"; import { type Bootstrap, type OutcomesEnvelope, diff --git a/extensions/qa-lab/web/src/errors.ts b/extensions/qa-lab/web/src/errors.ts new file mode 100644 index 00000000000..1087fb2488d --- /dev/null +++ b/extensions/qa-lab/web/src/errors.ts @@ -0,0 +1,33 @@ +export function formatErrorMessage(err: unknown): string { + if (err instanceof Error) { + let formatted = err.message || err.name || "Error"; + let cause: unknown = err.cause; + const seen = new Set([err]); + while (cause && !seen.has(cause)) { + seen.add(cause); + if (cause instanceof Error) { + if (cause.message) { + formatted += ` | ${cause.message}`; + } + cause = cause.cause; + continue; + } + if (typeof cause === "string") { + formatted += ` | ${cause}`; + } + break; + } + return formatted; + } + if (typeof err === "string") { + return err; + } + if (typeof err === "number" || typeof err === "boolean" || typeof err === "bigint") { + return String(err); + } + try { + return JSON.stringify(err); + } catch { + return Object.prototype.toString.call(err); + } +} diff --git a/scripts/docker/cleanup-smoke/Dockerfile b/scripts/docker/cleanup-smoke/Dockerfile index a25c4ac7b56..61c29f14607 100644 --- a/scripts/docker/cleanup-smoke/Dockerfile +++ b/scripts/docker/cleanup-smoke/Dockerfile @@ -15,6 +15,7 @@ RUN --mount=type=cache,id=openclaw-cleanup-smoke-apt-cache,target=/var/cache/apt WORKDIR /repo COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ +COPY openclaw.mjs ./ COPY ui/package.json ./ui/package.json COPY packages ./packages COPY extensions ./extensions