refactor(plugin-sdk): remove channel-specific sdk shims

This commit is contained in:
Peter Steinberger
2026-03-30 00:59:53 +01:00
parent bff6a6a9c1
commit 471e059b69
27 changed files with 244 additions and 729 deletions

View File

@@ -1,32 +0,0 @@
// Generated by scripts/generate-plugin-sdk-facades.mjs. Do not edit manually.
import type { PluginSdkFacadeTypeMap } from "../generated/plugin-sdk-facade-type-map.generated.js";
type FacadeEntry = PluginSdkFacadeTypeMap["imessage-policy"];
type FacadeModule = FacadeEntry["module"];
import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-runtime.js";
function loadFacadeModule(): FacadeModule {
return loadBundledPluginPublicSurfaceModuleSync<FacadeModule>({
dirName: "imessage",
artifactBasename: "api.js",
});
}
export const normalizeIMessageHandle: FacadeModule["normalizeIMessageHandle"] = ((...args) =>
loadFacadeModule()["normalizeIMessageHandle"](
...args,
)) as FacadeModule["normalizeIMessageHandle"];
export const resolveIMessageRuntimeGroupPolicy: FacadeModule["resolveIMessageRuntimeGroupPolicy"] =
((...args) =>
loadFacadeModule()["resolveIMessageRuntimeGroupPolicy"](
...args,
)) as FacadeModule["resolveIMessageRuntimeGroupPolicy"];
export const resolveIMessageGroupRequireMention: FacadeModule["resolveIMessageGroupRequireMention"] =
((...args) =>
loadFacadeModule()["resolveIMessageGroupRequireMention"](
...args,
)) as FacadeModule["resolveIMessageGroupRequireMention"];
export const resolveIMessageGroupToolPolicy: FacadeModule["resolveIMessageGroupToolPolicy"] = ((
...args
) =>
loadFacadeModule()["resolveIMessageGroupToolPolicy"](
...args,
)) as FacadeModule["resolveIMessageGroupToolPolicy"];

View File

@@ -1,21 +0,0 @@
// Generated by scripts/generate-plugin-sdk-facades.mjs. Do not edit manually.
import type { PluginSdkFacadeTypeMap } from "../generated/plugin-sdk-facade-type-map.generated.js";
type FacadeEntry = PluginSdkFacadeTypeMap["imessage-runtime"];
type FacadeModule = FacadeEntry["module"];
import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-runtime.js";
function loadFacadeModule(): FacadeModule {
return loadBundledPluginPublicSurfaceModuleSync<FacadeModule>({
dirName: "imessage",
artifactBasename: "runtime-api.js",
});
}
export const monitorIMessageProvider: FacadeModule["monitorIMessageProvider"] = ((...args) =>
loadFacadeModule()["monitorIMessageProvider"](
...args,
)) as FacadeModule["monitorIMessageProvider"];
export const probeIMessage: FacadeModule["probeIMessage"] = ((...args) =>
loadFacadeModule()["probeIMessage"](...args)) as FacadeModule["probeIMessage"];
export const sendMessageIMessage: FacadeModule["sendMessageIMessage"] = ((...args) =>
loadFacadeModule()["sendMessageIMessage"](...args)) as FacadeModule["sendMessageIMessage"];
export type IMessageProbe = FacadeEntry["types"]["IMessageProbe"];

View File

