From 342e9cac03d214fc2eb73cd98770ae7c1c1c6ebd Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 19:35:58 +0000 Subject: [PATCH] refactor(status): reuse plugin-sdk status helpers --- extensions/feishu/src/channel.ts | 22 ++++++++------------- extensions/msteams/src/channel.ts | 17 ++++------------ extensions/nostr/src/channel.ts | 26 ++++-------------------- extensions/signal/src/channel.ts | 33 ++++++------------------------- 4 files changed, 22 insertions(+), 76 deletions(-) diff --git a/extensions/feishu/src/channel.ts b/extensions/feishu/src/channel.ts index bdc3aa04ba9..fb7881f2307 100644 --- a/extensions/feishu/src/channel.ts +++ b/extensions/feishu/src/channel.ts @@ -1,5 +1,10 @@ import type { ChannelMeta, ChannelPlugin, ClawdbotConfig } from "openclaw/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk"; +import { + buildBaseChannelStatusSummary, + createDefaultChannelRuntimeState, + DEFAULT_ACCOUNT_ID, + PAIRING_APPROVED_MESSAGE, +} from "openclaw/plugin-sdk"; import type { ResolvedFeishuAccount, FeishuConfig } from "./types.js"; import { resolveFeishuAccount, @@ -303,20 +308,9 @@ export const feishuPlugin: ChannelPlugin = { }, outbound: feishuOutbound, status: { - defaultRuntime: { - accountId: DEFAULT_ACCOUNT_ID, - running: false, - lastStartAt: null, - lastStopAt: null, - lastError: null, - port: null, - }, + defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID, { port: null }), buildChannelSummary: ({ snapshot }) => ({ - configured: snapshot.configured ?? false, - running: snapshot.running ?? false, - lastStartAt: snapshot.lastStartAt ?? null, - lastStopAt: snapshot.lastStopAt ?? null, - lastError: snapshot.lastError ?? null, + ...buildBaseChannelStatusSummary(snapshot), port: snapshot.port ?? null, probe: snapshot.probe, lastProbeAt: snapshot.lastProbeAt ?? null, diff --git a/extensions/msteams/src/channel.ts b/extensions/msteams/src/channel.ts index d6fd75abf6c..2958e4c22d0 100644 --- a/extensions/msteams/src/channel.ts +++ b/extensions/msteams/src/channel.ts @@ -1,6 +1,8 @@ import type { ChannelMessageActionName, ChannelPlugin, OpenClawConfig } from "openclaw/plugin-sdk"; import { + buildBaseChannelStatusSummary, buildChannelConfigSchema, + createDefaultChannelRuntimeState, DEFAULT_ACCOUNT_ID, MSTeamsConfigSchema, PAIRING_APPROVED_MESSAGE, @@ -415,20 +417,9 @@ export const msteamsPlugin: ChannelPlugin = { }, outbound: msteamsOutbound, status: { - defaultRuntime: { - accountId: DEFAULT_ACCOUNT_ID, - running: false, - lastStartAt: null, - lastStopAt: null, - lastError: null, - port: null, - }, + defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID, { port: null }), buildChannelSummary: ({ snapshot }) => ({ - configured: snapshot.configured ?? false, - running: snapshot.running ?? false, - lastStartAt: snapshot.lastStartAt ?? null, - lastStopAt: snapshot.lastStopAt ?? null, - lastError: snapshot.lastError ?? null, + ...buildBaseChannelStatusSummary(snapshot), port: snapshot.port ?? null, probe: snapshot.probe, lastProbeAt: snapshot.lastProbeAt ?? null, diff --git a/extensions/nostr/src/channel.ts b/extensions/nostr/src/channel.ts index 8fa8d58b61f..8fe7ce4ac92 100644 --- a/extensions/nostr/src/channel.ts +++ b/extensions/nostr/src/channel.ts @@ -1,5 +1,7 @@ import { buildChannelConfigSchema, + collectStatusIssuesFromLastError, + createDefaultChannelRuntimeState, DEFAULT_ACCOUNT_ID, formatPairingApproveHint, type ChannelPlugin, @@ -157,28 +159,8 @@ export const nostrPlugin: ChannelPlugin = { }, status: { - defaultRuntime: { - accountId: DEFAULT_ACCOUNT_ID, - running: false, - lastStartAt: null, - lastStopAt: null, - lastError: null, - }, - collectStatusIssues: (accounts) => - accounts.flatMap((account) => { - const lastError = typeof account.lastError === "string" ? account.lastError.trim() : ""; - if (!lastError) { - return []; - } - return [ - { - channel: "nostr", - accountId: account.accountId, - kind: "runtime" as const, - message: `Channel error: ${lastError}`, - }, - ]; - }), + defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID), + collectStatusIssues: (accounts) => collectStatusIssuesFromLastError("nostr", accounts), buildChannelSummary: ({ snapshot }) => ({ configured: snapshot.configured ?? false, publicKey: snapshot.publicKey ?? null, diff --git a/extensions/signal/src/channel.ts b/extensions/signal/src/channel.ts index 1b270e89469..18c3bcc2393 100644 --- a/extensions/signal/src/channel.ts +++ b/extensions/signal/src/channel.ts @@ -1,6 +1,9 @@ import { applyAccountNameToChannelSection, + buildBaseChannelStatusSummary, buildChannelConfigSchema, + collectStatusIssuesFromLastError, + createDefaultChannelRuntimeState, DEFAULT_ACCOUNT_ID, deleteAccountFromConfigSection, formatPairingApproveHint, @@ -249,35 +252,11 @@ export const signalPlugin: ChannelPlugin = { }, }, status: { - defaultRuntime: { - accountId: DEFAULT_ACCOUNT_ID, - running: false, - lastStartAt: null, - lastStopAt: null, - lastError: null, - }, - collectStatusIssues: (accounts) => - accounts.flatMap((account) => { - const lastError = typeof account.lastError === "string" ? account.lastError.trim() : ""; - if (!lastError) { - return []; - } - return [ - { - channel: "signal", - accountId: account.accountId, - kind: "runtime", - message: `Channel error: ${lastError}`, - }, - ]; - }), + defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID), + collectStatusIssues: (accounts) => collectStatusIssuesFromLastError("signal", accounts), buildChannelSummary: ({ snapshot }) => ({ - configured: snapshot.configured ?? false, + ...buildBaseChannelStatusSummary(snapshot), baseUrl: snapshot.baseUrl ?? null, - running: snapshot.running ?? false, - lastStartAt: snapshot.lastStartAt ?? null, - lastStopAt: snapshot.lastStopAt ?? null, - lastError: snapshot.lastError ?? null, probe: snapshot.probe, lastProbeAt: snapshot.lastProbeAt ?? null, }),