refactor: route plugin-sdk through core bridges

This commit is contained in:
Tak Hoffman 2026-03-18 13:47:07 -05:00
parent f98f2e2127
commit 8e219caca8
No known key found for this signature in database
10 changed files with 365 additions and 48 deletions

View File

@ -0,0 +1,100 @@
export type {
DiscordPluralKitConfig,
DiscordSendComponents,
DiscordSendEmbeds,
InspectedDiscordAccount,
ResolvedDiscordAccount,
} from "../../../extensions/discord/api.js";
export type {
ThreadBindingManager,
ThreadBindingRecord,
ThreadBindingTargetKind,
} from "../../../extensions/discord/runtime-api.js";
export {
collectDiscordStatusIssues,
createDiscordActionGate,
inspectDiscordAccount,
listDiscordAccountIds,
looksLikeDiscordTargetId,
normalizeDiscordMessagingTarget,
normalizeDiscordOutboundTarget,
readDiscordComponentSpec,
resolveDefaultDiscordAccountId,
resolveDiscordChannelId,
resolveDiscordGroupRequireMention,
resolveDiscordGroupToolPolicy,
} from "../../../extensions/discord/api.js";
export {
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";
export { normalizeExplicitDiscordSessionKey } from "../../../extensions/discord/session-key-api.js";
export {
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../../../extensions/discord/src/directory-config.js";

View File

@ -0,0 +1,47 @@
export type { InspectedSlackAccount, ResolvedSlackAccount } from "../../../extensions/slack/api.js";
export type { SlackActionContext } from "../../../extensions/slack/runtime-api.js";
export {
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";
export {
handleSlackAction,
listSlackDirectoryGroupsLive,
listSlackDirectoryPeersLive,
monitorSlackProvider,
probeSlack,
resolveSlackChannelAllowlist,
resolveSlackUserAllowlist,
sendMessageSlack,
} from "../../../extensions/slack/runtime-api.js";
export {
listSlackDirectoryGroupsFromConfig,
listSlackDirectoryPeersFromConfig,
} from "../../../extensions/slack/src/directory-config.js";

View File

@ -0,0 +1,67 @@
export type {
InspectedTelegramAccount,
ProviderInfo,
ResolvedTelegramAccount,
StickerMetadata,
TelegramButtonStyle,
TelegramInlineButtons,
} from "../../../extensions/telegram/api.js";
export type { TelegramProbe } from "../../../extensions/telegram/runtime-api.js";
export {
buildBrowseProvidersButton,
buildModelsKeyboard,
buildProviderKeyboard,
calculateTotalPages,
collectTelegramStatusIssues,
createTelegramActionGate,
fetchTelegramChatId,
getCacheStats,
getModelsPageSize,
inspectTelegramAccount,
isNumericTelegramUserId,
isTelegramExecApprovalApprover,
isTelegramExecApprovalClientEnabled,
listTelegramAccountIds,
looksLikeTelegramTargetId,
normalizeTelegramAllowFromEntry,
normalizeTelegramMessagingTarget,
parseTelegramReplyToMessageId,
parseTelegramThreadId,
resolveDefaultTelegramAccountId,
resolveTelegramGroupRequireMention,
resolveTelegramGroupToolPolicy,
resolveTelegramInlineButtonsScope,
resolveTelegramPollActionGateState,
resolveTelegramReactionLevel,
resolveTelegramTargetChatType,
searchStickers,
sendTelegramPayloadMessages,
} from "../../../extensions/telegram/api.js";
export {
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";
export {
listTelegramDirectoryGroupsFromConfig,
listTelegramDirectoryPeersFromConfig,
} from "../../../extensions/telegram/src/directory-config.js";

View File

@ -0,0 +1,50 @@
export type {
WebChannelStatus,
WebInboundMessage,
WebListenerCloseReason,
WebMonitorTuning,
} from "../../../extensions/whatsapp/runtime-api.js";
export {
hasAnyWhatsAppAuth,
listEnabledWhatsAppAccounts,
resolveWhatsAppAccount,
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../../../extensions/whatsapp/api.js";
export {
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";
export {
listWhatsAppDirectoryGroupsFromConfig,
listWhatsAppDirectoryPeersFromConfig,
} from "../../../extensions/whatsapp/src/directory-config.js";

View File

@ -4,8 +4,12 @@ import type {
DiscordSendEmbeds,
InspectedDiscordAccount,
ResolvedDiscordAccount,
} from "../../extensions/discord/api.js";
ThreadBindingManager,
ThreadBindingRecord,
ThreadBindingTargetKind,
} from "../channels/discord/plugin-sdk-bridge.js";
import {
collectDiscordStatusIssues,
createDiscordActionGate,
inspectDiscordAccount,
listDiscordAccountIds,
@ -17,13 +21,7 @@ import {
resolveDiscordChannelId,
resolveDiscordGroupRequireMention,
resolveDiscordGroupToolPolicy,
collectDiscordStatusIssues,
} from "../../extensions/discord/api.js";
import type {
ThreadBindingManager,
ThreadBindingRecord,
ThreadBindingTargetKind,
} from "../../extensions/discord/runtime-api.js";
} from "../channels/discord/plugin-sdk-bridge.js";
import {
addRoleDiscord,
auditDiscordChannelPermissions,
@ -91,12 +89,10 @@ import {
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";
normalizeExplicitDiscordSessionKey,
} from "../channels/discord/plugin-sdk-bridge.js";
export type {
ChannelAccountSnapshot,

View File

@ -1,9 +1,17 @@
// Public model/catalog helpers for provider plugins.
import type { ModelDefinitionConfig } from "../config/types.models.js";
import {
KILOCODE_DEFAULT_CONTEXT_WINDOW,
KILOCODE_DEFAULT_COST,
KILOCODE_DEFAULT_MAX_TOKENS,
KILOCODE_DEFAULT_MODEL_ID,
KILOCODE_DEFAULT_MODEL_NAME,
} from "../providers/kilocode-shared.js";
import {
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "../../extensions/kimi-coding/provider-catalog.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildMinimaxApiModelDefinition,
buildMinimaxModelDefinition,
@ -15,14 +23,14 @@ import {
MINIMAX_HOSTED_MODEL_ID,
MINIMAX_HOSTED_MODEL_REF,
MINIMAX_LM_STUDIO_COST,
} from "../../extensions/minimax/model-definitions.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildMistralModelDefinition,
MISTRAL_BASE_URL,
MISTRAL_DEFAULT_COST,
MISTRAL_DEFAULT_MODEL_ID,
MISTRAL_DEFAULT_MODEL_REF,
} from "../../extensions/mistral/model-definitions.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
@ -31,24 +39,24 @@ import {
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";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import { MOONSHOT_CN_BASE_URL } from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildMoonshotProvider,
MOONSHOT_BASE_URL,
MOONSHOT_DEFAULT_MODEL_ID,
} from "../../extensions/moonshot/provider-catalog.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
QIANFAN_BASE_URL,
QIANFAN_DEFAULT_MODEL_ID,
} from "../../extensions/qianfan/provider-catalog.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildXaiModelDefinition,
XAI_BASE_URL,
XAI_DEFAULT_COST,
XAI_DEFAULT_MODEL_ID,
XAI_DEFAULT_MODEL_REF,
} from "../../extensions/xai/model-definitions.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
import {
buildZaiModelDefinition,
resolveZaiBaseUrl,
@ -59,15 +67,7 @@ import {
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,
KILOCODE_DEFAULT_COST,
KILOCODE_DEFAULT_MAX_TOKENS,
KILOCODE_DEFAULT_MODEL_ID,
KILOCODE_DEFAULT_MODEL_NAME,
} from "../providers/kilocode-shared.js";
} from "../providers/plugin-sdk-provider-models-bridge.js";
export type { ModelApi, ModelProviderConfig } from "../config/types.models.js";
export type { ModelDefinitionConfig } from "../config/types.models.js";

View File

@ -1,4 +1,8 @@
import type { InspectedSlackAccount, ResolvedSlackAccount } from "../../extensions/slack/api.js";
import type {
InspectedSlackAccount,
ResolvedSlackAccount,
SlackActionContext,
} from "../channels/slack/plugin-sdk-bridge.js";
import {
buildSlackThreadingToolContext,
deleteSlackMessage,
@ -28,8 +32,7 @@ import {
resolveSlackReplyToMode,
sendSlackMessage,
unpinSlackMessage,
} from "../../extensions/slack/api.js";
import type { SlackActionContext } from "../../extensions/slack/runtime-api.js";
} from "../channels/slack/plugin-sdk-bridge.js";
import {
handleSlackAction,
listSlackDirectoryGroupsLive,
@ -39,11 +42,9 @@ import {
resolveSlackChannelAllowlist,
resolveSlackUserAllowlist,
sendMessageSlack,
} from "../../extensions/slack/runtime-api.js";
import {
listSlackDirectoryGroupsFromConfig,
listSlackDirectoryPeersFromConfig,
} from "../../extensions/slack/src/directory-config.js";
} from "../channels/slack/plugin-sdk-bridge.js";
export type { OpenClawConfig } from "../config/config.js";
export type { SlackAccountConfig } from "../config/types.slack.js";

View File

@ -5,7 +5,8 @@ import type {
StickerMetadata,
TelegramButtonStyle,
TelegramInlineButtons,
} from "../../extensions/telegram/api.js";
TelegramProbe,
} from "../channels/telegram/plugin-sdk-bridge.js";
import {
buildBrowseProvidersButton,
buildModelsKeyboard,
@ -35,8 +36,7 @@ import {
searchStickers,
sendTelegramPayloadMessages,
collectTelegramStatusIssues,
} from "../../extensions/telegram/api.js";
import type { TelegramProbe } from "../../extensions/telegram/runtime-api.js";
} from "../channels/telegram/plugin-sdk-bridge.js";
import {
auditTelegramGroupMembership,
collectTelegramUnmentionedGroupIds,
@ -59,11 +59,9 @@ import {
setTelegramThreadBindingMaxAgeBySessionKey,
telegramMessageActions,
unpinMessageTelegram,
} from "../../extensions/telegram/runtime-api.js";
import {
listTelegramDirectoryGroupsFromConfig,
listTelegramDirectoryPeersFromConfig,
} from "../../extensions/telegram/src/directory-config.js";
} from "../channels/telegram/plugin-sdk-bridge.js";
export type {
ChannelAccountSnapshot,

View File

@ -4,13 +4,15 @@ import {
resolveWhatsAppAccount,
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../../extensions/whatsapp/api.js";
listWhatsAppDirectoryGroupsFromConfig,
listWhatsAppDirectoryPeersFromConfig,
} from "../channels/whatsapp/plugin-sdk-bridge.js";
import type {
WebChannelStatus,
WebInboundMessage,
WebListenerCloseReason,
WebMonitorTuning,
} from "../../extensions/whatsapp/runtime-api.js";
} from "../channels/whatsapp/plugin-sdk-bridge.js";
import {
createWhatsAppLoginTool,
createWaSocket,
@ -42,11 +44,7 @@ import {
waitForWaConnection,
WA_WEB_AUTH_DIR,
webAuthExists,
} from "../../extensions/whatsapp/runtime-api.js";
import {
listWhatsAppDirectoryGroupsFromConfig,
listWhatsAppDirectoryPeersFromConfig,
} from "../../extensions/whatsapp/src/directory-config.js";
} from "../channels/whatsapp/plugin-sdk-bridge.js";
export type { ChannelMessageActionName } from "../channels/plugins/types.js";
export type { OpenClawConfig } from "../config/config.js";

View File

@ -0,0 +1,60 @@
export {
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "../../extensions/kimi-coding/provider-catalog.js";
export {
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";
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 { MOONSHOT_CN_BASE_URL } from "../../extensions/moonshot/onboard.js";
export {
buildMoonshotProvider,
MOONSHOT_BASE_URL,
MOONSHOT_DEFAULT_MODEL_ID,
} from "../../extensions/moonshot/provider-catalog.js";
export {
QIANFAN_BASE_URL,
QIANFAN_DEFAULT_MODEL_ID,
} from "../../extensions/qianfan/provider-catalog.js";
export {
buildXaiModelDefinition,
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,
ZAI_DEFAULT_COST,
ZAI_DEFAULT_MODEL_ID,
ZAI_DEFAULT_MODEL_REF,
ZAI_GLOBAL_BASE_URL,
} from "../../extensions/zai/model-definitions.js";