@@ -1,114 +0,0 @@
import type { OpenClawConfig } from "../config/config.js";
import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-runtime.js";
export type { IMessageAccountConfig } from "../config/types.js";
export type { IMessageProbe } from "./imessage-runtime.js";
export type { OpenClawConfig } from "../config/config.js";
export type {
ChannelMessageActionContext,
ChannelPlugin,
OpenClawPluginApi,
PluginRuntime,
} from "./channel-plugin-common.js";
export {
DEFAULT_ACCOUNT_ID,
PAIRING_APPROVED_MESSAGE,
applyAccountNameToChannelSection,
buildChannelConfigSchema,
deleteAccountFromConfigSection,
emptyPluginConfigSchema,
formatPairingApproveHint,
getChatChannelMeta,
migrateBaseNameToDefaultAccount,
normalizeAccountId,
setAccountEnabledInConfigSection,
} from "./channel-plugin-common.js";
export { detectBinary } from "../plugins/setup-binary.js";
export { formatDocsLink } from "../terminal/links.js";
export {
formatTrimmedAllowFromEntries,
resolveIMessageConfigAllowFrom,
resolveIMessageConfigDefaultTo,
} from "./channel-config-helpers.js";
export {
looksLikeIMessageTargetId,
normalizeIMessageMessagingTarget,
} from "../channels/plugins/normalize/imessage.js";
export {
createAllowedChatSenderMatcher,
parseChatAllowTargetPrefixes,
parseChatTargetPrefixesOrThrow,
resolveServicePrefixedAllowTarget,
resolveServicePrefixedChatTarget,
resolveServicePrefixedOrChatAllowTarget,
resolveServicePrefixedTarget,
type ChatSenderAllowParams,
type ParsedChatTarget,
} from "./channel-targets.js";
export {
resolveAllowlistProviderRuntimeGroupPolicy,
resolveDefaultGroupPolicy,
} from "../config/runtime-group-policy.js";
export {
normalizeIMessageHandle,
resolveIMessageGroupRequireMention,
resolveIMessageGroupToolPolicy,
} from "./imessage-policy.js";
export { IMessageConfigSchema } from "../config/zod-schema.providers-core.js";
export { resolveChannelMediaMaxBytes } from "../channels/plugins/media-limits.js";
export { chunkTextForOutbound } from "./text-chunking.js";
export {
buildComputedAccountStatusSnapshot,
collectStatusIssuesFromLastError,
} from "./status-helpers.js";
export { monitorIMessageProvider, probeIMessage, sendMessageIMessage } from "./imessage-runtime.js";
export type IMessageConversationBindingManager = {
stop: () => void;
};
type IMessageFacadeModule = {
createIMessageConversationBindingManager: (params: {
accountId?: string;
cfg: OpenClawConfig;
}) => IMessageConversationBindingManager;
matchIMessageAcpConversation: (params: {
bindingConversationId: string;
conversationId: string;
}) => { conversationId: string; matchPriority: number } | null;
normalizeIMessageAcpConversationId: (conversationId: string) => { conversationId: string } | null;
resolveIMessageConversationIdFromTarget: (target: string) => string | undefined;
};
function loadIMessageFacadeModule(): IMessageFacadeModule {
return loadBundledPluginPublicSurfaceModuleSync<IMessageFacadeModule>({
dirName: "imessage",
artifactBasename: "api.js",
});
}
export function createIMessageConversationBindingManager(params: {
accountId?: string;
cfg: OpenClawConfig;
}): IMessageConversationBindingManager {
return loadIMessageFacadeModule().createIMessageConversationBindingManager(params);
}
export function normalizeIMessageAcpConversationId(
conversationId: string,
): { conversationId: string } | null {
return loadIMessageFacadeModule().normalizeIMessageAcpConversationId(conversationId);
}
export function matchIMessageAcpConversation(params: {
bindingConversationId: string;
conversationId: string;
}): { conversationId: string; matchPriority: number } | null {
return loadIMessageFacadeModule().matchIMessageAcpConversation(params);
}
export function resolveIMessageConversationIdFromTarget(target: string): string | undefined {
return loadIMessageFacadeModule().resolveIMessageConversationIdFromTarget(target);
}

View File

