diff --git a/src/agents/pi-embedded-runner/compact.ts b/src/agents/pi-embedded-runner/compact.ts index 908c323c676..41f681f8de5 100644 --- a/src/agents/pi-embedded-runner/compact.ts +++ b/src/agents/pi-embedded-runner/compact.ts @@ -7,9 +7,6 @@ import { estimateTokens, SessionManager, } from "@mariozechner/pi-coding-agent"; -import { resolveSignalReactionLevel } from "../../../extensions/signal/src/reaction-level.js"; -import { resolveTelegramInlineButtonsScope } from "../../../extensions/telegram/src/inline-buttons.js"; -import { resolveTelegramReactionLevel } from "../../../extensions/telegram/src/reaction-level.js"; import { resolveHeartbeatPrompt } from "../../auto-reply/heartbeat.js"; import type { ReasoningLevel, ThinkLevel } from "../../auto-reply/thinking.js"; import { resolveChannelCapabilities } from "../../config/channel-capabilities.js"; @@ -22,6 +19,11 @@ import { createInternalHookEvent, triggerInternalHook } from "../../hooks/intern import { getMachineDisplayName } from "../../infra/machine-name.js"; import { generateSecureToken } from "../../infra/secure-random.js"; import { getMemorySearchManager } from "../../memory/index.js"; +import { resolveSignalReactionLevel } from "../../plugin-sdk/signal.js"; +import { + resolveTelegramInlineButtonsScope, + resolveTelegramReactionLevel, +} from "../../plugin-sdk/telegram.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { prepareProviderRuntimeAuth } from "../../plugins/provider-runtime.js"; import { type enqueueCommand, enqueueCommandInLane } from "../../process/command-queue.js"; diff --git a/src/agents/pi-embedded-runner/run/attempt.ts b/src/agents/pi-embedded-runner/run/attempt.ts index b02e8a59fb8..2194e87f9e0 100644 --- a/src/agents/pi-embedded-runner/run/attempt.ts +++ b/src/agents/pi-embedded-runner/run/attempt.ts @@ -7,9 +7,6 @@ import { DefaultResourceLoader, SessionManager, } from "@mariozechner/pi-coding-agent"; -import { resolveSignalReactionLevel } from "../../../../extensions/signal/src/reaction-level.js"; -import { resolveTelegramInlineButtonsScope } from "../../../../extensions/telegram/src/inline-buttons.js"; -import { resolveTelegramReactionLevel } from "../../../../extensions/telegram/src/reaction-level.js"; import { resolveHeartbeatPrompt } from "../../../auto-reply/heartbeat.js"; import { resolveChannelCapabilities } from "../../../config/channel-capabilities.js"; import type { OpenClawConfig } from "../../../config/config.js"; @@ -19,6 +16,11 @@ import { ensureGlobalUndiciStreamTimeouts, } from "../../../infra/net/undici-global-dispatcher.js"; import { MAX_IMAGE_BYTES } from "../../../media/constants.js"; +import { resolveSignalReactionLevel } from "../../../plugin-sdk/signal.js"; +import { + resolveTelegramInlineButtonsScope, + resolveTelegramReactionLevel, +} from "../../../plugin-sdk/telegram.js"; import { getGlobalHookRunner } from "../../../plugins/hook-runner-global.js"; import type { PluginHookAgentContext, diff --git a/src/agents/pi-embedded-runner/run/images.ts b/src/agents/pi-embedded-runner/run/images.ts index a1899bb99af..193fad8b94e 100644 --- a/src/agents/pi-embedded-runner/run/images.ts +++ b/src/agents/pi-embedded-runner/run/images.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; import type { ImageContent } from "@mariozechner/pi-ai"; -import { loadWebMedia } from "../../../../extensions/whatsapp/src/media.js"; +import { loadWebMedia } from "../../../plugin-sdk/web-media.js"; import { resolveUserPath } from "../../../utils.js"; import type { ImageSanitizationLimits } from "../../image-sanitization.js"; import { diff --git a/src/agents/tools/discord-actions-guild.ts b/src/agents/tools/discord-actions-guild.ts index 6e08c87a276..fa427d87650 100644 --- a/src/agents/tools/discord-actions-guild.ts +++ b/src/agents/tools/discord-actions-guild.ts @@ -1,5 +1,5 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { getPresence } from "../../../extensions/discord/src/monitor/presence-cache.js"; +import type { DiscordActionConfig } from "../../config/config.js"; import { addRoleDiscord, createChannelDiscord, @@ -19,8 +19,8 @@ import { setChannelPermissionDiscord, uploadEmojiDiscord, uploadStickerDiscord, -} from "../../../extensions/discord/src/send.js"; -import type { DiscordActionConfig } from "../../config/config.js"; +} from "../../plugin-sdk/discord.js"; +import { getPresence } from "../../plugin-sdk/discord.js"; import { type ActionGate, jsonResult, diff --git a/src/agents/tools/discord-actions-messaging.ts b/src/agents/tools/discord-actions-messaging.ts index c38f2d7066f..20fdfcc6a02 100644 --- a/src/agents/tools/discord-actions-messaging.ts +++ b/src/agents/tools/discord-actions-messaging.ts @@ -1,5 +1,7 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { readDiscordComponentSpec } from "../../../extensions/discord/src/components.js"; +import type { DiscordActionConfig } from "../../config/config.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import { readBooleanParam } from "../../plugin-sdk/boolean-param.js"; import { createThreadDiscord, deleteMessageDiscord, @@ -21,15 +23,9 @@ import { sendStickerDiscord, sendVoiceMessageDiscord, unpinMessageDiscord, -} from "../../../extensions/discord/src/send.js"; -import type { - DiscordSendComponents, - DiscordSendEmbeds, -} from "../../../extensions/discord/src/send.shared.js"; -import { resolveDiscordChannelId } from "../../../extensions/discord/src/targets.js"; -import type { DiscordActionConfig } from "../../config/config.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import { readBooleanParam } from "../../plugin-sdk/boolean-param.js"; +} from "../../plugin-sdk/discord.js"; +import type { DiscordSendComponents, DiscordSendEmbeds } from "../../plugin-sdk/discord.js"; +import { readDiscordComponentSpec, resolveDiscordChannelId } from "../../plugin-sdk/discord.js"; import { resolvePollMaxSelections } from "../../polls.js"; import { withNormalizedTimestamp } from "../date-time.js"; import { assertMediaNotDataUrl } from "../sandbox-paths.js"; diff --git a/src/agents/tools/discord-actions-moderation.ts b/src/agents/tools/discord-actions-moderation.ts index 68db19d1d7f..56d7a80d4c9 100644 --- a/src/agents/tools/discord-actions-moderation.ts +++ b/src/agents/tools/discord-actions-moderation.ts @@ -1,11 +1,11 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; +import type { DiscordActionConfig } from "../../config/config.js"; import { banMemberDiscord, hasAnyGuildPermissionDiscord, kickMemberDiscord, timeoutMemberDiscord, -} from "../../../extensions/discord/src/send.js"; -import type { DiscordActionConfig } from "../../config/config.js"; +} from "../../plugin-sdk/discord.js"; import { type ActionGate, jsonResult, readStringParam } from "./common.js"; import { isDiscordModerationAction, diff --git a/src/agents/tools/discord-actions-presence.ts b/src/agents/tools/discord-actions-presence.ts index 46f476bafec..53c42829bb0 100644 --- a/src/agents/tools/discord-actions-presence.ts +++ b/src/agents/tools/discord-actions-presence.ts @@ -1,7 +1,7 @@ import type { Activity, UpdatePresenceData } from "@buape/carbon/gateway"; import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { getGateway } from "../../../extensions/discord/src/monitor/gateway-registry.js"; import type { DiscordActionConfig } from "../../config/config.js"; +import { getGateway } from "../../plugin-sdk/discord.js"; import { type ActionGate, jsonResult, readStringParam } from "./common.js"; const ACTIVITY_TYPE_MAP: Record = { diff --git a/src/agents/tools/discord-actions.ts b/src/agents/tools/discord-actions.ts index 9b1c57bb240..b953e56cffd 100644 --- a/src/agents/tools/discord-actions.ts +++ b/src/agents/tools/discord-actions.ts @@ -1,6 +1,6 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { createDiscordActionGate } from "../../../extensions/discord/src/accounts.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { createDiscordActionGate } from "../../plugin-sdk/discord.js"; import { readStringParam } from "./common.js"; import { handleDiscordGuildAction } from "./discord-actions-guild.js"; import { handleDiscordMessagingAction } from "./discord-actions-messaging.js"; diff --git a/src/agents/tools/image-tool.ts b/src/agents/tools/image-tool.ts index 4a50263cada..402ee0b3eda 100644 --- a/src/agents/tools/image-tool.ts +++ b/src/agents/tools/image-tool.ts @@ -1,7 +1,7 @@ import { type Context, complete } from "@mariozechner/pi-ai"; import { Type } from "@sinclair/typebox"; -import { loadWebMedia } from "../../../extensions/whatsapp/src/media.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { loadWebMedia } from "../../plugin-sdk/web-media.js"; import { resolveUserPath } from "../../utils.js"; import { isMinimaxVlmModel, isMinimaxVlmProvider, minimaxUnderstandImage } from "../minimax-vlm.js"; import { diff --git a/src/agents/tools/media-tool-shared.ts b/src/agents/tools/media-tool-shared.ts index 8ad943a4b91..56f4a92ca97 100644 --- a/src/agents/tools/media-tool-shared.ts +++ b/src/agents/tools/media-tool-shared.ts @@ -1,6 +1,6 @@ import { type Api, type Model } from "@mariozechner/pi-ai"; -import { getDefaultLocalRoots } from "../../../extensions/whatsapp/src/media.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { getDefaultLocalRoots } from "../../plugin-sdk/web-media.js"; import type { ImageModelConfig } from "./image-tool.helpers.js"; import { getApiKeyForModel, normalizeWorkspaceDir, requireApiKey } from "./tool-runtime.helpers.js"; diff --git a/src/agents/tools/pdf-tool.ts b/src/agents/tools/pdf-tool.ts index 8f229dd7b10..c20bec5936a 100644 --- a/src/agents/tools/pdf-tool.ts +++ b/src/agents/tools/pdf-tool.ts @@ -1,8 +1,8 @@ import { type Context, complete } from "@mariozechner/pi-ai"; import { Type } from "@sinclair/typebox"; -import { loadWebMediaRaw } from "../../../extensions/whatsapp/src/media.js"; import type { OpenClawConfig } from "../../config/config.js"; import { extractPdfContent, type PdfExtractedContent } from "../../media/pdf-extract.js"; +import { loadWebMediaRaw } from "../../plugin-sdk/web-media.js"; import { resolveUserPath } from "../../utils.js"; import { coerceImageModelConfig, diff --git a/src/agents/tools/slack-actions.ts b/src/agents/tools/slack-actions.ts index 5ed58d5960f..e9089cbfdcc 100644 --- a/src/agents/tools/slack-actions.ts +++ b/src/agents/tools/slack-actions.ts @@ -1,5 +1,5 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { resolveSlackAccount } from "../../../extensions/slack/src/accounts.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { deleteSlackMessage, downloadSlackFile, @@ -15,11 +15,14 @@ import { removeSlackReaction, sendSlackMessage, unpinSlackMessage, -} from "../../../extensions/slack/src/actions.js"; -import { parseSlackBlocksInput } from "../../../extensions/slack/src/blocks-input.js"; -import { recordSlackThreadParticipation } from "../../../extensions/slack/src/sent-thread-cache.js"; -import { parseSlackTarget, resolveSlackChannelId } from "../../../extensions/slack/src/targets.js"; -import type { OpenClawConfig } from "../../config/config.js"; +} from "../../plugin-sdk/slack.js"; +import { + parseSlackBlocksInput, + parseSlackTarget, + recordSlackThreadParticipation, + resolveSlackAccount, + resolveSlackChannelId, +} from "../../plugin-sdk/slack.js"; import { withNormalizedTimestamp } from "../date-time.js"; import { createActionGate, diff --git a/src/agents/tools/telegram-actions.ts b/src/agents/tools/telegram-actions.ts index ccfc9d5ae13..d648b1e5f41 100644 --- a/src/agents/tools/telegram-actions.ts +++ b/src/agents/tools/telegram-actions.ts @@ -1,17 +1,15 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; +import type { OpenClawConfig } from "../../config/config.js"; +import { readBooleanParam } from "../../plugin-sdk/boolean-param.js"; import { createTelegramActionGate, resolveTelegramPollActionGateState, -} from "../../../extensions/telegram/src/accounts.js"; -import type { - TelegramButtonStyle, - TelegramInlineButtons, -} from "../../../extensions/telegram/src/button-types.js"; +} from "../../plugin-sdk/telegram.js"; +import type { TelegramButtonStyle, TelegramInlineButtons } from "../../plugin-sdk/telegram.js"; import { resolveTelegramInlineButtonsScope, resolveTelegramTargetChatType, -} from "../../../extensions/telegram/src/inline-buttons.js"; -import { resolveTelegramReactionLevel } from "../../../extensions/telegram/src/reaction-level.js"; +} from "../../plugin-sdk/telegram.js"; import { createForumTopicTelegram, deleteMessageTelegram, @@ -21,11 +19,13 @@ import { sendMessageTelegram, sendPollTelegram, sendStickerTelegram, -} from "../../../extensions/telegram/src/send.js"; -import { getCacheStats, searchStickers } from "../../../extensions/telegram/src/sticker-cache.js"; -import { resolveTelegramToken } from "../../../extensions/telegram/src/token.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import { readBooleanParam } from "../../plugin-sdk/boolean-param.js"; +} from "../../plugin-sdk/telegram.js"; +import { + getCacheStats, + resolveTelegramReactionLevel, + resolveTelegramToken, + searchStickers, +} from "../../plugin-sdk/telegram.js"; import { resolvePollMaxSelections } from "../../polls.js"; import { jsonResult, diff --git a/src/agents/tools/whatsapp-actions.ts b/src/agents/tools/whatsapp-actions.ts index 92332d1b3c5..a84dc0a3d5b 100644 --- a/src/agents/tools/whatsapp-actions.ts +++ b/src/agents/tools/whatsapp-actions.ts @@ -1,6 +1,6 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import { sendReactionWhatsApp } from "../../../extensions/whatsapp/src/send.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { sendReactionWhatsApp } from "../../plugin-sdk/whatsapp.js"; import { createActionGate, jsonResult, readReactionParams, readStringParam } from "./common.js"; import { resolveAuthorizedWhatsAppOutboundTarget } from "./whatsapp-target-auth.js"; diff --git a/src/agents/tools/whatsapp-target-auth.ts b/src/agents/tools/whatsapp-target-auth.ts index 569a930d1a5..edc0052fbab 100644 --- a/src/agents/tools/whatsapp-target-auth.ts +++ b/src/agents/tools/whatsapp-target-auth.ts @@ -1,5 +1,5 @@ -import { resolveWhatsAppAccount } from "../../../extensions/whatsapp/src/accounts.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { resolveWhatsAppAccount } from "../../plugin-sdk/whatsapp.js"; import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; import { ToolAuthorizationError } from "./common.js"; diff --git a/src/channel-web.ts b/src/channel-web.ts index 99e36ef67bc..e6df4bda0d7 100644 --- a/src/channel-web.ts +++ b/src/channel-web.ts @@ -7,19 +7,11 @@ export { monitorWebChannel, resolveHeartbeatRecipients, runWebHeartbeatOnce, - type WebChannelStatus, - type WebMonitorTuning, -} from "../extensions/whatsapp/src/auto-reply.js"; -export { - extractMediaPlaceholder, - extractText, - monitorWebInbox, - type WebInboundMessage, - type WebListenerCloseReason, -} from "../extensions/whatsapp/src/inbound.js"; -export { loginWeb } from "../extensions/whatsapp/src/login.js"; -export { loadWebMedia, optimizeImageToJpeg } from "../extensions/whatsapp/src/media.js"; -export { sendMessageWhatsApp } from "../extensions/whatsapp/src/send.js"; +} from "./plugin-sdk/whatsapp.js"; +export { extractMediaPlaceholder, extractText, monitorWebInbox } from "./plugin-sdk/whatsapp.js"; +export { loginWeb } from "./plugin-sdk/whatsapp.js"; +export { loadWebMedia, optimizeImageToJpeg } from "./plugin-sdk/whatsapp.js"; +export { sendMessageWhatsApp } from "./plugin-sdk/whatsapp.js"; export { createWaSocket, formatError, @@ -30,4 +22,4 @@ export { WA_WEB_AUTH_DIR, waitForWaConnection, webAuthExists, -} from "../extensions/whatsapp/src/session.js"; +} from "./plugin-sdk/whatsapp.js"; diff --git a/src/channels/plugins/actions/discord.ts b/src/channels/plugins/actions/discord.ts index ccf1b489035..4615a88f3c5 100644 --- a/src/channels/plugins/actions/discord.ts +++ b/src/channels/plugins/actions/discord.ts @@ -1,2 +1,2 @@ // Public entrypoint for the Discord channel action adapter. -export * from "../../../../extensions/discord/src/channel-actions.js"; +export * from "../../../plugin-sdk/discord.js"; diff --git a/src/channels/plugins/actions/telegram.ts b/src/channels/plugins/actions/telegram.ts index 7961baf334f..e811e757b94 100644 --- a/src/channels/plugins/actions/telegram.ts +++ b/src/channels/plugins/actions/telegram.ts @@ -1,2 +1,2 @@ // Public entrypoint for the Telegram channel action adapter. -export * from "../../../../extensions/telegram/src/channel-actions.js"; +export * from "../../../plugin-sdk/telegram.js"; diff --git a/src/channels/plugins/agent-tools/whatsapp-login.ts b/src/channels/plugins/agent-tools/whatsapp-login.ts index 741b40a6fc9..2204225bdda 100644 --- a/src/channels/plugins/agent-tools/whatsapp-login.ts +++ b/src/channels/plugins/agent-tools/whatsapp-login.ts @@ -1,2 +1,2 @@ -// Shim: re-exports from extensions/whatsapp/src/agent-tools-login.ts -export * from "../../../../extensions/whatsapp/src/agent-tools-login.js"; +// Shim: keep legacy import path while the runtime loads the plugin SDK surface. +export * from "../../../plugin-sdk/whatsapp.js"; diff --git a/src/channels/read-only-account-inspect.discord.runtime.ts b/src/channels/read-only-account-inspect.discord.runtime.ts index aed3283b7a2..9d2ac6ef427 100644 --- a/src/channels/read-only-account-inspect.discord.runtime.ts +++ b/src/channels/read-only-account-inspect.discord.runtime.ts @@ -1,4 +1,2 @@ -export { - inspectDiscordAccount, - type InspectedDiscordAccount, -} from "../../extensions/discord/src/account-inspect.js"; +export { inspectDiscordAccount } from "../plugin-sdk/discord.js"; +export type { InspectedDiscordAccount } from "../plugin-sdk/discord.js"; diff --git a/src/channels/read-only-account-inspect.slack.runtime.ts b/src/channels/read-only-account-inspect.slack.runtime.ts index 6d0e0a10b29..a7526e2ea95 100644 --- a/src/channels/read-only-account-inspect.slack.runtime.ts +++ b/src/channels/read-only-account-inspect.slack.runtime.ts @@ -1,4 +1,2 @@ -export { - inspectSlackAccount, - type InspectedSlackAccount, -} from "../../extensions/slack/src/account-inspect.js"; +export { inspectSlackAccount } from "../plugin-sdk/slack.js"; +export type { InspectedSlackAccount } from "../plugin-sdk/slack.js"; diff --git a/src/channels/read-only-account-inspect.telegram.runtime.ts b/src/channels/read-only-account-inspect.telegram.runtime.ts index 07866b9d450..0ab48f2c241 100644 --- a/src/channels/read-only-account-inspect.telegram.runtime.ts +++ b/src/channels/read-only-account-inspect.telegram.runtime.ts @@ -1,4 +1,2 @@ -export { - inspectTelegramAccount, - type InspectedTelegramAccount, -} from "../../extensions/telegram/src/account-inspect.js"; +export { inspectTelegramAccount } from "../plugin-sdk/telegram.js"; +export type { InspectedTelegramAccount } from "../plugin-sdk/telegram.js"; diff --git a/src/cli/deps.test.ts b/src/cli/deps.test.ts index f345e1a24bb..64b66313907 100644 --- a/src/cli/deps.test.ts +++ b/src/cli/deps.test.ts @@ -19,32 +19,32 @@ const sendFns = vi.hoisted(() => ({ imessage: vi.fn(async () => ({ messageId: "i1", chatId: "imessage:1" })), })); -vi.mock("../channels/web/index.js", () => { +vi.mock("../plugin-sdk/whatsapp.js", () => { moduleLoads.whatsapp(); return { sendMessageWhatsApp: sendFns.whatsapp }; }); -vi.mock("../../extensions/telegram/src/send.js", () => { +vi.mock("../plugin-sdk/telegram.js", () => { moduleLoads.telegram(); return { sendMessageTelegram: sendFns.telegram }; }); -vi.mock("../../extensions/discord/src/send.js", () => { +vi.mock("../plugin-sdk/discord.js", () => { moduleLoads.discord(); return { sendMessageDiscord: sendFns.discord }; }); -vi.mock("../../extensions/slack/src/send.js", () => { +vi.mock("../plugin-sdk/slack.js", () => { moduleLoads.slack(); return { sendMessageSlack: sendFns.slack }; }); -vi.mock("../../extensions/signal/src/send.js", () => { +vi.mock("../plugin-sdk/signal.js", () => { moduleLoads.signal(); return { sendMessageSignal: sendFns.signal }; }); -vi.mock("../../extensions/imessage/src/send.js", () => { +vi.mock("../plugin-sdk/imessage.js", () => { moduleLoads.imessage(); return { sendMessageIMessage: sendFns.imessage }; }); diff --git a/src/cli/deps.ts b/src/cli/deps.ts index c9ab341dd18..7ebfbf74f5b 100644 --- a/src/cli/deps.ts +++ b/src/cli/deps.ts @@ -35,32 +35,32 @@ export function createDefaultDeps(): CliDeps { return { whatsapp: createLazySender( "whatsapp", - () => import("../channels/web/index.js") as Promise>, + () => import("../plugin-sdk/whatsapp.js") as Promise>, "sendMessageWhatsApp", ), telegram: createLazySender( "telegram", - () => import("../../extensions/telegram/src/send.js") as Promise>, + () => import("../plugin-sdk/telegram.js") as Promise>, "sendMessageTelegram", ), discord: createLazySender( "discord", - () => import("../../extensions/discord/src/send.js") as Promise>, + () => import("../plugin-sdk/discord.js") as Promise>, "sendMessageDiscord", ), slack: createLazySender( "slack", - () => import("../../extensions/slack/src/send.js") as Promise>, + () => import("../plugin-sdk/slack.js") as Promise>, "sendMessageSlack", ), signal: createLazySender( "signal", - () => import("../../extensions/signal/src/send.js") as Promise>, + () => import("../plugin-sdk/signal.js") as Promise>, "sendMessageSignal", ), imessage: createLazySender( "imessage", - () => import("../../extensions/imessage/src/send.js") as Promise>, + () => import("../plugin-sdk/imessage.js") as Promise>, "sendMessageIMessage", ), }; @@ -70,4 +70,4 @@ export function createOutboundSendDeps(deps: CliDeps): OutboundSendDeps { return createOutboundSendDepsFromCliSource(deps); } -export { logWebSelfId } from "../../extensions/whatsapp/src/auth-store.js"; +export { logWebSelfId } from "../plugin-sdk/whatsapp.js"; diff --git a/src/gateway/server-http.ts b/src/gateway/server-http.ts index 75af96dd545..0ad655f4990 100644 --- a/src/gateway/server-http.ts +++ b/src/gateway/server-http.ts @@ -8,12 +8,12 @@ import { import { createServer as createHttpsServer } from "node:https"; import type { TlsOptions } from "node:tls"; import type { WebSocketServer } from "ws"; -import { handleSlackHttpRequest } from "../../extensions/slack/src/http/index.js"; import { resolveAgentAvatar } from "../agents/identity-avatar.js"; import { CANVAS_WS_PATH, handleA2uiHttpRequest } from "../canvas-host/a2ui.js"; import type { CanvasHostHandler } from "../canvas-host/server.js"; import { loadConfig } from "../config/config.js"; import type { createSubsystemLogger } from "../logging/subsystem.js"; +import { handleSlackHttpRequest } from "../plugin-sdk/slack.js"; import { safeEqualSecret } from "../security/secret-equal.js"; import { AUTH_RATE_LIMIT_SCOPE_HOOK_AUTH, diff --git a/src/plugin-sdk/discord.ts b/src/plugin-sdk/discord.ts index d9e40370d23..d89f768071b 100644 --- a/src/plugin-sdk/discord.ts +++ b/src/plugin-sdk/discord.ts @@ -3,9 +3,14 @@ export type { OpenClawConfig } from "../config/config.js"; export type { DiscordAccountConfig, DiscordActionConfig } from "../config/types.js"; export type { InspectedDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; export type { ResolvedDiscordAccount } from "../../extensions/discord/src/accounts.js"; +export type { + DiscordSendComponents, + DiscordSendEmbeds, +} from "../../extensions/discord/src/send.shared.js"; export * from "./channel-plugin-common.js"; export { + createDiscordActionGate, listDiscordAccountIds, resolveDefaultDiscordAccountId, resolveDiscordAccount, @@ -50,6 +55,55 @@ export { listThreadBindingsBySessionKey, unbindThreadBindingsBySessionKey, } from "../../extensions/discord/src/monitor/thread-bindings.js"; +export { getGateway } from "../../extensions/discord/src/monitor/gateway-registry.js"; +export { getPresence } from "../../extensions/discord/src/monitor/presence-cache.js"; +export { readDiscordComponentSpec } from "../../extensions/discord/src/components.js"; +export { resolveDiscordChannelId } from "../../extensions/discord/src/targets.js"; +export { + addRoleDiscord, + banMemberDiscord, + createChannelDiscord, + createScheduledEventDiscord, + createThreadDiscord, + deleteChannelDiscord, + deleteMessageDiscord, + editChannelDiscord, + editMessageDiscord, + fetchChannelInfoDiscord, + fetchChannelPermissionsDiscord, + fetchMemberInfoDiscord, + fetchMessageDiscord, + fetchReactionsDiscord, + fetchRoleInfoDiscord, + fetchVoiceStatusDiscord, + hasAnyGuildPermissionDiscord, + kickMemberDiscord, + listGuildChannelsDiscord, + listGuildEmojisDiscord, + listPinsDiscord, + listScheduledEventsDiscord, + listThreadsDiscord, + moveChannelDiscord, + pinMessageDiscord, + reactMessageDiscord, + readMessagesDiscord, + removeChannelPermissionDiscord, + removeOwnReactionsDiscord, + removeReactionDiscord, + removeRoleDiscord, + searchMessagesDiscord, + sendDiscordComponentMessage, + sendMessageDiscord, + sendPollDiscord, + sendStickerDiscord, + sendVoiceMessageDiscord, + setChannelPermissionDiscord, + timeoutMemberDiscord, + unpinMessageDiscord, + uploadEmojiDiscord, + uploadStickerDiscord, +} from "../../extensions/discord/src/send.js"; +export { discordMessageActions } from "../../extensions/discord/src/channel-actions.js"; export type { ThreadBindingManager, ThreadBindingRecord, diff --git a/src/plugin-sdk/imessage.ts b/src/plugin-sdk/imessage.ts index a3a42f110ee..0fe2e278d40 100644 --- a/src/plugin-sdk/imessage.ts +++ b/src/plugin-sdk/imessage.ts @@ -28,6 +28,7 @@ export type { ChatSenderAllowParams, ParsedChatTarget, } from "../../extensions/imessage/src/target-parsing-helpers.js"; +export { sendMessageIMessage } from "../../extensions/imessage/src/send.js"; export { resolveAllowlistProviderRuntimeGroupPolicy, diff --git a/src/plugin-sdk/signal.ts b/src/plugin-sdk/signal.ts index b407e944e47..3683115143e 100644 --- a/src/plugin-sdk/signal.ts +++ b/src/plugin-sdk/signal.ts @@ -13,6 +13,7 @@ export { removeReactionSignal, sendReactionSignal, } from "../../extensions/signal/src/send-reactions.js"; +export { sendMessageSignal } from "../../extensions/signal/src/send.js"; export { looksLikeSignalTargetId, normalizeSignalMessagingTarget, diff --git a/src/plugin-sdk/slack.ts b/src/plugin-sdk/slack.ts index 0cbfd236274..8ac3915ec31 100644 --- a/src/plugin-sdk/slack.ts +++ b/src/plugin-sdk/slack.ts @@ -31,6 +31,26 @@ export { listSlackMessageActions, } from "../../extensions/slack/src/message-actions.js"; export { buildSlackThreadingToolContext } from "../../extensions/slack/src/threading-tool-context.js"; +export { parseSlackBlocksInput } from "../../extensions/slack/src/blocks-input.js"; +export { handleSlackHttpRequest } from "../../extensions/slack/src/http/index.js"; +export { sendMessageSlack } from "../../extensions/slack/src/send.js"; +export { + deleteSlackMessage, + downloadSlackFile, + editSlackMessage, + getSlackMemberInfo, + listSlackEmojis, + listSlackPins, + listSlackReactions, + pinSlackMessage, + reactSlackMessage, + readSlackMessages, + removeOwnSlackReactions, + removeSlackReaction, + sendSlackMessage, + unpinSlackMessage, +} from "../../extensions/slack/src/actions.js"; +export { recordSlackThreadParticipation } from "../../extensions/slack/src/sent-thread-cache.js"; export { buildComputedAccountStatusSnapshot } from "./status-helpers.js"; export { diff --git a/src/plugin-sdk/telegram.ts b/src/plugin-sdk/telegram.ts index 2db97fb74b5..52d0269f712 100644 --- a/src/plugin-sdk/telegram.ts +++ b/src/plugin-sdk/telegram.ts @@ -11,6 +11,10 @@ export type { TelegramAccountConfig, TelegramActionConfig } from "../config/type export type { InspectedTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; export type { ResolvedTelegramAccount } from "../../extensions/telegram/src/accounts.js"; export type { TelegramProbe } from "../../extensions/telegram/src/probe.js"; +export type { + TelegramButtonStyle, + TelegramInlineButtons, +} from "../../extensions/telegram/src/button-types.js"; export { emptyPluginConfigSchema } from "../plugins/config-schema.js"; @@ -32,8 +36,10 @@ export { PAIRING_APPROVED_MESSAGE } from "../channels/plugins/pairing-message.js export { getChatChannelMeta } from "../channels/registry.js"; export { + createTelegramActionGate, listTelegramAccountIds, resolveDefaultTelegramAccountId, + resolveTelegramPollActionGateState, resolveTelegramAccount, } from "../../extensions/telegram/src/accounts.js"; export { inspectTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; @@ -58,6 +64,24 @@ export { normalizeTelegramAllowFromEntry, } from "../../extensions/telegram/src/allow-from.js"; export { fetchTelegramChatId } from "../../extensions/telegram/src/api-fetch.js"; +export { + resolveTelegramInlineButtonsScope, + resolveTelegramTargetChatType, +} from "../../extensions/telegram/src/inline-buttons.js"; +export { resolveTelegramReactionLevel } from "../../extensions/telegram/src/reaction-level.js"; +export { + createForumTopicTelegram, + deleteMessageTelegram, + editForumTopicTelegram, + editMessageTelegram, + reactMessageTelegram, + sendMessageTelegram, + sendPollTelegram, + sendStickerTelegram, +} from "../../extensions/telegram/src/send.js"; +export { getCacheStats, searchStickers } from "../../extensions/telegram/src/sticker-cache.js"; +export { resolveTelegramToken } from "../../extensions/telegram/src/token.js"; +export { telegramMessageActions } from "../../extensions/telegram/src/channel-actions.js"; export { collectTelegramStatusIssues } from "../../extensions/telegram/src/status-issues.js"; export { sendTelegramPayloadMessages } from "../../extensions/telegram/src/outbound-adapter.js"; export { diff --git a/src/plugin-sdk/web-media.ts b/src/plugin-sdk/web-media.ts index 02194b867b2..1c7432ad2b5 100644 --- a/src/plugin-sdk/web-media.ts +++ b/src/plugin-sdk/web-media.ts @@ -1 +1,6 @@ -export { loadWebMedia, type WebMediaResult } from "../../extensions/whatsapp/src/media.js"; +export { + getDefaultLocalRoots, + loadWebMedia, + loadWebMediaRaw, + type WebMediaResult, +} from "../../extensions/whatsapp/src/media.js"; diff --git a/src/plugin-sdk/whatsapp.ts b/src/plugin-sdk/whatsapp.ts index 759a56b080e..56db52bfc13 100644 --- a/src/plugin-sdk/whatsapp.ts +++ b/src/plugin-sdk/whatsapp.ts @@ -31,6 +31,53 @@ export { listEnabledWhatsAppAccounts, resolveWhatsAppAccount, } from "../../extensions/whatsapp/src/accounts.js"; +export { + WA_WEB_AUTH_DIR, + logWebSelfId, + logoutWeb, + pickWebChannel, + webAuthExists, +} from "../../extensions/whatsapp/src/auth-store.js"; +export { + DEFAULT_WEB_MEDIA_BYTES, + HEARTBEAT_PROMPT, + HEARTBEAT_TOKEN, + monitorWebChannel, + resolveHeartbeatRecipients, + runWebHeartbeatOnce, +} from "../../extensions/whatsapp/src/auto-reply.js"; +export type { + WebChannelStatus, + WebMonitorTuning, +} from "../../extensions/whatsapp/src/auto-reply.js"; +export { + extractMediaPlaceholder, + extractText, + monitorWebInbox, +} from "../../extensions/whatsapp/src/inbound.js"; +export type { + WebInboundMessage, + WebListenerCloseReason, +} from "../../extensions/whatsapp/src/inbound.js"; +export { loginWeb } from "../../extensions/whatsapp/src/login.js"; +export { + getDefaultLocalRoots, + loadWebMedia, + loadWebMediaRaw, + optimizeImageToJpeg, +} from "../../extensions/whatsapp/src/media.js"; +export { + sendMessageWhatsApp, + sendPollWhatsApp, + sendReactionWhatsApp, +} from "../../extensions/whatsapp/src/send.js"; +export { + createWaSocket, + formatError, + getStatusCode, + waitForWaConnection, +} from "../../extensions/whatsapp/src/session.js"; +export { createWhatsAppLoginTool } from "../../extensions/whatsapp/src/agent-tools-login.js"; export { normalizeWhatsAppAllowFromEntries } from "../channels/plugins/normalize/whatsapp.js"; export { collectAllowlistProviderGroupPolicyWarnings,