From 3a2c24e598ee15ce3a28f17684c3792c302ef3d9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 16 Mar 2026 00:48:47 -0700 Subject: [PATCH] refactor: route shared channel sdk imports through plugin seams --- src/auto-reply/reply/commands-approve.ts | 6 +- src/auto-reply/reply/commands-models.ts | 14 +- .../reply/directive-handling.model.ts | 2 +- src/channels/plugins/actions/signal.ts | 12 +- src/channels/plugins/group-mentions.ts | 2 +- src/channels/plugins/normalize/imessage.ts | 2 +- src/channels/plugins/normalize/slack.ts | 2 +- src/channels/plugins/slack.actions.ts | 12 +- src/commands/doctor-config-flow.ts | 18 +-- src/infra/outbound/message-action-params.ts | 2 +- src/infra/state-migrations.ts | 2 +- src/media/outbound-attachment.ts | 2 +- src/plugin-sdk/discord.ts | 5 + src/plugin-sdk/imessage-targets.ts | 1 + src/plugin-sdk/imessage.ts | 13 ++ src/plugin-sdk/index.ts | 144 ++++++++---------- src/plugin-sdk/line.ts | 6 + src/plugin-sdk/msteams.ts | 2 +- src/plugin-sdk/outbound-media.ts | 2 +- src/plugin-sdk/signal.ts | 6 + src/plugin-sdk/slack-targets.ts | 6 + src/plugin-sdk/slack.ts | 2 + src/plugin-sdk/telegram.ts | 17 +++ src/plugin-sdk/web-media.ts | 1 + src/security/audit-channel.runtime.ts | 2 +- 25 files changed, 163 insertions(+), 120 deletions(-) create mode 100644 src/plugin-sdk/imessage-targets.ts create mode 100644 src/plugin-sdk/slack-targets.ts create mode 100644 src/plugin-sdk/web-media.ts diff --git a/src/auto-reply/reply/commands-approve.ts b/src/auto-reply/reply/commands-approve.ts index ad1fde9eb0b..630ea988c05 100644 --- a/src/auto-reply/reply/commands-approve.ts +++ b/src/auto-reply/reply/commands-approve.ts @@ -1,9 +1,9 @@ +import { callGateway } from "../../gateway/call.js"; +import { logVerbose } from "../../globals.js"; import { isTelegramExecApprovalApprover, isTelegramExecApprovalClientEnabled, -} from "../../../extensions/telegram/src/exec-approvals.js"; -import { callGateway } from "../../gateway/call.js"; -import { logVerbose } from "../../globals.js"; +} from "../../plugin-sdk/telegram.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../../utils/message-channel.js"; import { requireGatewayClientScopeForInternalChannel } from "./command-gates.js"; import type { CommandHandler } from "./commands-types.js"; diff --git a/src/auto-reply/reply/commands-models.ts b/src/auto-reply/reply/commands-models.ts index afe56688256..25f309361d2 100644 --- a/src/auto-reply/reply/commands-models.ts +++ b/src/auto-reply/reply/commands-models.ts @@ -1,10 +1,3 @@ -import { - buildModelsKeyboard, - buildProviderKeyboard, - calculateTotalPages, - getModelsPageSize, - type ProviderInfo, -} from "../../../extensions/telegram/src/model-buttons.js"; import { resolveAgentDir, resolveSessionAgentId } from "../../agents/agent-scope.js"; import { resolveModelAuthLabel } from "../../agents/model-auth-label.js"; import { loadModelCatalog } from "../../agents/model-catalog.js"; @@ -17,6 +10,13 @@ import { } from "../../agents/model-selection.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; +import { + buildModelsKeyboard, + buildProviderKeyboard, + calculateTotalPages, + getModelsPageSize, + type ProviderInfo, +} from "../../plugin-sdk/telegram.js"; import type { ReplyPayload } from "../types.js"; import { rejectUnauthorizedCommand } from "./command-gates.js"; import type { CommandHandler } from "./commands-types.js"; diff --git a/src/auto-reply/reply/directive-handling.model.ts b/src/auto-reply/reply/directive-handling.model.ts index bb66d8b8d7f..521d3bd6fea 100644 --- a/src/auto-reply/reply/directive-handling.model.ts +++ b/src/auto-reply/reply/directive-handling.model.ts @@ -1,4 +1,3 @@ -import { buildBrowseProvidersButton } from "../../../extensions/telegram/src/model-buttons.js"; import { resolveAuthStorePathForDisplay } from "../../agents/auth-profiles.js"; import { type ModelAliasIndex, @@ -9,6 +8,7 @@ import { } from "../../agents/model-selection.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; +import { buildBrowseProvidersButton } from "../../plugin-sdk/telegram.js"; import { shortenHomePath } from "../../utils.js"; import { resolveSelectedAndActiveModel } from "../model-runtime.js"; import type { ReplyPayload } from "../types.js"; diff --git a/src/channels/plugins/actions/signal.ts b/src/channels/plugins/actions/signal.ts index b75a20ae2ec..60a70bac4c0 100644 --- a/src/channels/plugins/actions/signal.ts +++ b/src/channels/plugins/actions/signal.ts @@ -1,13 +1,11 @@ +import { createActionGate, jsonResult, readStringParam } from "../../../agents/tools/common.js"; import { listEnabledSignalAccounts, - resolveSignalAccount, -} from "../../../../extensions/signal/src/accounts.js"; -import { resolveSignalReactionLevel } from "../../../../extensions/signal/src/reaction-level.js"; -import { - sendReactionSignal, removeReactionSignal, -} from "../../../../extensions/signal/src/send-reactions.js"; -import { createActionGate, jsonResult, readStringParam } from "../../../agents/tools/common.js"; + resolveSignalAccount, + resolveSignalReactionLevel, + sendReactionSignal, +} from "../../../plugin-sdk/signal.js"; import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; import { resolveReactionMessageId } from "./reaction-message-id.js"; diff --git a/src/channels/plugins/group-mentions.ts b/src/channels/plugins/group-mentions.ts index 4dac8bbc7f2..f825fc73fe5 100644 --- a/src/channels/plugins/group-mentions.ts +++ b/src/channels/plugins/group-mentions.ts @@ -1,4 +1,3 @@ -import { inspectSlackAccount } from "../../../extensions/slack/src/account-inspect.js"; import type { OpenClawConfig } from "../../config/config.js"; import { resolveChannelGroupRequireMention, @@ -11,6 +10,7 @@ import type { GroupToolPolicyConfig, } from "../../config/types.tools.js"; import { resolveExactLineGroupConfigKey } from "../../line/group-keys.js"; +import { inspectSlackAccount } from "../../plugin-sdk/slack.js"; import { normalizeAtHashSlug, normalizeHyphenSlug } from "../../shared/string-normalization.js"; import type { ChannelGroupContext } from "./types.js"; diff --git a/src/channels/plugins/normalize/imessage.ts b/src/channels/plugins/normalize/imessage.ts index 3b9ecbe1837..a6043632121 100644 --- a/src/channels/plugins/normalize/imessage.ts +++ b/src/channels/plugins/normalize/imessage.ts @@ -1,4 +1,4 @@ -import { normalizeIMessageHandle } from "../../../../extensions/imessage/src/targets.js"; +import { normalizeIMessageHandle } from "../../../plugin-sdk/imessage-targets.js"; import { looksLikeHandleOrPhoneTarget, trimMessagingTarget } from "./shared.js"; // Service prefixes that indicate explicit delivery method; must be preserved during normalization diff --git a/src/channels/plugins/normalize/slack.ts b/src/channels/plugins/normalize/slack.ts index 52d4c905342..50e31a0feee 100644 --- a/src/channels/plugins/normalize/slack.ts +++ b/src/channels/plugins/normalize/slack.ts @@ -1,4 +1,4 @@ -import { parseSlackTarget } from "../../../../extensions/slack/src/targets.js"; +import { parseSlackTarget } from "../../../plugin-sdk/slack-targets.js"; export function normalizeSlackMessagingTarget(raw: string): string | undefined { const target = parseSlackTarget(raw, { defaultKind: "channel" }); diff --git a/src/channels/plugins/slack.actions.ts b/src/channels/plugins/slack.actions.ts index 66bc6679680..8c7f02ee9ec 100644 --- a/src/channels/plugins/slack.actions.ts +++ b/src/channels/plugins/slack.actions.ts @@ -1,11 +1,11 @@ -import { isSlackInteractiveRepliesEnabled } from "../../../extensions/slack/src/interactive-replies.js"; -import { - extractSlackToolSend, - listSlackMessageActions, -} from "../../../extensions/slack/src/message-actions.js"; -import { resolveSlackChannelId } from "../../../extensions/slack/src/targets.js"; import { handleSlackAction, type SlackActionContext } from "../../agents/tools/slack-actions.js"; import { handleSlackMessageAction } from "../../plugin-sdk/slack-message-actions.js"; +import { + extractSlackToolSend, + isSlackInteractiveRepliesEnabled, + listSlackMessageActions, + resolveSlackChannelId, +} from "../../plugin-sdk/slack.js"; import type { ChannelMessageActionAdapter } from "./types.js"; export function createSlackActions(providerId: string): ChannelMessageActionAdapter { diff --git a/src/commands/doctor-config-flow.ts b/src/commands/doctor-config-flow.ts index e6c6a15609c..a1cbf5fa6d9 100644 --- a/src/commands/doctor-config-flow.ts +++ b/src/commands/doctor-config-flow.ts @@ -1,15 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import { inspectTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; -import { - listTelegramAccountIds, - resolveTelegramAccount, -} from "../../extensions/telegram/src/accounts.js"; -import { - isNumericTelegramUserId, - normalizeTelegramAllowFromEntry, -} from "../../extensions/telegram/src/allow-from.js"; -import { fetchTelegramChatId } from "../../extensions/telegram/src/api-fetch.js"; import { normalizeChatChannelId } from "../channels/registry.js"; import { formatCliCommand } from "../cli/command-format.js"; import { resolveCommandSecretRefsViaGateway } from "../cli/command-secret-gateway.js"; @@ -32,6 +22,14 @@ import { normalizeTrustedSafeBinDirs, } from "../infra/exec-safe-bin-trust.js"; import { readChannelAllowFromStore } from "../pairing/pairing-store.js"; +import { + fetchTelegramChatId, + inspectTelegramAccount, + isNumericTelegramUserId, + listTelegramAccountIds, + normalizeTelegramAllowFromEntry, + resolveTelegramAccount, +} from "../plugin-sdk/telegram.js"; import { formatChannelAccountsDefaultPath, formatSetExplicitDefaultInstruction, diff --git a/src/infra/outbound/message-action-params.ts b/src/infra/outbound/message-action-params.ts index 30991639129..6f95e0a5a4d 100644 --- a/src/infra/outbound/message-action-params.ts +++ b/src/infra/outbound/message-action-params.ts @@ -1,6 +1,5 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; -import { loadWebMedia } from "../../../extensions/whatsapp/src/media.js"; import { assertMediaNotDataUrl, resolveSandboxedMediaSource } from "../../agents/sandbox-paths.js"; import { readStringParam } from "../../agents/tools/common.js"; import type { ChannelId, ChannelMessageActionName } from "../../channels/plugins/types.js"; @@ -8,6 +7,7 @@ import type { OpenClawConfig } from "../../config/config.js"; import { createRootScopedReadFile } from "../../infra/fs-safe.js"; import { extensionForMime } from "../../media/mime.js"; import { readBooleanParam as readBooleanParamShared } from "../../plugin-sdk/boolean-param.js"; +import { loadWebMedia } from "../../plugin-sdk/web-media.js"; export const readBooleanParam = readBooleanParamShared; diff --git a/src/infra/state-migrations.ts b/src/infra/state-migrations.ts index 96f3071bd57..b429365a4a4 100644 --- a/src/infra/state-migrations.ts +++ b/src/infra/state-migrations.ts @@ -1,7 +1,6 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import { listTelegramAccountIds } from "../../extensions/telegram/src/accounts.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import type { OpenClawConfig } from "../config/config.js"; import { @@ -16,6 +15,7 @@ import { canonicalizeMainSessionAlias } from "../config/sessions/main-session.js import type { SessionScope } from "../config/sessions/types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveChannelAllowFromPath } from "../pairing/pairing-store.js"; +import { listTelegramAccountIds } from "../plugin-sdk/telegram.js"; import { buildAgentMainSessionKey, DEFAULT_ACCOUNT_ID, diff --git a/src/media/outbound-attachment.ts b/src/media/outbound-attachment.ts index 374f0696b96..7e2a180c2e1 100644 --- a/src/media/outbound-attachment.ts +++ b/src/media/outbound-attachment.ts @@ -1,4 +1,4 @@ -import { loadWebMedia } from "../../extensions/whatsapp/src/media.js"; +import { loadWebMedia } from "../plugin-sdk/web-media.js"; import { buildOutboundMediaLoadOptions } from "./load-options.js"; import { saveMediaBuffer } from "./store.js"; diff --git a/src/plugin-sdk/discord.ts b/src/plugin-sdk/discord.ts index 27f6c17bdff..c2060fa4b3e 100644 --- a/src/plugin-sdk/discord.ts +++ b/src/plugin-sdk/discord.ts @@ -44,6 +44,11 @@ export { listThreadBindingsBySessionKey, unbindThreadBindingsBySessionKey, } from "../../extensions/discord/src/monitor/thread-bindings.js"; +export type { + ThreadBindingManager, + ThreadBindingRecord, + ThreadBindingTargetKind, +} from "../../extensions/discord/src/monitor/thread-bindings.js"; export { buildComputedAccountStatusSnapshot, diff --git a/src/plugin-sdk/imessage-targets.ts b/src/plugin-sdk/imessage-targets.ts new file mode 100644 index 00000000000..b3353edc3df --- /dev/null +++ b/src/plugin-sdk/imessage-targets.ts @@ -0,0 +1 @@ +export { normalizeIMessageHandle } from "../../extensions/imessage/src/targets.js"; diff --git a/src/plugin-sdk/imessage.ts b/src/plugin-sdk/imessage.ts index 1d767798873..a3a42f110ee 100644 --- a/src/plugin-sdk/imessage.ts +++ b/src/plugin-sdk/imessage.ts @@ -15,6 +15,19 @@ export { looksLikeIMessageTargetId, normalizeIMessageMessagingTarget, } from "../channels/plugins/normalize/imessage.js"; +export { + createAllowedChatSenderMatcher, + parseChatAllowTargetPrefixes, + parseChatTargetPrefixesOrThrow, + resolveServicePrefixedChatTarget, + resolveServicePrefixedAllowTarget, + resolveServicePrefixedOrChatAllowTarget, + resolveServicePrefixedTarget, +} from "../../extensions/imessage/src/target-parsing-helpers.js"; +export type { + ChatSenderAllowParams, + ParsedChatTarget, +} from "../../extensions/imessage/src/target-parsing-helpers.js"; export { resolveAllowlistProviderRuntimeGroupPolicy, diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index 1b37138e101..4afc94eebab 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -61,16 +61,6 @@ export type { BaseTokenResolution, } from "../channels/plugins/types.js"; export type { ChannelConfigSchema, ChannelPlugin } from "../channels/plugins/types.plugin.js"; -export type { - ThreadBindingManager, - ThreadBindingRecord, - ThreadBindingTargetKind, -} from "../../extensions/discord/src/monitor/thread-bindings.js"; -export { - autoBindSpawnedDiscordSubagent, - listThreadBindingsBySessionKey, - unbindThreadBindingsBySessionKey, -} from "../../extensions/discord/src/monitor/thread-bindings.js"; export type { AcpRuntimeCapabilities, AcpRuntimeControl, @@ -673,108 +663,107 @@ export type { SkillCommandSpec } from "../agents/skills.js"; // Channel: Discord export { + autoBindSpawnedDiscordSubagent, + collectDiscordAuditChannelIds, + collectDiscordStatusIssues, + discordSetupAdapter, + discordSetupWizard, + inspectDiscordAccount, listDiscordAccountIds, - resolveDefaultDiscordAccountId, - resolveDiscordAccount, - type ResolvedDiscordAccount, -} from "../../extensions/discord/src/accounts.js"; -export { inspectDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; -export type { InspectedDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; -export { collectDiscordAuditChannelIds } from "../../extensions/discord/src/audit.js"; -export { discordSetupWizard } from "../../extensions/discord/src/setup-surface.js"; -export { discordSetupAdapter } from "../../extensions/discord/src/setup-core.js"; -export { looksLikeDiscordTargetId, normalizeDiscordMessagingTarget, normalizeDiscordOutboundTarget, -} from "../channels/plugins/normalize/discord.js"; -export { collectDiscordStatusIssues } from "../channels/plugins/status-issues/discord.js"; + resolveDefaultDiscordAccountId, + resolveDiscordAccount, + type InspectedDiscordAccount, + type ResolvedDiscordAccount, + type ThreadBindingManager, + type ThreadBindingRecord, + type ThreadBindingTargetKind, + listThreadBindingsBySessionKey, + unbindThreadBindingsBySessionKey, +} from "./discord.js"; // Channel: iMessage export { + createAllowedChatSenderMatcher, + imessageSetupAdapter, + imessageSetupWizard, listIMessageAccountIds, - resolveDefaultIMessageAccountId, - resolveIMessageAccount, - type ResolvedIMessageAccount, -} from "../../extensions/imessage/src/accounts.js"; -export { imessageSetupWizard } from "../../extensions/imessage/src/setup-surface.js"; -export { imessageSetupAdapter } from "../../extensions/imessage/src/setup-core.js"; -export { looksLikeIMessageTargetId, normalizeIMessageMessagingTarget, -} from "../channels/plugins/normalize/imessage.js"; -export { - createAllowedChatSenderMatcher, parseChatAllowTargetPrefixes, parseChatTargetPrefixesOrThrow, resolveServicePrefixedChatTarget, resolveServicePrefixedAllowTarget, resolveServicePrefixedOrChatAllowTarget, resolveServicePrefixedTarget, -} from "../../extensions/imessage/src/target-parsing-helpers.js"; -export type { - ChatSenderAllowParams, - ParsedChatTarget, -} from "../../extensions/imessage/src/target-parsing-helpers.js"; + resolveDefaultIMessageAccountId, + resolveIMessageAccount, + type ChatSenderAllowParams, + type ParsedChatTarget, + type ResolvedIMessageAccount, +} from "./imessage.js"; // Channel: Slack export { + buildSlackThreadingToolContext, + extractSlackToolSend, + inspectSlackAccount, listEnabledSlackAccounts, listSlackAccountIds, + listSlackMessageActions, + looksLikeSlackTargetId, + normalizeSlackMessagingTarget, resolveDefaultSlackAccountId, resolveSlackAccount, resolveSlackReplyToMode, + slackSetupAdapter, + slackSetupWizard, + type InspectedSlackAccount, type ResolvedSlackAccount, -} from "../../extensions/slack/src/accounts.js"; -export { inspectSlackAccount } from "../../extensions/slack/src/account-inspect.js"; -export type { InspectedSlackAccount } from "../../extensions/slack/src/account-inspect.js"; -export { - extractSlackToolSend, - listSlackMessageActions, -} from "../../extensions/slack/src/message-actions.js"; -export { slackSetupAdapter } from "../../extensions/slack/src/setup-core.js"; -export { slackSetupWizard } from "../../extensions/slack/src/setup-surface.js"; -export { - looksLikeSlackTargetId, - normalizeSlackMessagingTarget, -} from "../channels/plugins/normalize/slack.js"; -export { buildSlackThreadingToolContext } from "../../extensions/slack/src/threading-tool-context.js"; +} from "./slack.js"; // Channel: Telegram export { + buildBrowseProvidersButton, + buildModelsKeyboard, + buildProviderKeyboard, + calculateTotalPages, + fetchTelegramChatId, + getModelsPageSize, + inspectTelegramAccount, + isNumericTelegramUserId, + isTelegramExecApprovalApprover, + isTelegramExecApprovalClientEnabled, listTelegramAccountIds, - resolveDefaultTelegramAccountId, - resolveTelegramAccount, - type ResolvedTelegramAccount, -} from "../../extensions/telegram/src/accounts.js"; -export { inspectTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; -export type { InspectedTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; -export { telegramSetupWizard } from "../../extensions/telegram/src/setup-surface.js"; -export { telegramSetupAdapter } from "../../extensions/telegram/src/setup-core.js"; -export { looksLikeTelegramTargetId, + normalizeTelegramAllowFromEntry, normalizeTelegramMessagingTarget, -} from "../channels/plugins/normalize/telegram.js"; -export { collectTelegramStatusIssues } from "../channels/plugins/status-issues/telegram.js"; -export { parseTelegramReplyToMessageId, parseTelegramThreadId, -} from "../../extensions/telegram/src/outbound-params.js"; -export { type TelegramProbe } from "../../extensions/telegram/src/probe.js"; + resolveDefaultTelegramAccountId, + resolveTelegramAccount, + telegramSetupAdapter, + telegramSetupWizard, + type ResolvedTelegramAccount, + type InspectedTelegramAccount, + type ProviderInfo, + type TelegramProbe, + collectTelegramStatusIssues, +} from "./telegram.js"; // Channel: Signal export { listSignalAccountIds, - resolveDefaultSignalAccountId, - resolveSignalAccount, - type ResolvedSignalAccount, -} from "../../extensions/signal/src/accounts.js"; -export { signalSetupWizard } from "../../extensions/signal/src/setup-surface.js"; -export { signalSetupAdapter } from "../../extensions/signal/src/setup-core.js"; -export { looksLikeSignalTargetId, normalizeSignalMessagingTarget, -} from "../channels/plugins/normalize/signal.js"; + resolveDefaultSignalAccountId, + resolveSignalAccount, + signalSetupAdapter, + signalSetupWizard, + type ResolvedSignalAccount, +} from "./signal.js"; // Channel: WhatsApp — WhatsApp-specific exports moved to extensions/whatsapp/src/ export { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "../whatsapp/normalize.js"; @@ -786,12 +775,13 @@ export { collectBlueBubblesStatusIssues } from "../channels/plugins/status-issue // Channel: LINE export { listLineAccountIds, + lineSetupAdapter, + lineSetupWizard, normalizeAccountId as normalizeLineAccountId, resolveDefaultLineAccountId, resolveLineAccount, -} from "../line/accounts.js"; -export { lineSetupAdapter, lineSetupWizard } from "../../extensions/line/src/setup-surface.js"; -export { LineConfigSchema } from "../line/config-schema.js"; + LineConfigSchema, +} from "./line.js"; export type { LineConfig, LineAccountConfig, @@ -815,7 +805,7 @@ export { export type { ProcessedLineMessage } from "../line/markdown-to-line.js"; // Media utilities -export { loadWebMedia, type WebMediaResult } from "../../extensions/whatsapp/src/media.js"; +export { loadWebMedia, type WebMediaResult } from "./web-media.js"; // Context engine export type { diff --git a/src/plugin-sdk/line.ts b/src/plugin-sdk/line.ts index 6022c2ea318..c21ee9661fb 100644 --- a/src/plugin-sdk/line.ts +++ b/src/plugin-sdk/line.ts @@ -27,6 +27,12 @@ export { buildTokenChannelStatusSummary, } from "./status-helpers.js"; +export { + listLineAccountIds, + normalizeAccountId, + resolveDefaultLineAccountId, + resolveLineAccount, +} from "../line/accounts.js"; export { lineSetupAdapter } from "../../extensions/line/src/setup-core.js"; export { lineSetupWizard } from "../../extensions/line/src/setup-surface.js"; export { LineConfigSchema } from "../line/config-schema.js"; diff --git a/src/plugin-sdk/msteams.ts b/src/plugin-sdk/msteams.ts index 4a2d12a9ba0..b30e6c6914a 100644 --- a/src/plugin-sdk/msteams.ts +++ b/src/plugin-sdk/msteams.ts @@ -96,7 +96,7 @@ export { } from "./group-access.js"; export { formatDocsLink } from "../terminal/links.js"; export { sleep } from "../utils.js"; -export { loadWebMedia } from "../../extensions/whatsapp/src/media.js"; +export { loadWebMedia } from "./web-media.js"; export type { WizardPrompter } from "../wizard/prompts.js"; export { keepHttpServerTaskAlive } from "./channel-lifecycle.js"; export { withFileLock } from "./file-lock.js"; diff --git a/src/plugin-sdk/outbound-media.ts b/src/plugin-sdk/outbound-media.ts index b1e89b17866..731ca9d140e 100644 --- a/src/plugin-sdk/outbound-media.ts +++ b/src/plugin-sdk/outbound-media.ts @@ -1,4 +1,4 @@ -import { loadWebMedia } from "../../extensions/whatsapp/src/media.js"; +import { loadWebMedia } from "./web-media.js"; export type OutboundMediaLoadOptions = { maxBytes?: number; diff --git a/src/plugin-sdk/signal.ts b/src/plugin-sdk/signal.ts index f57a046ab03..b407e944e47 100644 --- a/src/plugin-sdk/signal.ts +++ b/src/plugin-sdk/signal.ts @@ -3,10 +3,16 @@ export type { ResolvedSignalAccount } from "../../extensions/signal/src/accounts export type { SignalAccountConfig } from "../config/types.js"; export * from "./channel-plugin-common.js"; export { + listEnabledSignalAccounts, listSignalAccountIds, resolveDefaultSignalAccountId, resolveSignalAccount, } from "../../extensions/signal/src/accounts.js"; +export { resolveSignalReactionLevel } from "../../extensions/signal/src/reaction-level.js"; +export { + removeReactionSignal, + sendReactionSignal, +} from "../../extensions/signal/src/send-reactions.js"; export { looksLikeSignalTargetId, normalizeSignalMessagingTarget, diff --git a/src/plugin-sdk/slack-targets.ts b/src/plugin-sdk/slack-targets.ts new file mode 100644 index 00000000000..be9ded918cf --- /dev/null +++ b/src/plugin-sdk/slack-targets.ts @@ -0,0 +1,6 @@ +export { + parseSlackTarget, + resolveSlackChannelId, + type SlackTarget, + type SlackTargetKind, +} from "../../extensions/slack/src/targets.js"; diff --git a/src/plugin-sdk/slack.ts b/src/plugin-sdk/slack.ts index 7e200ab5995..0cbfd236274 100644 --- a/src/plugin-sdk/slack.ts +++ b/src/plugin-sdk/slack.ts @@ -4,6 +4,7 @@ export type { InspectedSlackAccount } from "../../extensions/slack/src/account-i export type { ResolvedSlackAccount } from "../../extensions/slack/src/accounts.js"; export * from "./channel-plugin-common.js"; export { + listEnabledSlackAccounts, listSlackAccountIds, resolveDefaultSlackAccountId, resolveSlackAccount, @@ -24,6 +25,7 @@ export { looksLikeSlackTargetId, normalizeSlackMessagingTarget, } from "../channels/plugins/normalize/slack.js"; +export { parseSlackTarget, resolveSlackChannelId } from "./slack-targets.js"; export { extractSlackToolSend, listSlackMessageActions, diff --git a/src/plugin-sdk/telegram.ts b/src/plugin-sdk/telegram.ts index 3e6d1df1257..e8e823a6628 100644 --- a/src/plugin-sdk/telegram.ts +++ b/src/plugin-sdk/telegram.ts @@ -53,8 +53,25 @@ export { parseTelegramReplyToMessageId, parseTelegramThreadId, } from "../../extensions/telegram/src/outbound-params.js"; +export { + isNumericTelegramUserId, + normalizeTelegramAllowFromEntry, +} from "../../extensions/telegram/src/allow-from.js"; +export { fetchTelegramChatId } from "../../extensions/telegram/src/api-fetch.js"; export { collectTelegramStatusIssues } from "../channels/plugins/status-issues/telegram.js"; export { sendTelegramPayloadMessages } from "../../extensions/telegram/src/outbound-adapter.js"; +export { + buildBrowseProvidersButton, + buildModelsKeyboard, + buildProviderKeyboard, + calculateTotalPages, + getModelsPageSize, + type ProviderInfo, +} from "../../extensions/telegram/src/model-buttons.js"; +export { + isTelegramExecApprovalApprover, + isTelegramExecApprovalClientEnabled, +} from "../../extensions/telegram/src/exec-approvals.js"; export { resolveAllowlistProviderRuntimeGroupPolicy, diff --git a/src/plugin-sdk/web-media.ts b/src/plugin-sdk/web-media.ts new file mode 100644 index 00000000000..02194b867b2 --- /dev/null +++ b/src/plugin-sdk/web-media.ts @@ -0,0 +1 @@ +export { loadWebMedia, type WebMediaResult } from "../../extensions/whatsapp/src/media.js"; diff --git a/src/security/audit-channel.runtime.ts b/src/security/audit-channel.runtime.ts index 71fa1cbea6c..867f0a91162 100644 --- a/src/security/audit-channel.runtime.ts +++ b/src/security/audit-channel.runtime.ts @@ -6,4 +6,4 @@ export { export { isNumericTelegramUserId, normalizeTelegramAllowFromEntry, -} from "../../extensions/telegram/src/allow-from.js"; +} from "../plugin-sdk/telegram.js";