refactor: route shared channel sdk imports through plugin seams

This commit is contained in:
Peter Steinberger 2026-03-16 00:48:47 -07:00
parent 0ed64f124d
commit 3a2c24e598
No known key found for this signature in database
25 changed files with 163 additions and 120 deletions

View File

@ -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";

View File

@ -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";

View File

@ -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";

View File

@ -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";

View File

@ -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";

View File

@ -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

View File

@ -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" });

View File

@ -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 {

View File

@ -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,

View File

@ -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;

View File

@ -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,

View File

@ -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";

View File

@ -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,

View File

@ -0,0 +1 @@
export { normalizeIMessageHandle } from "../../extensions/imessage/src/targets.js";

View File

@ -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,

View File

@ -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 {

View File

@ -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";

View File

@ -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";

View File

@ -1,4 +1,4 @@
import { loadWebMedia } from "../../extensions/whatsapp/src/media.js";
import { loadWebMedia } from "./web-media.js";
export type OutboundMediaLoadOptions = {
maxBytes?: number;

View File

@ -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,

View File

@ -0,0 +1,6 @@
export {
parseSlackTarget,
resolveSlackChannelId,
type SlackTarget,
type SlackTargetKind,
} from "../../extensions/slack/src/targets.js";

View File

@ -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,

View File

@ -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,

View File

@ -0,0 +1 @@
export { loadWebMedia, type WebMediaResult } from "../../extensions/whatsapp/src/media.js";

View File

@ -6,4 +6,4 @@ export {
export {
isNumericTelegramUserId,
normalizeTelegramAllowFromEntry,
} from "../../extensions/telegram/src/allow-from.js";
} from "../plugin-sdk/telegram.js";