@@ -29,13 +29,21 @@ const RUNTIME_API_EXPORT_GUARDS: Record<string, readonly string[]> = {
'export * from "./src/send.js";',
],
[bundledPluginFile("imessage", "runtime-api.ts")]: [
'export { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, buildComputedAccountStatusSnapshot, buildChannelConfigSchema, chunkTextForOutbound, collectStatusIssuesFromLastError, formatTrimmedAllowFromEntries, getChatChannelMeta, looksLikeIMessageTargetId, normalizeIMessageMessagingTarget, resolveChannelMediaMaxBytes, resolveIMessageConfigAllowFrom, resolveIMessageConfigDefaultTo, IMessageConfigSchema, type ChannelPlugin, type IMessageAccountConfig } from "openclaw/plugin-sdk/imessage";',
'export { DEFAULT_ACCOUNT_ID, buildChannelConfigSchema, getChatChannelMeta, type ChannelPlugin, type OpenClawConfig } from "openclaw/plugin-sdk/core";',
'export { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";',
'export { buildComputedAccountStatusSnapshot, collectStatusIssuesFromLastError } from "openclaw/plugin-sdk/status-helpers";',
'export { formatTrimmedAllowFromEntries, resolveIMessageConfigAllowFrom, resolveIMessageConfigDefaultTo } from "openclaw/plugin-sdk/channel-config-helpers";',
'export { looksLikeIMessageTargetId, normalizeIMessageMessagingTarget } from "./src/normalize.js";',
'export { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/media-runtime";',
'export { IMessageConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";',
'export { resolveIMessageGroupRequireMention, resolveIMessageGroupToolPolicy } from "./src/group-policy.js";',
'export { monitorIMessageProvider } from "./src/monitor.js";',
'export type { MonitorIMessageOpts } from "./src/monitor.js";',
'export { probeIMessage } from "./src/probe.js";',
'export type { IMessageProbe } from "./src/probe.js";',
'export { sendMessageIMessage } from "./src/send.js";',
'export type IMessageAccountConfig = Omit< NonNullable<NonNullable<RuntimeApiOpenClawConfig["channels"]>["imessage"]>, "accounts" | "defaultAccount" >;',
'export function chunkTextForOutbound(text: string, limit: number): string[] { const chunks: string[] = []; let remaining = text; while (remaining.length > limit) { const window = remaining.slice(0, limit); const splitAt = Math.max(window.lastIndexOf("\\n"), window.lastIndexOf(" ")); const breakAt = splitAt > 0 ? splitAt : limit; chunks.push(remaining.slice(0, breakAt).trimEnd()); remaining = remaining.slice(breakAt).trimStart(); } if (remaining.length > 0 || text.length === 0) { chunks.push(remaining); } return chunks; }',
],
[bundledPluginFile("googlechat", "runtime-api.ts")]: [
'export * from "openclaw/plugin-sdk/googlechat";',

View File

@@ -196,19 +196,6 @@ describe("plugin-sdk subpath exports", () => {
"buildTokenChannelStatusSummary",
"resolveConfiguredFromCredentialStatuses",
]);
expectSourceContains("telegram", 'export * from "./telegram-core.js";');
expectSourceContains("telegram", 'export * from "./telegram-runtime.js";');
expectSourceMentions("imessage", [
"normalizeIMessageAcpConversationId",
"matchIMessageAcpConversation",
"normalizeIMessageHandle",
"parseChatAllowTargetPrefixes",
"parseChatTargetPrefixesOrThrow",
"resolveIMessageConversationIdFromTarget",
"resolveServicePrefixedAllowTarget",
"resolveServicePrefixedTarget",
"chunkTextForOutbound",
]);
expectSourceMentions("bluebubbles", [
"normalizeBlueBubblesAcpConversationId",
"matchBlueBubblesAcpConversation",
@@ -459,14 +446,12 @@ describe("plugin-sdk subpath exports", () => {
expectSourceContract("reply-runtime", {
omits: [
"buildMentionRegexes",
"createInboundDebouncer",
"formatInboundEnvelope",
"formatInboundFromLabel",
"matchesMentionPatterns",
"matchesMentionWithExplicit",
"normalizeMentionText",
"resolveEnvelopeFormatOptions",
"resolveInboundDebounceMs",
"hasControlCommand",
"buildCommandTextFromArgs",
"buildCommandsPaginationKeyboard",

View File

@@ -1,109 +0,0 @@
// Generated by scripts/generate-plugin-sdk-facades.mjs. Do not edit manually.
import type { PluginSdkFacadeTypeMap } from "../generated/plugin-sdk-facade-type-map.generated.js";
type FacadeEntry = PluginSdkFacadeTypeMap["telegram-runtime-surface"];
type FacadeModule = FacadeEntry["module"];
import {
createLazyFacadeObjectValue,
loadBundledPluginPublicSurfaceModuleSync,
} from "./facade-runtime.js";
function loadFacadeModule(): FacadeModule {
return loadBundledPluginPublicSurfaceModuleSync<FacadeModule>({
dirName: "telegram",
artifactBasename: "runtime-api.js",
});
}
export const auditTelegramGroupMembership: FacadeModule["auditTelegramGroupMembership"] = ((
...args
) =>
loadFacadeModule()["auditTelegramGroupMembership"](
...args,
)) as FacadeModule["auditTelegramGroupMembership"];
export const buildTelegramExecApprovalPendingPayload: FacadeModule["buildTelegramExecApprovalPendingPayload"] =
((...args) =>
loadFacadeModule()["buildTelegramExecApprovalPendingPayload"](
...args,
)) as FacadeModule["buildTelegramExecApprovalPendingPayload"];
export const collectTelegramUnmentionedGroupIds: FacadeModule["collectTelegramUnmentionedGroupIds"] =
((...args) =>
loadFacadeModule()["collectTelegramUnmentionedGroupIds"](
...args,
)) as FacadeModule["collectTelegramUnmentionedGroupIds"];
export const createTelegramThreadBindingManager: FacadeModule["createTelegramThreadBindingManager"] =
((...args) =>
loadFacadeModule()["createTelegramThreadBindingManager"](
...args,
)) as FacadeModule["createTelegramThreadBindingManager"];
export const createForumTopicTelegram: FacadeModule["createForumTopicTelegram"] = ((...args) =>
loadFacadeModule()["createForumTopicTelegram"](
...args,
)) as FacadeModule["createForumTopicTelegram"];
export const deleteMessageTelegram: FacadeModule["deleteMessageTelegram"] = ((...args) =>
loadFacadeModule()["deleteMessageTelegram"](...args)) as FacadeModule["deleteMessageTelegram"];
export const editForumTopicTelegram: FacadeModule["editForumTopicTelegram"] = ((...args) =>
loadFacadeModule()["editForumTopicTelegram"](...args)) as FacadeModule["editForumTopicTelegram"];
export const editMessageReplyMarkupTelegram: FacadeModule["editMessageReplyMarkupTelegram"] = ((
...args
) =>
loadFacadeModule()["editMessageReplyMarkupTelegram"](
...args,
)) as FacadeModule["editMessageReplyMarkupTelegram"];
export const editMessageTelegram: FacadeModule["editMessageTelegram"] = ((...args) =>
loadFacadeModule()["editMessageTelegram"](...args)) as FacadeModule["editMessageTelegram"];
export const monitorTelegramProvider: FacadeModule["monitorTelegramProvider"] = ((...args) =>
loadFacadeModule()["monitorTelegramProvider"](
...args,
)) as FacadeModule["monitorTelegramProvider"];
export const pinMessageTelegram: FacadeModule["pinMessageTelegram"] = ((...args) =>
loadFacadeModule()["pinMessageTelegram"](...args)) as FacadeModule["pinMessageTelegram"];
export const probeTelegram: FacadeModule["probeTelegram"] = ((...args) =>
loadFacadeModule()["probeTelegram"](...args)) as FacadeModule["probeTelegram"];
export const reactMessageTelegram: FacadeModule["reactMessageTelegram"] = ((...args) =>
loadFacadeModule()["reactMessageTelegram"](...args)) as FacadeModule["reactMessageTelegram"];
export const renameForumTopicTelegram: FacadeModule["renameForumTopicTelegram"] = ((...args) =>
loadFacadeModule()["renameForumTopicTelegram"](
...args,
)) as FacadeModule["renameForumTopicTelegram"];
export const resetTelegramThreadBindingsForTests: FacadeModule["resetTelegramThreadBindingsForTests"] =
((...args) =>
loadFacadeModule()["resetTelegramThreadBindingsForTests"](
...args,
)) as FacadeModule["resetTelegramThreadBindingsForTests"];
export const resolveTelegramRuntimeGroupPolicy: FacadeModule["resolveTelegramRuntimeGroupPolicy"] =
((...args) =>
loadFacadeModule()["resolveTelegramRuntimeGroupPolicy"](
...args,
)) as FacadeModule["resolveTelegramRuntimeGroupPolicy"];
export const resolveTelegramToken: FacadeModule["resolveTelegramToken"] = ((...args) =>
loadFacadeModule()["resolveTelegramToken"](...args)) as FacadeModule["resolveTelegramToken"];
export const sendMessageTelegram: FacadeModule["sendMessageTelegram"] = ((...args) =>
loadFacadeModule()["sendMessageTelegram"](...args)) as FacadeModule["sendMessageTelegram"];
export const sendPollTelegram: FacadeModule["sendPollTelegram"] = ((...args) =>
loadFacadeModule()["sendPollTelegram"](...args)) as FacadeModule["sendPollTelegram"];
export const sendStickerTelegram: FacadeModule["sendStickerTelegram"] = ((...args) =>
loadFacadeModule()["sendStickerTelegram"](...args)) as FacadeModule["sendStickerTelegram"];
export const sendTypingTelegram: FacadeModule["sendTypingTelegram"] = ((...args) =>
loadFacadeModule()["sendTypingTelegram"](...args)) as FacadeModule["sendTypingTelegram"];
export const setTelegramThreadBindingIdleTimeoutBySessionKey: FacadeModule["setTelegramThreadBindingIdleTimeoutBySessionKey"] =
((...args) =>
loadFacadeModule()["setTelegramThreadBindingIdleTimeoutBySessionKey"](
...args,
)) as FacadeModule["setTelegramThreadBindingIdleTimeoutBySessionKey"];
export const setTelegramThreadBindingMaxAgeBySessionKey: FacadeModule["setTelegramThreadBindingMaxAgeBySessionKey"] =
((...args) =>
loadFacadeModule()["setTelegramThreadBindingMaxAgeBySessionKey"](
...args,
)) as FacadeModule["setTelegramThreadBindingMaxAgeBySessionKey"];
export const shouldSuppressTelegramExecApprovalForwardingFallback: FacadeModule["shouldSuppressTelegramExecApprovalForwardingFallback"] =
((...args) =>
loadFacadeModule()["shouldSuppressTelegramExecApprovalForwardingFallback"](
...args,
)) as FacadeModule["shouldSuppressTelegramExecApprovalForwardingFallback"];
export const telegramMessageActions: FacadeModule["telegramMessageActions"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["telegramMessageActions"] as object,
) as FacadeModule["telegramMessageActions"];
export const unpinMessageTelegram: FacadeModule["unpinMessageTelegram"] = ((...args) =>
loadFacadeModule()["unpinMessageTelegram"](...args)) as FacadeModule["unpinMessageTelegram"];
export type TelegramApiOverride = FacadeEntry["types"]["TelegramApiOverride"];
export type TelegramProbe = FacadeEntry["types"]["TelegramProbe"];

View File

@@ -1,68 +0,0 @@
export type { InspectedTelegramAccount, ResolvedTelegramAccount } from "./telegram-surface.js";
export type { TelegramButtonStyle, TelegramInlineButtons } from "./telegram-surface.js";
export type { StickerMetadata } from "./telegram-surface.js";
export type { TelegramProbe } from "./telegram-runtime-surface.js";
export type { TelegramApiOverride } from "./telegram-runtime-surface.js";
export {
buildBrowseProvidersButton,
buildModelsKeyboard,
buildProviderKeyboard,
calculateTotalPages,
createTelegramActionGate,
fetchTelegramChatId,
getCacheStats,
getModelsPageSize,
inspectTelegramAccount,
isTelegramExecApprovalApprover,
isTelegramExecApprovalAuthorizedSender,
isTelegramExecApprovalClientEnabled,
isTelegramExecApprovalTargetRecipient,
listTelegramAccountIds,
listTelegramDirectoryGroupsFromConfig,
listTelegramDirectoryPeersFromConfig,
looksLikeTelegramTargetId,
lookupTelegramChatId,
normalizeTelegramMessagingTarget,
parseTelegramReplyToMessageId,
parseTelegramThreadId,
resolveTelegramAutoThreadId,
resolveTelegramGroupRequireMention,
resolveTelegramGroupToolPolicy,
resolveTelegramInlineButtonsScope,
resolveTelegramPollActionGateState,
resolveTelegramReactionLevel,
resolveTelegramTargetChatType,
searchStickers,
sendTelegramPayloadMessages,
type ProviderInfo,
} from "./telegram-surface.js";
export { isNumericTelegramUserId, normalizeTelegramAllowFromEntry } from "./telegram-allow-from.js";
export {
auditTelegramGroupMembership,
buildTelegramExecApprovalPendingPayload,
collectTelegramUnmentionedGroupIds,
createTelegramThreadBindingManager,
createForumTopicTelegram,
deleteMessageTelegram,
editForumTopicTelegram,
editMessageReplyMarkupTelegram,
editMessageTelegram,
monitorTelegramProvider,
pinMessageTelegram,
probeTelegram,
reactMessageTelegram,
renameForumTopicTelegram,
resolveTelegramToken,
sendMessageTelegram,
sendPollTelegram,
sendStickerTelegram,
sendTypingTelegram,
setTelegramThreadBindingIdleTimeoutBySessionKey,
setTelegramThreadBindingMaxAgeBySessionKey,
shouldSuppressTelegramExecApprovalForwardingFallback,
telegramMessageActions,
unpinMessageTelegram,
} from "./telegram-runtime-surface.js";
export { buildTelegramGroupPeerId } from "./telegram-surface.js";
export { parseTelegramTarget } from "./telegram-surface.js";

View File

@@ -1,2 +0,0 @@
export * from "./telegram-core.js";
export * from "./telegram-runtime.js";