From 325ff24bae6bcb2642d00b315e45f17564216e11 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 7 Apr 2026 01:10:35 +0100 Subject: [PATCH] refactor: dedupe probe error formatting --- extensions/googlechat/src/api.ts | 3 ++- extensions/line/src/probe.ts | 3 ++- extensions/matrix/src/matrix/probe.ts | 4 ++-- extensions/mattermost/src/mattermost/probe.ts | 3 ++- extensions/nextcloud-talk/src/room-info.ts | 3 ++- extensions/slack/src/probe.ts | 3 ++- src/infra/node-sqlite.ts | 3 ++- src/memory-host-sdk/host/batch-error-utils.ts | 4 +++- src/memory-host-sdk/host/memory-schema.ts | 3 ++- src/memory-host-sdk/host/qmd-query-parser.ts | 3 ++- src/memory-host-sdk/host/sqlite-vec.ts | 3 ++- src/memory-host-sdk/host/sqlite.ts | 3 ++- 12 files changed, 25 insertions(+), 13 deletions(-) diff --git a/extensions/googlechat/src/api.ts b/extensions/googlechat/src/api.ts index 391ac844847..f5262b59286 100644 --- a/extensions/googlechat/src/api.ts +++ b/extensions/googlechat/src/api.ts @@ -1,4 +1,5 @@ import crypto from "node:crypto"; +import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; import { fetchWithSsrFGuard } from "../runtime-api.js"; import type { ResolvedGoogleChatAccount } from "./accounts.js"; import { getGoogleChatAccessToken } from "./auth.js"; @@ -313,7 +314,7 @@ export async function probeGoogleChat(account: ResolvedGoogleChatAccount): Promi } catch (err) { return { ok: false, - error: err instanceof Error ? err.message : String(err), + error: formatErrorMessage(err), }; } } diff --git a/extensions/line/src/probe.ts b/extensions/line/src/probe.ts index a2a10d6afa3..6978d575915 100644 --- a/extensions/line/src/probe.ts +++ b/extensions/line/src/probe.ts @@ -1,4 +1,5 @@ import { messagingApi } from "@line/bot-sdk"; +import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; import { withTimeout } from "openclaw/plugin-sdk/text-runtime"; import type { LineProbeResult } from "./types.js"; @@ -27,7 +28,7 @@ export async function probeLineBot( }, }; } catch (err) { - const message = err instanceof Error ? err.message : String(err); + const message = formatErrorMessage(err); return { ok: false, error: message }; } } diff --git a/extensions/matrix/src/matrix/probe.ts b/extensions/matrix/src/matrix/probe.ts index 2ab83e49f75..feab209b37b 100644 --- a/extensions/matrix/src/matrix/probe.ts +++ b/extensions/matrix/src/matrix/probe.ts @@ -1,4 +1,4 @@ -import type { PinnedDispatcherPolicy } from "openclaw/plugin-sdk/infra-runtime"; +import { formatErrorMessage, type PinnedDispatcherPolicy } from "openclaw/plugin-sdk/infra-runtime"; import type { SsrFPolicy } from "../runtime-api.js"; import type { BaseProbeResult } from "../runtime-api.js"; import { isBunRuntime } from "./client/runtime.js"; @@ -88,7 +88,7 @@ export async function probeMatrix(params: { typeof err === "object" && err && "statusCode" in err ? Number((err as { statusCode?: number }).statusCode) : result.status, - error: err instanceof Error ? err.message : String(err), + error: formatErrorMessage(err), elapsedMs: Date.now() - started, }; } diff --git a/extensions/mattermost/src/mattermost/probe.ts b/extensions/mattermost/src/mattermost/probe.ts index 0b0e72c4db4..971ea58f8aa 100644 --- a/extensions/mattermost/src/mattermost/probe.ts +++ b/extensions/mattermost/src/mattermost/probe.ts @@ -1,3 +1,4 @@ +import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; import { fetchWithSsrFGuard, ssrfPolicyFromPrivateNetworkOptIn, @@ -60,7 +61,7 @@ export async function probeMattermost( await release(); } } catch (err) { - const message = err instanceof Error ? err.message : String(err); + const message = formatErrorMessage(err); return { ok: false, status: null, diff --git a/extensions/nextcloud-talk/src/room-info.ts b/extensions/nextcloud-talk/src/room-info.ts index 7d9bbdcd24a..7952ac1c76d 100644 --- a/extensions/nextcloud-talk/src/room-info.ts +++ b/extensions/nextcloud-talk/src/room-info.ts @@ -1,4 +1,5 @@ import { readFileSync } from "node:fs"; +import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; import { ssrfPolicyFromPrivateNetworkOptIn } from "openclaw/plugin-sdk/ssrf-runtime"; import { fetchWithSsrFGuard, type RuntimeEnv } from "../runtime-api.js"; import type { ResolvedNextcloudTalkAccount } from "./accounts.js"; @@ -139,7 +140,7 @@ export async function resolveNextcloudTalkRoomKind(params: { } catch (err) { roomCache.set(key, { fetchedAt: Date.now(), - error: err instanceof Error ? err.message : String(err), + error: formatErrorMessage(err), }); runtime?.error?.(`nextcloud-talk: room lookup error: ${String(err)}`); return undefined; diff --git a/extensions/slack/src/probe.ts b/extensions/slack/src/probe.ts index a0d698e54b5..9d7c8eac1b8 100644 --- a/extensions/slack/src/probe.ts +++ b/extensions/slack/src/probe.ts @@ -1,4 +1,5 @@ import type { BaseProbeResult } from "openclaw/plugin-sdk/channel-contract"; +import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime"; import { withTimeout } from "openclaw/plugin-sdk/text-runtime"; import { createSlackWebClient } from "./client.js"; @@ -30,7 +31,7 @@ export async function probeSlack(token: string, timeoutMs = 2500): Promise