refactor: reduce plugin-sdk architecture smell edges

This commit is contained in:
Tak Hoffman 2026-03-18 13:41:13 -05:00
parent 600f57c979
commit f98f2e2127
No known key found for this signature in database
6 changed files with 519 additions and 273 deletions

View File

@ -1,3 +1,103 @@
import type {
DiscordPluralKitConfig,
DiscordSendComponents,
DiscordSendEmbeds,
InspectedDiscordAccount,
ResolvedDiscordAccount,
} from "../../extensions/discord/api.js";
import {
createDiscordActionGate,
inspectDiscordAccount,
listDiscordAccountIds,
looksLikeDiscordTargetId,
normalizeDiscordMessagingTarget,
normalizeDiscordOutboundTarget,
readDiscordComponentSpec,
resolveDefaultDiscordAccountId,
resolveDiscordChannelId,
resolveDiscordGroupRequireMention,
resolveDiscordGroupToolPolicy,
collectDiscordStatusIssues,
} from "../../extensions/discord/api.js";
import type {
ThreadBindingManager,
ThreadBindingRecord,
ThreadBindingTargetKind,
} from "../../extensions/discord/runtime-api.js";
import {
addRoleDiscord,
auditDiscordChannelPermissions,
autoBindSpawnedDiscordSubagent,
banMemberDiscord,
collectDiscordAuditChannelIds,
createChannelDiscord,
createScheduledEventDiscord,
createThreadDiscord,
deleteChannelDiscord,
deleteMessageDiscord,
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
discordMessageActions,
editChannelDiscord,
editMessageDiscord,
fetchChannelInfoDiscord,
fetchChannelPermissionsDiscord,
fetchMemberInfoDiscord,
fetchMessageDiscord,
fetchReactionsDiscord,
fetchRoleInfoDiscord,
fetchVoiceStatusDiscord,
getGateway,
getPresence,
getThreadBindingManager,
hasAnyGuildPermissionDiscord,
kickMemberDiscord,
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
listGuildChannelsDiscord,
listGuildEmojisDiscord,
listPinsDiscord,
listScheduledEventsDiscord,
listThreadBindingsBySessionKey,
listThreadsDiscord,
monitorDiscordProvider,
moveChannelDiscord,
pinMessageDiscord,
probeDiscord,
reactMessageDiscord,
readMessagesDiscord,
removeChannelPermissionDiscord,
removeOwnReactionsDiscord,
removeReactionDiscord,
removeRoleDiscord,
resolveDiscordChannelAllowlist,
resolveDiscordUserAllowlist,
resolveThreadBindingIdleTimeoutMs,
resolveThreadBindingInactivityExpiresAt,
resolveThreadBindingMaxAgeExpiresAt,
resolveThreadBindingMaxAgeMs,
searchMessagesDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
sendPollDiscord,
sendStickerDiscord,
sendTypingDiscord,
sendVoiceMessageDiscord,
setChannelPermissionDiscord,
setThreadBindingIdleTimeoutBySessionKey,
setThreadBindingMaxAgeBySessionKey,
timeoutMemberDiscord,
unbindThreadBindingsBySessionKey,
unpinMessageDiscord,
uploadEmojiDiscord,
uploadStickerDiscord,
} from "../../extensions/discord/runtime-api.js";
import { normalizeExplicitDiscordSessionKey } from "../../extensions/discord/session-key-api.js";
import {
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../../extensions/discord/src/directory-config.js";
export type {
ChannelAccountSnapshot,
ChannelGatewayContext,
@ -6,15 +106,16 @@ export type {
export type { OpenClawConfig } from "../config/config.js";
export type { DiscordAccountConfig, DiscordActionConfig } from "../config/types.js";
export type { DiscordConfig } from "../config/types.discord.js";
export type { DiscordPluralKitConfig } from "../../extensions/discord/api.js";
export type { InspectedDiscordAccount } from "../../extensions/discord/api.js";
export type { ResolvedDiscordAccount } from "../../extensions/discord/api.js";
export type { DiscordSendComponents, DiscordSendEmbeds } from "../../extensions/discord/api.js";
export type {
DiscordPluralKitConfig,
DiscordSendComponents,
DiscordSendEmbeds,
InspectedDiscordAccount,
ResolvedDiscordAccount,
ThreadBindingManager,
ThreadBindingRecord,
ThreadBindingTargetKind,
} from "../../extensions/discord/runtime-api.js";
};
export type {
ChannelConfiguredBindingProvider,
ChannelConfiguredBindingConversationRef,
@ -49,14 +150,8 @@ export {
resolveDefaultGroupPolicy,
resolveOpenProviderRuntimeGroupPolicy,
} from "../config/runtime-group-policy.js";
export {
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../../extensions/discord/src/directory-config.js";
export {
resolveDiscordGroupRequireMention,
resolveDiscordGroupToolPolicy,
} from "../../extensions/discord/api.js";
export { listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig };
export { resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy };
export { DiscordConfigSchema } from "../config/zod-schema.providers-core.js";
export {
@ -64,49 +159,22 @@ export {
buildTokenChannelStatusSummary,
} from "./status-helpers.js";
export {
createDiscordActionGate,
listDiscordAccountIds,
resolveDefaultDiscordAccountId,
} from "../../extensions/discord/api.js";
export { inspectDiscordAccount } from "../../extensions/discord/api.js";
export {
looksLikeDiscordTargetId,
normalizeDiscordMessagingTarget,
normalizeDiscordOutboundTarget,
} from "../../extensions/discord/api.js";
export { collectDiscordAuditChannelIds } from "../../extensions/discord/runtime-api.js";
export { collectDiscordStatusIssues } from "../../extensions/discord/api.js";
export {
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
} from "../../extensions/discord/runtime-api.js";
export { normalizeExplicitDiscordSessionKey } from "../../extensions/discord/session-key-api.js";
export {
autoBindSpawnedDiscordSubagent,
getThreadBindingManager,
listThreadBindingsBySessionKey,
resolveThreadBindingIdleTimeoutMs,
resolveThreadBindingInactivityExpiresAt,
resolveThreadBindingMaxAgeExpiresAt,
resolveThreadBindingMaxAgeMs,
setThreadBindingIdleTimeoutBySessionKey,
setThreadBindingMaxAgeBySessionKey,
unbindThreadBindingsBySessionKey,
} from "../../extensions/discord/runtime-api.js";
export { getGateway } from "../../extensions/discord/runtime-api.js";
export { getPresence } from "../../extensions/discord/runtime-api.js";
export { readDiscordComponentSpec } from "../../extensions/discord/api.js";
export { resolveDiscordChannelId } from "../../extensions/discord/api.js";
export {
addRoleDiscord,
auditDiscordChannelPermissions,
autoBindSpawnedDiscordSubagent,
banMemberDiscord,
collectDiscordAuditChannelIds,
collectDiscordStatusIssues,
createChannelDiscord,
createDiscordActionGate,
createScheduledEventDiscord,
createThreadDiscord,
deleteChannelDiscord,
deleteMessageDiscord,
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
discordMessageActions,
editChannelDiscord,
editMessageDiscord,
fetchChannelInfoDiscord,
@ -116,38 +184,57 @@ export {
fetchReactionsDiscord,
fetchRoleInfoDiscord,
fetchVoiceStatusDiscord,
getGateway,
getPresence,
getThreadBindingManager,
hasAnyGuildPermissionDiscord,
inspectDiscordAccount,
kickMemberDiscord,
listDiscordAccountIds,
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
listGuildChannelsDiscord,
listGuildEmojisDiscord,
listPinsDiscord,
listScheduledEventsDiscord,
listThreadBindingsBySessionKey,
listThreadsDiscord,
looksLikeDiscordTargetId,
monitorDiscordProvider,
moveChannelDiscord,
normalizeDiscordMessagingTarget,
normalizeDiscordOutboundTarget,
normalizeExplicitDiscordSessionKey,
pinMessageDiscord,
probeDiscord,
reactMessageDiscord,
readDiscordComponentSpec,
readMessagesDiscord,
removeChannelPermissionDiscord,
removeOwnReactionsDiscord,
removeReactionDiscord,
removeRoleDiscord,
resolveDefaultDiscordAccountId,
resolveDiscordChannelAllowlist,
resolveDiscordChannelId,
resolveDiscordUserAllowlist,
resolveThreadBindingIdleTimeoutMs,
resolveThreadBindingInactivityExpiresAt,
resolveThreadBindingMaxAgeExpiresAt,
resolveThreadBindingMaxAgeMs,
searchMessagesDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
sendPollDiscord,
sendTypingDiscord,
sendStickerDiscord,
sendTypingDiscord,
sendVoiceMessageDiscord,
setChannelPermissionDiscord,
setThreadBindingIdleTimeoutBySessionKey,
setThreadBindingMaxAgeBySessionKey,
timeoutMemberDiscord,
unbindThreadBindingsBySessionKey,
unpinMessageDiscord,
uploadEmojiDiscord,
uploadStickerDiscord,
} from "../../extensions/discord/runtime-api.js";
export { discordMessageActions } from "../../extensions/discord/runtime-api.js";
};

View File

@ -1,5 +1,65 @@
// Public model/catalog helpers for provider plugins.
import {
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "../../extensions/kimi-coding/provider-catalog.js";
import {
buildMinimaxApiModelDefinition,
buildMinimaxModelDefinition,
DEFAULT_MINIMAX_BASE_URL,
MINIMAX_API_BASE_URL,
MINIMAX_API_COST,
MINIMAX_CN_API_BASE_URL,
MINIMAX_HOSTED_COST,
MINIMAX_HOSTED_MODEL_ID,
MINIMAX_HOSTED_MODEL_REF,
MINIMAX_LM_STUDIO_COST,
} from "../../extensions/minimax/model-definitions.js";
import {
buildMistralModelDefinition,
MISTRAL_BASE_URL,
MISTRAL_DEFAULT_COST,
MISTRAL_DEFAULT_MODEL_ID,
MISTRAL_DEFAULT_MODEL_REF,
} from "../../extensions/mistral/model-definitions.js";
import {
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
MODELSTUDIO_CN_BASE_URL,
MODELSTUDIO_DEFAULT_COST,
MODELSTUDIO_DEFAULT_MODEL_ID,
MODELSTUDIO_DEFAULT_MODEL_REF,
MODELSTUDIO_GLOBAL_BASE_URL,
} from "../../extensions/modelstudio/model-definitions.js";
import { MOONSHOT_CN_BASE_URL } from "../../extensions/moonshot/onboard.js";
import {
buildMoonshotProvider,
MOONSHOT_BASE_URL,
MOONSHOT_DEFAULT_MODEL_ID,
} from "../../extensions/moonshot/provider-catalog.js";
import {
QIANFAN_BASE_URL,
QIANFAN_DEFAULT_MODEL_ID,
} from "../../extensions/qianfan/provider-catalog.js";
import {
buildXaiModelDefinition,
XAI_BASE_URL,
XAI_DEFAULT_COST,
XAI_DEFAULT_MODEL_ID,
XAI_DEFAULT_MODEL_REF,
} from "../../extensions/xai/model-definitions.js";
import {
buildZaiModelDefinition,
resolveZaiBaseUrl,
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_CN_BASE_URL,
ZAI_DEFAULT_COST,
ZAI_DEFAULT_MODEL_ID,
ZAI_DEFAULT_MODEL_REF,
ZAI_GLOBAL_BASE_URL,
} from "../../extensions/zai/model-definitions.js";
import type { ModelDefinitionConfig } from "../config/types.models.js";
import {
KILOCODE_DEFAULT_CONTEXT_WINDOW,
@ -37,7 +97,15 @@ export { OPENCODE_ZEN_DEFAULT_MODEL_REF } from "../agents/opencode-zen-models.js
export {
buildMinimaxApiModelDefinition,
buildMinimaxModelDefinition,
buildMistralModelDefinition,
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
buildMoonshotProvider,
buildXaiModelDefinition,
buildZaiModelDefinition,
DEFAULT_MINIMAX_BASE_URL,
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
MINIMAX_API_BASE_URL,
MINIMAX_API_COST,
MINIMAX_CN_API_BASE_URL,
@ -45,47 +113,25 @@ export {
MINIMAX_HOSTED_MODEL_ID,
MINIMAX_HOSTED_MODEL_REF,
MINIMAX_LM_STUDIO_COST,
} from "../../extensions/minimax/model-definitions.js";
export {
buildMistralModelDefinition,
MISTRAL_BASE_URL,
MISTRAL_DEFAULT_COST,
MISTRAL_DEFAULT_MODEL_ID,
MISTRAL_DEFAULT_MODEL_REF,
} from "../../extensions/mistral/model-definitions.js";
export {
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
MODELSTUDIO_CN_BASE_URL,
MODELSTUDIO_DEFAULT_COST,
MODELSTUDIO_DEFAULT_MODEL_ID,
MODELSTUDIO_DEFAULT_MODEL_REF,
MODELSTUDIO_GLOBAL_BASE_URL,
} from "../../extensions/modelstudio/model-definitions.js";
export {
buildMoonshotProvider,
MOONSHOT_BASE_URL,
MOONSHOT_CN_BASE_URL,
MOONSHOT_DEFAULT_MODEL_ID,
} from "../../extensions/moonshot/provider-catalog.js";
export { MOONSHOT_CN_BASE_URL } from "../../extensions/moonshot/onboard.js";
export {
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "../../extensions/kimi-coding/provider-catalog.js";
export {
QIANFAN_BASE_URL,
QIANFAN_DEFAULT_MODEL_ID,
} from "../../extensions/qianfan/provider-catalog.js";
export {
buildXaiModelDefinition,
resolveZaiBaseUrl,
XAI_BASE_URL,
XAI_DEFAULT_COST,
XAI_DEFAULT_MODEL_ID,
XAI_DEFAULT_MODEL_REF,
} from "../../extensions/xai/model-definitions.js";
export {
buildZaiModelDefinition,
resolveZaiBaseUrl,
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_CN_BASE_URL,
@ -93,7 +139,7 @@ export {
ZAI_DEFAULT_MODEL_ID,
ZAI_DEFAULT_MODEL_REF,
ZAI_GLOBAL_BASE_URL,
} from "../../extensions/zai/model-definitions.js";
};
export {
buildCloudflareAiGatewayModelDefinition,

View File

@ -1,7 +1,53 @@
import type { InspectedSlackAccount, ResolvedSlackAccount } from "../../extensions/slack/api.js";
import {
buildSlackThreadingToolContext,
deleteSlackMessage,
downloadSlackFile,
editSlackMessage,
extractSlackToolSend,
getSlackMemberInfo,
handleSlackHttpRequest,
inspectSlackAccount,
isSlackInteractiveRepliesEnabled,
listEnabledSlackAccounts,
listSlackAccountIds,
listSlackEmojis,
listSlackMessageActions,
listSlackPins,
listSlackReactions,
parseSlackBlocksInput,
pinSlackMessage,
reactSlackMessage,
readSlackMessages,
recordSlackThreadParticipation,
removeOwnSlackReactions,
removeSlackReaction,
resolveDefaultSlackAccountId,
resolveSlackGroupRequireMention,
resolveSlackGroupToolPolicy,
resolveSlackReplyToMode,
sendSlackMessage,
unpinSlackMessage,
} from "../../extensions/slack/api.js";
import type { SlackActionContext } from "../../extensions/slack/runtime-api.js";
import {
handleSlackAction,
listSlackDirectoryGroupsLive,
listSlackDirectoryPeersLive,
monitorSlackProvider,
probeSlack,
resolveSlackChannelAllowlist,
resolveSlackUserAllowlist,
sendMessageSlack,
} from "../../extensions/slack/runtime-api.js";
import {
listSlackDirectoryGroupsFromConfig,
listSlackDirectoryPeersFromConfig,
} from "../../extensions/slack/src/directory-config.js";
export type { OpenClawConfig } from "../config/config.js";
export type { SlackAccountConfig } from "../config/types.slack.js";
export type { InspectedSlackAccount } from "../../extensions/slack/api.js";
export type { ResolvedSlackAccount } from "../../extensions/slack/api.js";
export type { InspectedSlackAccount, ResolvedSlackAccount, SlackActionContext };
export type {
ChannelMessageActionContext,
ChannelPlugin,
@ -32,59 +78,51 @@ export {
looksLikeSlackTargetId,
normalizeSlackMessagingTarget,
} from "../channels/plugins/normalize/slack.js";
export {
listSlackDirectoryGroupsFromConfig,
listSlackDirectoryPeersFromConfig,
} from "../../extensions/slack/src/directory-config.js";
export { listSlackDirectoryGroupsFromConfig, listSlackDirectoryPeersFromConfig };
export {
resolveDefaultGroupPolicy,
resolveOpenProviderRuntimeGroupPolicy,
} from "../config/runtime-group-policy.js";
export {
resolveSlackGroupRequireMention,
resolveSlackGroupToolPolicy,
} from "../../extensions/slack/api.js";
export { resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy };
export { SlackConfigSchema } from "../config/zod-schema.providers-core.js";
export { buildComputedAccountStatusSnapshot } from "./status-helpers.js";
export {
inspectSlackAccount,
isSlackInteractiveRepliesEnabled,
listEnabledSlackAccounts,
listSlackAccountIds,
resolveDefaultSlackAccountId,
resolveSlackReplyToMode,
} from "../../extensions/slack/api.js";
export { isSlackInteractiveRepliesEnabled } from "../../extensions/slack/api.js";
export { inspectSlackAccount } from "../../extensions/slack/api.js";
};
export { parseSlackTarget, resolveSlackChannelId } from "./slack-targets.js";
export { extractSlackToolSend, listSlackMessageActions } from "../../extensions/slack/api.js";
export { buildSlackThreadingToolContext } from "../../extensions/slack/api.js";
export { parseSlackBlocksInput } from "../../extensions/slack/api.js";
export { handleSlackHttpRequest } from "../../extensions/slack/api.js";
export {
handleSlackAction,
listSlackDirectoryGroupsLive,
listSlackDirectoryPeersLive,
monitorSlackProvider,
probeSlack,
resolveSlackChannelAllowlist,
resolveSlackUserAllowlist,
sendMessageSlack,
} from "../../extensions/slack/runtime-api.js";
export {
buildSlackThreadingToolContext,
deleteSlackMessage,
downloadSlackFile,
editSlackMessage,
extractSlackToolSend,
getSlackMemberInfo,
handleSlackAction,
handleSlackHttpRequest,
listSlackDirectoryGroupsLive,
listSlackDirectoryPeersLive,
listSlackEmojis,
listSlackMessageActions,
listSlackPins,
listSlackReactions,
monitorSlackProvider,
parseSlackBlocksInput,
pinSlackMessage,
probeSlack,
reactSlackMessage,
readSlackMessages,
recordSlackThreadParticipation,
removeOwnSlackReactions,
removeSlackReaction,
resolveSlackChannelAllowlist,
resolveSlackUserAllowlist,
sendMessageSlack,
sendSlackMessage,
unpinSlackMessage,
} from "../../extensions/slack/api.js";
export { recordSlackThreadParticipation } from "../../extensions/slack/api.js";
export type { SlackActionContext } from "../../extensions/slack/runtime-api.js";
};

View File

@ -1,3 +1,70 @@
import type {
InspectedTelegramAccount,
ProviderInfo,
ResolvedTelegramAccount,
StickerMetadata,
TelegramButtonStyle,
TelegramInlineButtons,
} from "../../extensions/telegram/api.js";
import {
buildBrowseProvidersButton,
buildModelsKeyboard,
buildProviderKeyboard,
calculateTotalPages,
createTelegramActionGate,
fetchTelegramChatId,
getCacheStats,
getModelsPageSize,
inspectTelegramAccount,
isNumericTelegramUserId,
isTelegramExecApprovalApprover,
isTelegramExecApprovalClientEnabled,
listTelegramAccountIds,
looksLikeTelegramTargetId,
normalizeTelegramAllowFromEntry,
normalizeTelegramMessagingTarget,
parseTelegramReplyToMessageId,
parseTelegramThreadId,
resolveDefaultTelegramAccountId,
resolveTelegramGroupRequireMention,
resolveTelegramGroupToolPolicy,
resolveTelegramInlineButtonsScope,
resolveTelegramPollActionGateState,
resolveTelegramReactionLevel,
resolveTelegramTargetChatType,
searchStickers,
sendTelegramPayloadMessages,
collectTelegramStatusIssues,
} from "../../extensions/telegram/api.js";
import type { TelegramProbe } from "../../extensions/telegram/runtime-api.js";
import {
auditTelegramGroupMembership,
collectTelegramUnmentionedGroupIds,
createForumTopicTelegram,
deleteMessageTelegram,
editForumTopicTelegram,
editMessageReplyMarkupTelegram,
editMessageTelegram,
monitorTelegramProvider,
pinMessageTelegram,
probeTelegram,
reactMessageTelegram,
renameForumTopicTelegram,
resolveTelegramToken,
sendMessageTelegram,
sendPollTelegram,
sendStickerTelegram,
sendTypingTelegram,
setTelegramThreadBindingIdleTimeoutBySessionKey,
setTelegramThreadBindingMaxAgeBySessionKey,
telegramMessageActions,
unpinMessageTelegram,
} from "../../extensions/telegram/runtime-api.js";
import {
listTelegramDirectoryGroupsFromConfig,
listTelegramDirectoryPeersFromConfig,
} from "../../extensions/telegram/src/directory-config.js";
export type {
ChannelAccountSnapshot,
ChannelGatewayContext,
@ -17,11 +84,15 @@ export type {
ChannelConfiguredBindingConversationRef,
ChannelConfiguredBindingMatch,
} from "../channels/plugins/types.adapters.js";
export type { InspectedTelegramAccount } from "../../extensions/telegram/api.js";
export type { ResolvedTelegramAccount } from "../../extensions/telegram/api.js";
export type { TelegramProbe } from "../../extensions/telegram/runtime-api.js";
export type { TelegramButtonStyle, TelegramInlineButtons } from "../../extensions/telegram/api.js";
export type { StickerMetadata } from "../../extensions/telegram/api.js";
export type {
InspectedTelegramAccount,
ProviderInfo,
ResolvedTelegramAccount,
StickerMetadata,
TelegramButtonStyle,
TelegramInlineButtons,
TelegramProbe,
};
export { emptyPluginConfigSchema } from "../plugins/config-schema.js";
export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js";
@ -48,80 +119,58 @@ export {
resolveAllowlistProviderRuntimeGroupPolicy,
resolveDefaultGroupPolicy,
} from "../config/runtime-group-policy.js";
export {
listTelegramDirectoryGroupsFromConfig,
listTelegramDirectoryPeersFromConfig,
} from "../../extensions/telegram/src/directory-config.js";
export {
resolveTelegramGroupRequireMention,
resolveTelegramGroupToolPolicy,
} from "../../extensions/telegram/api.js";
export { listTelegramDirectoryGroupsFromConfig, listTelegramDirectoryPeersFromConfig };
export { resolveTelegramGroupRequireMention, resolveTelegramGroupToolPolicy };
export { TelegramConfigSchema } from "../config/zod-schema.providers-core.js";
export { buildTokenChannelStatusSummary } from "./status-helpers.js";
export {
createTelegramActionGate,
listTelegramAccountIds,
resolveDefaultTelegramAccountId,
resolveTelegramPollActionGateState,
} from "../../extensions/telegram/api.js";
export { inspectTelegramAccount } from "../../extensions/telegram/api.js";
export {
looksLikeTelegramTargetId,
normalizeTelegramMessagingTarget,
} from "../../extensions/telegram/api.js";
export {
parseTelegramReplyToMessageId,
parseTelegramThreadId,
} from "../../extensions/telegram/api.js";
export {
isNumericTelegramUserId,
normalizeTelegramAllowFromEntry,
} from "../../extensions/telegram/api.js";
export { fetchTelegramChatId } from "../../extensions/telegram/api.js";
export {
resolveTelegramInlineButtonsScope,
resolveTelegramTargetChatType,
} from "../../extensions/telegram/api.js";
export { resolveTelegramReactionLevel } from "../../extensions/telegram/api.js";
export {
auditTelegramGroupMembership,
collectTelegramUnmentionedGroupIds,
createForumTopicTelegram,
deleteMessageTelegram,
editForumTopicTelegram,
editMessageReplyMarkupTelegram,
editMessageTelegram,
monitorTelegramProvider,
pinMessageTelegram,
reactMessageTelegram,
renameForumTopicTelegram,
probeTelegram,
sendMessageTelegram,
sendPollTelegram,
sendStickerTelegram,
sendTypingTelegram,
unpinMessageTelegram,
} from "../../extensions/telegram/runtime-api.js";
export { getCacheStats, searchStickers } from "../../extensions/telegram/api.js";
export { resolveTelegramToken } from "../../extensions/telegram/runtime-api.js";
export { telegramMessageActions } from "../../extensions/telegram/runtime-api.js";
export {
setTelegramThreadBindingIdleTimeoutBySessionKey,
setTelegramThreadBindingMaxAgeBySessionKey,
} from "../../extensions/telegram/runtime-api.js";
export { collectTelegramStatusIssues } from "../../extensions/telegram/api.js";
export { sendTelegramPayloadMessages } from "../../extensions/telegram/api.js";
export {
buildBrowseProvidersButton,
buildModelsKeyboard,
buildProviderKeyboard,
calculateTotalPages,
collectTelegramStatusIssues,
collectTelegramUnmentionedGroupIds,
createForumTopicTelegram,
createTelegramActionGate,
deleteMessageTelegram,
editForumTopicTelegram,
editMessageReplyMarkupTelegram,
editMessageTelegram,
fetchTelegramChatId,
getCacheStats,
getModelsPageSize,
type ProviderInfo,
} from "../../extensions/telegram/api.js";
export {
inspectTelegramAccount,
isNumericTelegramUserId,
isTelegramExecApprovalApprover,
isTelegramExecApprovalClientEnabled,
} from "../../extensions/telegram/api.js";
listTelegramAccountIds,
looksLikeTelegramTargetId,
monitorTelegramProvider,
normalizeTelegramAllowFromEntry,
normalizeTelegramMessagingTarget,
parseTelegramReplyToMessageId,
parseTelegramThreadId,
pinMessageTelegram,
probeTelegram,
reactMessageTelegram,
renameForumTopicTelegram,
resolveDefaultTelegramAccountId,
resolveTelegramInlineButtonsScope,
resolveTelegramPollActionGateState,
resolveTelegramReactionLevel,
resolveTelegramTargetChatType,
resolveTelegramToken,
searchStickers,
sendMessageTelegram,
sendPollTelegram,
sendStickerTelegram,
sendTelegramPayloadMessages,
sendTypingTelegram,
setTelegramThreadBindingIdleTimeoutBySessionKey,
setTelegramThreadBindingMaxAgeBySessionKey,
telegramMessageActions,
unpinMessageTelegram,
};

View File

@ -1,11 +1,57 @@
import {
hasAnyWhatsAppAuth,
listEnabledWhatsAppAccounts,
resolveWhatsAppAccount,
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../../extensions/whatsapp/api.js";
import type {
WebChannelStatus,
WebInboundMessage,
WebListenerCloseReason,
WebMonitorTuning,
} from "../../extensions/whatsapp/runtime-api.js";
import {
createWhatsAppLoginTool,
createWaSocket,
DEFAULT_WEB_MEDIA_BYTES,
extractMediaPlaceholder,
extractText,
formatError,
getActiveWebListener,
getDefaultLocalRoots,
getStatusCode,
getWebAuthAgeMs,
HEARTBEAT_PROMPT,
HEARTBEAT_TOKEN,
loadWebMedia,
loadWebMediaRaw,
loginWeb,
logWebSelfId,
logoutWeb,
monitorWebChannel,
monitorWebInbox,
optimizeImageToJpeg,
pickWebChannel,
readWebSelfId,
resolveHeartbeatRecipients,
runWebHeartbeatOnce,
sendMessageWhatsApp,
sendPollWhatsApp,
sendReactionWhatsApp,
waitForWaConnection,
WA_WEB_AUTH_DIR,
webAuthExists,
} from "../../extensions/whatsapp/runtime-api.js";
import {
listWhatsAppDirectoryGroupsFromConfig,
listWhatsAppDirectoryPeersFromConfig,
} from "../../extensions/whatsapp/src/directory-config.js";
export type { ChannelMessageActionName } from "../channels/plugins/types.js";
export type { OpenClawConfig } from "../config/config.js";
export type { DmPolicy, GroupPolicy, WhatsAppAccountConfig } from "../config/types.js";
export type { WebChannelStatus, WebMonitorTuning } from "../../extensions/whatsapp/runtime-api.js";
export type {
WebInboundMessage,
WebListenerCloseReason,
} from "../../extensions/whatsapp/runtime-api.js";
export type { WebChannelStatus, WebInboundMessage, WebListenerCloseReason, WebMonitorTuning };
export type {
ChannelMessageActionContext,
ChannelPlugin,
@ -33,10 +79,7 @@ export {
resolveWhatsAppConfigDefaultTo,
} from "./channel-config-helpers.js";
export { normalizeWhatsAppAllowFromEntries } from "../channels/plugins/normalize/whatsapp.js";
export {
listWhatsAppDirectoryGroupsFromConfig,
listWhatsAppDirectoryPeersFromConfig,
} from "../../extensions/whatsapp/src/directory-config.js";
export { listWhatsAppDirectoryGroupsFromConfig, listWhatsAppDirectoryPeersFromConfig };
export {
collectAllowlistProviderGroupPolicyWarnings,
collectOpenGroupPolicyRouteAllowlistWarnings,
@ -49,10 +92,7 @@ export {
resolveAllowlistProviderRuntimeGroupPolicy,
resolveDefaultGroupPolicy,
} from "../config/runtime-group-policy.js";
export {
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../../extensions/whatsapp/api.js";
export { resolveWhatsAppGroupRequireMention, resolveWhatsAppGroupToolPolicy };
export {
createWhatsAppOutboundBase,
resolveWhatsAppGroupIntroHint,
@ -65,50 +105,36 @@ export { createActionGate, readStringParam } from "../agents/tools/common.js";
export { createPluginRuntimeStore } from "./runtime-store.js";
export { normalizeE164 } from "../utils.js";
export { hasAnyWhatsAppAuth, listEnabledWhatsAppAccounts, resolveWhatsAppAccount };
export {
hasAnyWhatsAppAuth,
listEnabledWhatsAppAccounts,
resolveWhatsAppAccount,
} from "../../extensions/whatsapp/api.js";
export {
getActiveWebListener,
getWebAuthAgeMs,
WA_WEB_AUTH_DIR,
logWebSelfId,
logoutWeb,
pickWebChannel,
readWebSelfId,
webAuthExists,
} from "../../extensions/whatsapp/runtime-api.js";
export {
createWaSocket,
createWhatsAppLoginTool,
DEFAULT_WEB_MEDIA_BYTES,
HEARTBEAT_PROMPT,
HEARTBEAT_TOKEN,
monitorWebChannel,
resolveHeartbeatRecipients,
runWebHeartbeatOnce,
} from "../../extensions/whatsapp/runtime-api.js";
export {
extractMediaPlaceholder,
extractText,
monitorWebInbox,
} from "../../extensions/whatsapp/runtime-api.js";
export { loginWeb } from "../../extensions/whatsapp/runtime-api.js";
export {
formatError,
getActiveWebListener,
getDefaultLocalRoots,
getStatusCode,
getWebAuthAgeMs,
HEARTBEAT_PROMPT,
HEARTBEAT_TOKEN,
loadWebMedia,
loadWebMediaRaw,
loginWeb,
logWebSelfId,
logoutWeb,
monitorWebChannel,
monitorWebInbox,
optimizeImageToJpeg,
} from "../../extensions/whatsapp/runtime-api.js";
export {
pickWebChannel,
readWebSelfId,
resolveHeartbeatRecipients,
runWebHeartbeatOnce,
sendMessageWhatsApp,
sendPollWhatsApp,
sendReactionWhatsApp,
} from "../../extensions/whatsapp/runtime-api.js";
export {
createWaSocket,
formatError,
getStatusCode,
waitForWaConnection,
} from "../../extensions/whatsapp/runtime-api.js";
export { createWhatsAppLoginTool } from "../../extensions/whatsapp/runtime-api.js";
WA_WEB_AUTH_DIR,
webAuthExists,
};

View File

@ -94,29 +94,29 @@ export type PluginRuntimeChannel = {
shouldHandleTextCommands: typeof import("../../auto-reply/commands-registry.js").shouldHandleTextCommands;
};
discord: {
messageActions: typeof import("../../../extensions/discord/runtime-api.js").discordMessageActions;
auditChannelPermissions: typeof import("../../../extensions/discord/runtime-api.js").auditDiscordChannelPermissions;
listDirectoryGroupsLive: typeof import("../../../extensions/discord/runtime-api.js").listDiscordDirectoryGroupsLive;
listDirectoryPeersLive: typeof import("../../../extensions/discord/runtime-api.js").listDiscordDirectoryPeersLive;
probeDiscord: typeof import("../../../extensions/discord/runtime-api.js").probeDiscord;
resolveChannelAllowlist: typeof import("../../../extensions/discord/runtime-api.js").resolveDiscordChannelAllowlist;
resolveUserAllowlist: typeof import("../../../extensions/discord/runtime-api.js").resolveDiscordUserAllowlist;
sendComponentMessage: typeof import("../../../extensions/discord/runtime-api.js").sendDiscordComponentMessage;
sendMessageDiscord: typeof import("../../../extensions/discord/runtime-api.js").sendMessageDiscord;
sendPollDiscord: typeof import("../../../extensions/discord/runtime-api.js").sendPollDiscord;
monitorDiscordProvider: typeof import("../../../extensions/discord/runtime-api.js").monitorDiscordProvider;
messageActions: typeof import("openclaw/plugin-sdk/discord").discordMessageActions;
auditChannelPermissions: typeof import("openclaw/plugin-sdk/discord").auditDiscordChannelPermissions;
listDirectoryGroupsLive: typeof import("openclaw/plugin-sdk/discord").listDiscordDirectoryGroupsLive;
listDirectoryPeersLive: typeof import("openclaw/plugin-sdk/discord").listDiscordDirectoryPeersLive;
probeDiscord: typeof import("openclaw/plugin-sdk/discord").probeDiscord;
resolveChannelAllowlist: typeof import("openclaw/plugin-sdk/discord").resolveDiscordChannelAllowlist;
resolveUserAllowlist: typeof import("openclaw/plugin-sdk/discord").resolveDiscordUserAllowlist;
sendComponentMessage: typeof import("openclaw/plugin-sdk/discord").sendDiscordComponentMessage;
sendMessageDiscord: typeof import("openclaw/plugin-sdk/discord").sendMessageDiscord;
sendPollDiscord: typeof import("openclaw/plugin-sdk/discord").sendPollDiscord;
monitorDiscordProvider: typeof import("openclaw/plugin-sdk/discord").monitorDiscordProvider;
threadBindings: {
getManager: typeof import("../../../extensions/discord/runtime-api.js").getThreadBindingManager;
resolveIdleTimeoutMs: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingIdleTimeoutMs;
resolveInactivityExpiresAt: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingInactivityExpiresAt;
resolveMaxAgeMs: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingMaxAgeMs;
resolveMaxAgeExpiresAt: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingMaxAgeExpiresAt;
setIdleTimeoutBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").setThreadBindingIdleTimeoutBySessionKey;
setMaxAgeBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").setThreadBindingMaxAgeBySessionKey;
unbindBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").unbindThreadBindingsBySessionKey;
getManager: typeof import("openclaw/plugin-sdk/discord").getThreadBindingManager;
resolveIdleTimeoutMs: typeof import("openclaw/plugin-sdk/discord").resolveThreadBindingIdleTimeoutMs;
resolveInactivityExpiresAt: typeof import("openclaw/plugin-sdk/discord").resolveThreadBindingInactivityExpiresAt;
resolveMaxAgeMs: typeof import("openclaw/plugin-sdk/discord").resolveThreadBindingMaxAgeMs;
resolveMaxAgeExpiresAt: typeof import("openclaw/plugin-sdk/discord").resolveThreadBindingMaxAgeExpiresAt;
setIdleTimeoutBySessionKey: typeof import("openclaw/plugin-sdk/discord").setThreadBindingIdleTimeoutBySessionKey;
setMaxAgeBySessionKey: typeof import("openclaw/plugin-sdk/discord").setThreadBindingMaxAgeBySessionKey;
unbindBySessionKey: typeof import("openclaw/plugin-sdk/discord").unbindThreadBindingsBySessionKey;
};
typing: {
pulse: typeof import("../../../extensions/discord/runtime-api.js").sendTypingDiscord;
pulse: typeof import("openclaw/plugin-sdk/discord").sendTypingDiscord;
start: (params: {
channelId: string;
accountId?: string;
@ -128,39 +128,39 @@ export type PluginRuntimeChannel = {
}>;
};
conversationActions: {
editMessage: typeof import("../../../extensions/discord/runtime-api.js").editMessageDiscord;
deleteMessage: typeof import("../../../extensions/discord/runtime-api.js").deleteMessageDiscord;
pinMessage: typeof import("../../../extensions/discord/runtime-api.js").pinMessageDiscord;
unpinMessage: typeof import("../../../extensions/discord/runtime-api.js").unpinMessageDiscord;
createThread: typeof import("../../../extensions/discord/runtime-api.js").createThreadDiscord;
editChannel: typeof import("../../../extensions/discord/runtime-api.js").editChannelDiscord;
editMessage: typeof import("openclaw/plugin-sdk/discord").editMessageDiscord;
deleteMessage: typeof import("openclaw/plugin-sdk/discord").deleteMessageDiscord;
pinMessage: typeof import("openclaw/plugin-sdk/discord").pinMessageDiscord;
unpinMessage: typeof import("openclaw/plugin-sdk/discord").unpinMessageDiscord;
createThread: typeof import("openclaw/plugin-sdk/discord").createThreadDiscord;
editChannel: typeof import("openclaw/plugin-sdk/discord").editChannelDiscord;
};
};
slack: {
listDirectoryGroupsLive: typeof import("../../../extensions/slack/runtime-api.js").listSlackDirectoryGroupsLive;
listDirectoryPeersLive: typeof import("../../../extensions/slack/runtime-api.js").listSlackDirectoryPeersLive;
probeSlack: typeof import("../../../extensions/slack/runtime-api.js").probeSlack;
resolveChannelAllowlist: typeof import("../../../extensions/slack/runtime-api.js").resolveSlackChannelAllowlist;
resolveUserAllowlist: typeof import("../../../extensions/slack/runtime-api.js").resolveSlackUserAllowlist;
sendMessageSlack: typeof import("../../../extensions/slack/runtime-api.js").sendMessageSlack;
monitorSlackProvider: typeof import("../../../extensions/slack/runtime-api.js").monitorSlackProvider;
handleSlackAction: typeof import("../../../extensions/slack/runtime-api.js").handleSlackAction;
listDirectoryGroupsLive: typeof import("openclaw/plugin-sdk/slack").listSlackDirectoryGroupsLive;
listDirectoryPeersLive: typeof import("openclaw/plugin-sdk/slack").listSlackDirectoryPeersLive;
probeSlack: typeof import("openclaw/plugin-sdk/slack").probeSlack;
resolveChannelAllowlist: typeof import("openclaw/plugin-sdk/slack").resolveSlackChannelAllowlist;
resolveUserAllowlist: typeof import("openclaw/plugin-sdk/slack").resolveSlackUserAllowlist;
sendMessageSlack: typeof import("openclaw/plugin-sdk/slack").sendMessageSlack;
monitorSlackProvider: typeof import("openclaw/plugin-sdk/slack").monitorSlackProvider;
handleSlackAction: typeof import("openclaw/plugin-sdk/slack").handleSlackAction;
};
telegram: {
auditGroupMembership: typeof import("../../../extensions/telegram/runtime-api.js").auditTelegramGroupMembership;
collectUnmentionedGroupIds: typeof import("../../../extensions/telegram/runtime-api.js").collectTelegramUnmentionedGroupIds;
probeTelegram: typeof import("../../../extensions/telegram/runtime-api.js").probeTelegram;
resolveTelegramToken: typeof import("../../../extensions/telegram/runtime-api.js").resolveTelegramToken;
sendMessageTelegram: typeof import("../../../extensions/telegram/runtime-api.js").sendMessageTelegram;
sendPollTelegram: typeof import("../../../extensions/telegram/runtime-api.js").sendPollTelegram;
monitorTelegramProvider: typeof import("../../../extensions/telegram/runtime-api.js").monitorTelegramProvider;
messageActions: typeof import("../../../extensions/telegram/runtime-api.js").telegramMessageActions;
auditGroupMembership: typeof import("openclaw/plugin-sdk/telegram").auditTelegramGroupMembership;
collectUnmentionedGroupIds: typeof import("openclaw/plugin-sdk/telegram").collectTelegramUnmentionedGroupIds;
probeTelegram: typeof import("openclaw/plugin-sdk/telegram").probeTelegram;
resolveTelegramToken: typeof import("openclaw/plugin-sdk/telegram").resolveTelegramToken;
sendMessageTelegram: typeof import("openclaw/plugin-sdk/telegram").sendMessageTelegram;
sendPollTelegram: typeof import("openclaw/plugin-sdk/telegram").sendPollTelegram;
monitorTelegramProvider: typeof import("openclaw/plugin-sdk/telegram").monitorTelegramProvider;
messageActions: typeof import("openclaw/plugin-sdk/telegram").telegramMessageActions;
threadBindings: {
setIdleTimeoutBySessionKey: typeof import("../../../extensions/telegram/runtime-api.js").setTelegramThreadBindingIdleTimeoutBySessionKey;
setMaxAgeBySessionKey: typeof import("../../../extensions/telegram/runtime-api.js").setTelegramThreadBindingMaxAgeBySessionKey;
setIdleTimeoutBySessionKey: typeof import("openclaw/plugin-sdk/telegram").setTelegramThreadBindingIdleTimeoutBySessionKey;
setMaxAgeBySessionKey: typeof import("openclaw/plugin-sdk/telegram").setTelegramThreadBindingMaxAgeBySessionKey;
};
typing: {
pulse: typeof import("../../../extensions/telegram/runtime-api.js").sendTypingTelegram;
pulse: typeof import("openclaw/plugin-sdk/telegram").sendTypingTelegram;
start: (params: {
to: string;
accountId?: string;
@ -173,8 +173,8 @@ export type PluginRuntimeChannel = {
}>;
};
conversationActions: {
editMessage: typeof import("../../../extensions/telegram/runtime-api.js").editMessageTelegram;
editReplyMarkup: typeof import("../../../extensions/telegram/runtime-api.js").editMessageReplyMarkupTelegram;
editMessage: typeof import("openclaw/plugin-sdk/telegram").editMessageTelegram;
editReplyMarkup: typeof import("openclaw/plugin-sdk/telegram").editMessageReplyMarkupTelegram;
clearReplyMarkup: (
chatIdInput: string | number,
messageIdInput: string | number,
@ -187,10 +187,10 @@ export type PluginRuntimeChannel = {
cfg?: ReturnType<typeof import("../../config/config.js").loadConfig>;
},
) => Promise<{ ok: true; messageId: string; chatId: string }>;
deleteMessage: typeof import("../../../extensions/telegram/runtime-api.js").deleteMessageTelegram;
renameTopic: typeof import("../../../extensions/telegram/runtime-api.js").renameForumTopicTelegram;
pinMessage: typeof import("../../../extensions/telegram/runtime-api.js").pinMessageTelegram;
unpinMessage: typeof import("../../../extensions/telegram/runtime-api.js").unpinMessageTelegram;
deleteMessage: typeof import("openclaw/plugin-sdk/telegram").deleteMessageTelegram;
renameTopic: typeof import("openclaw/plugin-sdk/telegram").renameForumTopicTelegram;
pinMessage: typeof import("openclaw/plugin-sdk/telegram").pinMessageTelegram;
unpinMessage: typeof import("openclaw/plugin-sdk/telegram").unpinMessageTelegram;
};
};
signal: {