Compare commits
14 Commits
main
...
codex/arch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
342d16404e | ||
|
|
4390533672 | ||
|
|
347610d1c7 | ||
|
|
4aca379dc5 | ||
|
|
beab2a6d00 | ||
|
|
2ae1dcf32b | ||
|
|
d4513b96f9 | ||
|
|
b744aaccf3 | ||
|
|
679271f757 | ||
|
|
713ab753c2 | ||
|
|
841b2ca07d | ||
|
|
c9697fdd07 | ||
|
|
8e219caca8 | ||
|
|
f98f2e2127 |
1
extensions/discord/account-api.ts
Normal file
1
extensions/discord/account-api.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from "./src/accounts.js";
|
||||
@ -3,6 +3,7 @@ export * from "./src/accounts.js";
|
||||
export * from "./src/actions/handle-action.guild-admin.js";
|
||||
export * from "./src/actions/handle-action.js";
|
||||
export * from "./src/components.js";
|
||||
export * from "./src/directory-config.js";
|
||||
export * from "./src/group-policy.js";
|
||||
export * from "./src/normalize.js";
|
||||
export * from "./src/pluralkit.js";
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import {
|
||||
createAccountActionGate,
|
||||
createAccountListHelpers,
|
||||
normalizeAccountId,
|
||||
resolveAccountEntry,
|
||||
type OpenClawConfig,
|
||||
type DiscordAccountConfig,
|
||||
type DiscordActionConfig,
|
||||
} from "./runtime-api.js";
|
||||
import { createAccountActionGate } from "openclaw/plugin-sdk/account-action-gate";
|
||||
import { createAccountListHelpers } from "openclaw/plugin-sdk/account-helpers";
|
||||
import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
||||
import type {
|
||||
DiscordAccountConfig,
|
||||
DiscordActionConfig,
|
||||
OpenClawConfig,
|
||||
} from "openclaw/plugin-sdk/discord-core";
|
||||
import { resolveAccountEntry } from "openclaw/plugin-sdk/routing";
|
||||
import { resolveDiscordToken } from "./token.js";
|
||||
|
||||
export type ResolvedDiscordAccount = {
|
||||
|
||||
@ -1 +1,7 @@
|
||||
export * from "./src/accounts.js";
|
||||
export * from "./src/message-actions.js";
|
||||
export * from "./src/monitor.js";
|
||||
export * from "./src/probe.js";
|
||||
export * from "./src/reaction-level.js";
|
||||
export * from "./src/send-reactions.js";
|
||||
export * from "./src/send.js";
|
||||
|
||||
@ -3,6 +3,7 @@ export * from "./src/accounts.js";
|
||||
export * from "./src/actions.js";
|
||||
export * from "./src/blocks-input.js";
|
||||
export * from "./src/blocks-render.js";
|
||||
export * from "./src/directory-config.js";
|
||||
export * from "./src/http/index.js";
|
||||
export * from "./src/interactive-replies.js";
|
||||
export * from "./src/message-actions.js";
|
||||
|
||||
@ -2,6 +2,7 @@ export * from "./src/account-inspect.js";
|
||||
export * from "./src/accounts.js";
|
||||
export * from "./src/allow-from.js";
|
||||
export * from "./src/api-fetch.js";
|
||||
export * from "./src/directory-config.js";
|
||||
export * from "./src/exec-approvals.js";
|
||||
export * from "./src/group-policy.js";
|
||||
export * from "./src/inline-buttons.js";
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
export * from "./src/accounts.js";
|
||||
export * from "./src/directory-config.js";
|
||||
export * from "./src/group-policy.js";
|
||||
export { resolveWhatsAppGroupIntroHint } from "openclaw/plugin-sdk/whatsapp-core";
|
||||
|
||||
@ -362,6 +362,10 @@
|
||||
"types": "./dist/plugin-sdk/zalouser.d.ts",
|
||||
"default": "./dist/plugin-sdk/zalouser.js"
|
||||
},
|
||||
"./plugin-sdk/account-action-gate": {
|
||||
"types": "./dist/plugin-sdk/account-action-gate.d.ts",
|
||||
"default": "./dist/plugin-sdk/account-action-gate.js"
|
||||
},
|
||||
"./plugin-sdk/account-helpers": {
|
||||
"types": "./dist/plugin-sdk/account-helpers.d.ts",
|
||||
"default": "./dist/plugin-sdk/account-helpers.js"
|
||||
|
||||
@ -80,6 +80,7 @@
|
||||
"voice-call",
|
||||
"zalo",
|
||||
"zalouser",
|
||||
"account-action-gate",
|
||||
"account-helpers",
|
||||
"account-id",
|
||||
"account-resolution",
|
||||
|
||||
4
src/channels/bluebubbles/plugin-sdk-bridge.ts
Normal file
4
src/channels/bluebubbles/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export {
|
||||
resolveBlueBubblesGroupRequireMention,
|
||||
resolveBlueBubblesGroupToolPolicy,
|
||||
} from "../../../extensions/bluebubbles/runtime-api.js";
|
||||
5
src/channels/feishu/plugin-sdk-bridge.ts
Normal file
5
src/channels/feishu/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export { feishuSetupAdapter, feishuSetupWizard } from "../../../extensions/feishu/setup-api.js";
|
||||
export {
|
||||
buildFeishuConversationId,
|
||||
parseFeishuConversationId,
|
||||
} from "../../../extensions/feishu/api.js";
|
||||
8
src/channels/imessage/api-bridge.ts
Normal file
8
src/channels/imessage/api-bridge.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export { normalizeIMessageHandle } from "../../../extensions/imessage/api.js";
|
||||
export type { ParsedChatTarget } from "../../../extensions/imessage/api.js";
|
||||
export {
|
||||
parseChatAllowTargetPrefixes,
|
||||
parseChatTargetPrefixesOrThrow,
|
||||
resolveServicePrefixedAllowTarget,
|
||||
resolveServicePrefixedTarget,
|
||||
} from "../../../extensions/imessage/api.js";
|
||||
9
src/channels/imessage/plugin-sdk-bridge.ts
Normal file
9
src/channels/imessage/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,9 @@
|
||||
export {
|
||||
monitorIMessageProvider,
|
||||
probeIMessage,
|
||||
sendMessageIMessage,
|
||||
} from "../../../extensions/imessage/runtime-api.js";
|
||||
export {
|
||||
resolveIMessageGroupRequireMention,
|
||||
resolveIMessageGroupToolPolicy,
|
||||
} from "../../../extensions/imessage/api.js";
|
||||
7
src/channels/irc/plugin-sdk-bridge.ts
Normal file
7
src/channels/irc/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export {
|
||||
ircSetupAdapter,
|
||||
ircSetupWizard,
|
||||
listIrcAccountIds,
|
||||
resolveDefaultIrcAccountId,
|
||||
resolveIrcAccount,
|
||||
} from "../../../extensions/irc/api.js";
|
||||
1
src/channels/line/plugin-sdk-bridge.ts
Normal file
1
src/channels/line/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1 @@
|
||||
export { lineSetupAdapter, lineSetupWizard } from "../../../extensions/line/setup-api.js";
|
||||
15
src/channels/signal/plugin-sdk-bridge.ts
Normal file
15
src/channels/signal/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,15 @@
|
||||
export type { ResolvedSignalAccount } from "../../../extensions/signal/api.js";
|
||||
|
||||
export {
|
||||
listEnabledSignalAccounts,
|
||||
listSignalAccountIds,
|
||||
monitorSignalProvider,
|
||||
probeSignal,
|
||||
removeReactionSignal,
|
||||
resolveDefaultSignalAccountId,
|
||||
resolveSignalReactionLevel,
|
||||
resolveSignalAccount,
|
||||
sendMessageSignal,
|
||||
sendReactionSignal,
|
||||
signalMessageActions,
|
||||
} from "../../../extensions/signal/api.js";
|
||||
51
src/channels/slack/plugin-sdk-bridge.ts
Normal file
51
src/channels/slack/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,51 @@
|
||||
export type { InspectedSlackAccount, ResolvedSlackAccount } from "../../../extensions/slack/api.js";
|
||||
export type { SlackActionContext } from "../../../extensions/slack/runtime-api.js";
|
||||
export type { SlackTarget, SlackTargetKind } from "../../../extensions/slack/api.js";
|
||||
|
||||
export {
|
||||
buildSlackThreadingToolContext,
|
||||
deleteSlackMessage,
|
||||
downloadSlackFile,
|
||||
editSlackMessage,
|
||||
extractSlackToolSend,
|
||||
getSlackMemberInfo,
|
||||
handleSlackHttpRequest,
|
||||
inspectSlackAccount,
|
||||
isSlackInteractiveRepliesEnabled,
|
||||
listEnabledSlackAccounts,
|
||||
listSlackAccountIds,
|
||||
listSlackEmojis,
|
||||
listSlackMessageActions,
|
||||
listSlackPins,
|
||||
listSlackReactions,
|
||||
parseSlackBlocksInput,
|
||||
parseSlackTarget,
|
||||
pinSlackMessage,
|
||||
reactSlackMessage,
|
||||
readSlackMessages,
|
||||
recordSlackThreadParticipation,
|
||||
removeOwnSlackReactions,
|
||||
removeSlackReaction,
|
||||
resolveSlackAccount,
|
||||
resolveSlackChannelId,
|
||||
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/api.js";
|
||||
4
src/channels/synology-chat/plugin-sdk-bridge.ts
Normal file
4
src/channels/synology-chat/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export {
|
||||
synologyChatSetupAdapter,
|
||||
synologyChatSetupWizard,
|
||||
} from "../../../extensions/synology-chat/setup-api.js";
|
||||
68
src/channels/telegram/plugin-sdk-bridge.ts
Normal file
68
src/channels/telegram/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1,68 @@
|
||||
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,
|
||||
resolveTelegramAccount,
|
||||
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/api.js";
|
||||
1
src/channels/whatsapp/action-runtime-bridge.ts
Normal file
1
src/channels/whatsapp/action-runtime-bridge.ts
Normal file
@ -0,0 +1 @@
|
||||
export { handleWhatsAppAction } from "../../../extensions/whatsapp/action-runtime-api.js";
|
||||
1
src/channels/whatsapp/login-qr-bridge.ts
Normal file
1
src/channels/whatsapp/login-qr-bridge.ts
Normal file
@ -0,0 +1 @@
|
||||
export { startWebLoginWithQr, waitForWebLogin } from "../../../extensions/whatsapp/login-qr-api.js";
|
||||
50
src/channels/whatsapp/plugin-sdk-bridge.ts
Normal file
50
src/channels/whatsapp/plugin-sdk-bridge.ts
Normal 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/api.js";
|
||||
6
src/channels/whatsapp/web-media-bridge.ts
Normal file
6
src/channels/whatsapp/web-media-bridge.ts
Normal file
@ -0,0 +1,6 @@
|
||||
export type { WebMediaResult } from "../../../extensions/whatsapp/runtime-api.js";
|
||||
export {
|
||||
getDefaultLocalRoots,
|
||||
loadWebMedia,
|
||||
loadWebMediaRaw,
|
||||
} from "../../../extensions/whatsapp/runtime-api.js";
|
||||
1
src/channels/zalo/plugin-sdk-bridge.ts
Normal file
1
src/channels/zalo/plugin-sdk-bridge.ts
Normal file
@ -0,0 +1 @@
|
||||
export { zaloSetupAdapter, zaloSetupWizard } from "../../../extensions/zalo/api.js";
|
||||
@ -4,10 +4,15 @@ import path from "node:path";
|
||||
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { NON_ENV_SECRETREF_MARKER } from "../agents/model-auth-markers.js";
|
||||
|
||||
const resolveProviderUsageAuthWithPluginMock = vi.fn(async () => null);
|
||||
type ResolveProviderUsageAuthWithPlugin =
|
||||
typeof import("../plugins/provider-runtime.js").resolveProviderUsageAuthWithPlugin;
|
||||
|
||||
const resolveProviderUsageAuthWithPluginMock = vi.fn<ResolveProviderUsageAuthWithPlugin>(
|
||||
async () => null,
|
||||
);
|
||||
|
||||
vi.mock("../plugins/provider-runtime.js", () => ({
|
||||
resolveProviderUsageAuthWithPlugin: (...args: unknown[]) =>
|
||||
resolveProviderUsageAuthWithPlugin: (...args: Parameters<ResolveProviderUsageAuthWithPlugin>) =>
|
||||
resolveProviderUsageAuthWithPluginMock(...args),
|
||||
}));
|
||||
|
||||
|
||||
1
src/plugin-sdk/account-action-gate.ts
Normal file
1
src/plugin-sdk/account-action-gate.ts
Normal file
@ -0,0 +1 @@
|
||||
export { createAccountActionGate } from "../channels/plugins/account-action-gate.js";
|
||||
@ -1,3 +1,8 @@
|
||||
import {
|
||||
resolveDiscordAccount as resolveDiscordAccountImpl,
|
||||
type ResolvedDiscordAccount as DiscordResolvedDiscordAccount,
|
||||
} from "../../extensions/discord/account-api.js";
|
||||
|
||||
export type { OpenClawConfig } from "../config/config.js";
|
||||
|
||||
export { createAccountActionGate } from "../channels/plugins/account-action-gate.js";
|
||||
@ -11,15 +16,25 @@ export {
|
||||
} from "../routing/session-key.js";
|
||||
export { normalizeE164, pathExists, resolveUserPath } from "../utils.js";
|
||||
export {
|
||||
resolveDiscordAccount,
|
||||
type ResolvedDiscordAccount,
|
||||
} from "../../extensions/discord/api.js";
|
||||
export { resolveSlackAccount, type ResolvedSlackAccount } from "../../extensions/slack/api.js";
|
||||
resolveSlackAccount,
|
||||
type ResolvedSlackAccount,
|
||||
} from "../channels/slack/plugin-sdk-bridge.js";
|
||||
export {
|
||||
resolveTelegramAccount,
|
||||
type ResolvedTelegramAccount,
|
||||
} from "../../extensions/telegram/api.js";
|
||||
export { resolveSignalAccount, type ResolvedSignalAccount } from "../../extensions/signal/api.js";
|
||||
} from "../channels/telegram/plugin-sdk-bridge.js";
|
||||
export {
|
||||
resolveSignalAccount,
|
||||
type ResolvedSignalAccount,
|
||||
} from "../channels/signal/plugin-sdk-bridge.js";
|
||||
|
||||
export type ResolvedDiscordAccount = DiscordResolvedDiscordAccount;
|
||||
|
||||
export function resolveDiscordAccount(
|
||||
...args: Parameters<typeof resolveDiscordAccountImpl>
|
||||
): ReturnType<typeof resolveDiscordAccountImpl> {
|
||||
return resolveDiscordAccountImpl(...args);
|
||||
}
|
||||
|
||||
/** Resolve an account by id, then fall back to the default account when the primary lacks credentials. */
|
||||
export function resolveAccountWithDefaultFallback<TAccount>(params: {
|
||||
|
||||
@ -28,7 +28,7 @@ export { buildChannelConfigSchema } from "../channels/plugins/config-schema.js";
|
||||
export {
|
||||
resolveBlueBubblesGroupRequireMention,
|
||||
resolveBlueBubblesGroupToolPolicy,
|
||||
} from "../../extensions/bluebubbles/runtime-api.js";
|
||||
} from "../channels/bluebubbles/plugin-sdk-bridge.js";
|
||||
export { formatPairingApproveHint } from "../channels/plugins/helpers.js";
|
||||
export { resolveChannelMediaMaxBytes } from "../channels/plugins/media-limits.js";
|
||||
export {
|
||||
@ -62,13 +62,13 @@ export {
|
||||
export { buildSecretInputSchema } from "./secret-input-schema.js";
|
||||
export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js";
|
||||
export { MarkdownConfigSchema } from "../config/zod-schema.core.js";
|
||||
export type { ParsedChatTarget } from "../../extensions/imessage/api.js";
|
||||
export type { ParsedChatTarget } from "../channels/imessage/api-bridge.js";
|
||||
export {
|
||||
parseChatAllowTargetPrefixes,
|
||||
parseChatTargetPrefixesOrThrow,
|
||||
resolveServicePrefixedAllowTarget,
|
||||
resolveServicePrefixedTarget,
|
||||
} from "../../extensions/imessage/api.js";
|
||||
} from "../channels/imessage/api-bridge.js";
|
||||
export { stripMarkdown } from "../line/markdown-to-line.js";
|
||||
export { parseFiniteNumber } from "../infra/parse-finite-number.js";
|
||||
export { emptyPluginConfigSchema } from "../plugins/config-schema.js";
|
||||
|
||||
@ -352,6 +352,106 @@ function expectNoSiblingExtensionPrivateSrcImports(file: string, imports: string
|
||||
}
|
||||
|
||||
describe("channel import guardrails", () => {
|
||||
it("keeps Discord threading ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:ThreadBindingManager|ThreadBindingRecord|ThreadBindingTargetKind)\b/,
|
||||
);
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:autoBindSpawnedDiscordSubagent|getThreadBindingManager|listThreadBindingsBySessionKey|resolveThreadBindingIdleTimeoutMs|resolveThreadBindingInactivityExpiresAt|resolveThreadBindingMaxAgeExpiresAt|resolveThreadBindingMaxAgeMs|setThreadBindingIdleTimeoutBySessionKey|setThreadBindingMaxAgeBySessionKey|unbindThreadBindingsBySessionKey)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/session-key-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord directory ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:listDiscordDirectoryGroupsFromConfig|listDiscordDirectoryPeersFromConfig|listDiscordDirectoryGroupsLive|listDiscordDirectoryPeersLive|resolveDiscordChannelAllowlist|resolveDiscordUserAllowlist)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord actions ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:createDiscordActionGate|readDiscordComponentSpec|discordMessageActions|addRoleDiscord|auditDiscordChannelPermissions|banMemberDiscord|collectDiscordAuditChannelIds|createChannelDiscord|createScheduledEventDiscord|createThreadDiscord|deleteChannelDiscord|deleteMessageDiscord|editChannelDiscord|editMessageDiscord|fetchChannelPermissionsDiscord|fetchMemberInfoDiscord|fetchMessageDiscord|fetchReactionsDiscord|fetchRoleInfoDiscord|moveChannelDiscord|pinMessageDiscord|reactMessageDiscord|removeChannelPermissionDiscord|removeOwnReactionsDiscord|removeReactionDiscord|removeRoleDiscord|sendDiscordComponentMessage|sendPollDiscord|sendStickerDiscord|setChannelPermissionDiscord|timeoutMemberDiscord|uploadEmojiDiscord|uploadStickerDiscord)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord outbound ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:looksLikeDiscordTargetId|normalizeDiscordMessagingTarget|normalizeDiscordOutboundTarget|resolveDiscordChannelId|sendMessageDiscord|sendTypingDiscord|sendVoiceMessageDiscord)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord messaging ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:fetchChannelInfoDiscord|listGuildChannelsDiscord|listGuildEmojisDiscord|listPinsDiscord|listScheduledEventsDiscord|listThreadsDiscord|readMessagesDiscord|searchMessagesDiscord)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord gateway ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:fetchVoiceStatusDiscord|getGateway|getPresence|monitorDiscordProvider)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps Discord status ownership on extension public seams", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
|
||||
.map((match) => match[0])
|
||||
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
|
||||
.join("\n");
|
||||
expect(bridgeImports).not.toMatch(
|
||||
/\b(?:collectDiscordStatusIssues|probeDiscord|DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS|DISCORD_DEFAULT_LISTENER_TIMEOUT_MS)\b/,
|
||||
);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps plugin-sdk/discord off the Discord bridge entirely", () => {
|
||||
const text = readSource("src/plugin-sdk/discord.ts");
|
||||
expect(text).not.toMatch(/plugin-sdk-bridge\.js/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
|
||||
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/session-key-api\.js";/);
|
||||
});
|
||||
|
||||
it("keeps channel helper modules off their own SDK barrels", () => {
|
||||
for (const source of SAME_CHANNEL_SDK_GUARDS) {
|
||||
const text = readSource(source.path);
|
||||
|
||||
@ -46,5 +46,5 @@ export { mapAllowlistResolutionInputs } from "./allowlist-resolution.js";
|
||||
export {
|
||||
resolveBlueBubblesGroupRequireMention,
|
||||
resolveBlueBubblesGroupToolPolicy,
|
||||
} from "../../extensions/bluebubbles/runtime-api.js";
|
||||
} from "../channels/bluebubbles/plugin-sdk-bridge.js";
|
||||
export { collectBlueBubblesStatusIssues } from "../channels/plugins/status-issues/bluebubbles.js";
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
export type { ChannelPlugin } from "./channel-plugin-common.js";
|
||||
export type { DiscordActionConfig } from "../config/types.js";
|
||||
export type { DiscordAccountConfig, DiscordActionConfig } from "../config/types.js";
|
||||
export { buildChannelConfigSchema, getChatChannelMeta } from "./channel-plugin-common.js";
|
||||
export type { OpenClawConfig } from "../config/config.js";
|
||||
export { withNormalizedTimestamp } from "../agents/date-time.js";
|
||||
|
||||
@ -1,3 +1,101 @@
|
||||
import {
|
||||
createDiscordActionGate,
|
||||
collectDiscordStatusIssues,
|
||||
inspectDiscordAccount,
|
||||
listDiscordDirectoryGroupsFromConfig,
|
||||
listDiscordDirectoryPeersFromConfig,
|
||||
listDiscordAccountIds,
|
||||
looksLikeDiscordTargetId,
|
||||
normalizeDiscordMessagingTarget,
|
||||
normalizeDiscordOutboundTarget,
|
||||
readDiscordComponentSpec,
|
||||
resolveDefaultDiscordAccountId,
|
||||
resolveDiscordChannelId,
|
||||
resolveDiscordGroupRequireMention,
|
||||
resolveDiscordGroupToolPolicy,
|
||||
} from "../../extensions/discord/api.js";
|
||||
import type {
|
||||
DiscordPluralKitConfig,
|
||||
DiscordSendComponents,
|
||||
DiscordSendEmbeds,
|
||||
InspectedDiscordAccount,
|
||||
ResolvedDiscordAccount,
|
||||
} 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,
|
||||
discordMessageActions,
|
||||
editChannelDiscord,
|
||||
editMessageDiscord,
|
||||
fetchChannelPermissionsDiscord,
|
||||
fetchMemberInfoDiscord,
|
||||
fetchMessageDiscord,
|
||||
fetchReactionsDiscord,
|
||||
fetchRoleInfoDiscord,
|
||||
fetchChannelInfoDiscord,
|
||||
fetchVoiceStatusDiscord,
|
||||
getGateway,
|
||||
getPresence,
|
||||
getThreadBindingManager,
|
||||
hasAnyGuildPermissionDiscord,
|
||||
kickMemberDiscord,
|
||||
listDiscordDirectoryGroupsLive,
|
||||
listDiscordDirectoryPeersLive,
|
||||
listThreadBindingsBySessionKey,
|
||||
listGuildChannelsDiscord,
|
||||
listGuildEmojisDiscord,
|
||||
listPinsDiscord,
|
||||
listScheduledEventsDiscord,
|
||||
listThreadsDiscord,
|
||||
monitorDiscordProvider,
|
||||
moveChannelDiscord,
|
||||
pinMessageDiscord,
|
||||
reactMessageDiscord,
|
||||
removeChannelPermissionDiscord,
|
||||
removeOwnReactionsDiscord,
|
||||
removeReactionDiscord,
|
||||
removeRoleDiscord,
|
||||
resolveDiscordChannelAllowlist,
|
||||
resolveDiscordUserAllowlist,
|
||||
resolveThreadBindingIdleTimeoutMs,
|
||||
resolveThreadBindingInactivityExpiresAt,
|
||||
resolveThreadBindingMaxAgeExpiresAt,
|
||||
resolveThreadBindingMaxAgeMs,
|
||||
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
|
||||
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
|
||||
probeDiscord,
|
||||
sendMessageDiscord,
|
||||
sendDiscordComponentMessage,
|
||||
sendPollDiscord,
|
||||
sendTypingDiscord,
|
||||
sendStickerDiscord,
|
||||
sendVoiceMessageDiscord,
|
||||
setThreadBindingIdleTimeoutBySessionKey,
|
||||
setThreadBindingMaxAgeBySessionKey,
|
||||
setChannelPermissionDiscord,
|
||||
timeoutMemberDiscord,
|
||||
unbindThreadBindingsBySessionKey,
|
||||
unpinMessageDiscord,
|
||||
uploadEmojiDiscord,
|
||||
uploadStickerDiscord,
|
||||
readMessagesDiscord,
|
||||
searchMessagesDiscord,
|
||||
} from "../../extensions/discord/runtime-api.js";
|
||||
import { normalizeExplicitDiscordSessionKey } from "../../extensions/discord/session-key-api.js";
|
||||
|
||||
export type {
|
||||
ChannelAccountSnapshot,
|
||||
ChannelGatewayContext,
|
||||
@ -6,15 +104,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 +148,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 +157,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 +182,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";
|
||||
};
|
||||
|
||||
@ -67,7 +67,7 @@ export type { RuntimeEnv } from "../runtime.js";
|
||||
export { formatDocsLink } from "../terminal/links.js";
|
||||
export { evaluateSenderGroupAccessForPolicy } from "./group-access.js";
|
||||
export type { WizardPrompter } from "../wizard/prompts.js";
|
||||
export { feishuSetupWizard, feishuSetupAdapter } from "../../extensions/feishu/setup-api.js";
|
||||
export { feishuSetupWizard, feishuSetupAdapter } from "../channels/feishu/plugin-sdk-bridge.js";
|
||||
export { buildAgentMediaPayload } from "./agent-media-payload.js";
|
||||
export { readJsonFileWithFallback } from "./json-store.js";
|
||||
export { createScopedPairingAccess } from "./pairing-access.js";
|
||||
@ -83,7 +83,7 @@ export { withTempDownloadPath } from "./temp-path.js";
|
||||
export {
|
||||
buildFeishuConversationId,
|
||||
parseFeishuConversationId,
|
||||
} from "../../extensions/feishu/src/conversation-id.js";
|
||||
} from "../channels/feishu/plugin-sdk-bridge.js";
|
||||
export {
|
||||
createFixedWindowRateLimiter,
|
||||
createWebhookAnomalyTracker,
|
||||
|
||||
@ -1 +1 @@
|
||||
export { normalizeIMessageHandle } from "../../extensions/imessage/api.js";
|
||||
export { normalizeIMessageHandle } from "../channels/imessage/api-bridge.js";
|
||||
|
||||
@ -38,7 +38,7 @@ export {
|
||||
export {
|
||||
resolveIMessageGroupRequireMention,
|
||||
resolveIMessageGroupToolPolicy,
|
||||
} from "../../extensions/imessage/api.js";
|
||||
} from "../channels/imessage/plugin-sdk-bridge.js";
|
||||
export { IMessageConfigSchema } from "../config/zod-schema.providers-core.js";
|
||||
|
||||
export { resolveChannelMediaMaxBytes } from "../channels/plugins/media-limits.js";
|
||||
@ -47,4 +47,4 @@ export {
|
||||
monitorIMessageProvider,
|
||||
probeIMessage,
|
||||
sendMessageIMessage,
|
||||
} from "../../extensions/imessage/runtime-api.js";
|
||||
} from "../channels/imessage/plugin-sdk-bridge.js";
|
||||
|
||||
@ -62,7 +62,7 @@ export {
|
||||
listIrcAccountIds,
|
||||
resolveDefaultIrcAccountId,
|
||||
resolveIrcAccount,
|
||||
} from "../../extensions/irc/api.js";
|
||||
} from "../channels/irc/plugin-sdk-bridge.js";
|
||||
export {
|
||||
readStoreAllowFromForDmPolicy,
|
||||
resolveEffectiveAllowFromLists,
|
||||
@ -72,7 +72,7 @@ export type { WizardPrompter } from "../wizard/prompts.js";
|
||||
export { createScopedPairingAccess } from "./pairing-access.js";
|
||||
export { issuePairingChallenge } from "../pairing/pairing-challenge.js";
|
||||
export { dispatchInboundReplyWithBase } from "./inbound-reply-dispatch.js";
|
||||
export { ircSetupAdapter, ircSetupWizard } from "../../extensions/irc/api.js";
|
||||
export { ircSetupAdapter, ircSetupWizard } from "../channels/irc/plugin-sdk-bridge.js";
|
||||
export type { OutboundReplyPayload } from "./reply-payload.js";
|
||||
export {
|
||||
createNormalizedOutboundDeliverer,
|
||||
|
||||
@ -32,7 +32,7 @@ export {
|
||||
resolveDefaultLineAccountId,
|
||||
resolveLineAccount,
|
||||
} from "../line/accounts.js";
|
||||
export { lineSetupAdapter, lineSetupWizard } from "../../extensions/line/setup-api.js";
|
||||
export { lineSetupAdapter, lineSetupWizard } from "../channels/line/plugin-sdk-bridge.js";
|
||||
export { LineConfigSchema } from "../line/config-schema.js";
|
||||
export type { LineChannelData, LineConfig, ResolvedLineAccount } from "../line/types.js";
|
||||
export {
|
||||
|
||||
@ -8,6 +8,66 @@ import {
|
||||
KILOCODE_DEFAULT_MODEL_ID,
|
||||
KILOCODE_DEFAULT_MODEL_NAME,
|
||||
} from "../providers/kilocode-shared.js";
|
||||
import {
|
||||
KIMI_CODING_BASE_URL,
|
||||
KIMI_CODING_DEFAULT_MODEL_ID,
|
||||
} from "../providers/plugin-sdk-provider-models-bridge.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 "../providers/plugin-sdk-provider-models-bridge.js";
|
||||
import {
|
||||
buildMistralModelDefinition,
|
||||
MISTRAL_BASE_URL,
|
||||
MISTRAL_DEFAULT_COST,
|
||||
MISTRAL_DEFAULT_MODEL_ID,
|
||||
MISTRAL_DEFAULT_MODEL_REF,
|
||||
} from "../providers/plugin-sdk-provider-models-bridge.js";
|
||||
import {
|
||||
buildModelStudioDefaultModelDefinition,
|
||||
buildModelStudioModelDefinition,
|
||||
MODELSTUDIO_CN_BASE_URL,
|
||||
MODELSTUDIO_DEFAULT_COST,
|
||||
MODELSTUDIO_DEFAULT_MODEL_ID,
|
||||
MODELSTUDIO_DEFAULT_MODEL_REF,
|
||||
MODELSTUDIO_GLOBAL_BASE_URL,
|
||||
} 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 "../providers/plugin-sdk-provider-models-bridge.js";
|
||||
import {
|
||||
QIANFAN_BASE_URL,
|
||||
QIANFAN_DEFAULT_MODEL_ID,
|
||||
} 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 "../providers/plugin-sdk-provider-models-bridge.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 "../providers/plugin-sdk-provider-models-bridge.js";
|
||||
|
||||
export type { ModelApi, ModelProviderConfig } from "../config/types.models.js";
|
||||
export type { ModelDefinitionConfig } from "../config/types.models.js";
|
||||
@ -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,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
export type { ChannelMessageActionAdapter } from "../channels/plugins/types.js";
|
||||
export type { OpenClawConfig } from "../config/config.js";
|
||||
export type { SignalAccountConfig } from "../config/types.js";
|
||||
export type { ResolvedSignalAccount } from "../../extensions/signal/api.js";
|
||||
export type { ResolvedSignalAccount } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export type {
|
||||
ChannelMessageActionContext,
|
||||
ChannelPlugin,
|
||||
@ -51,13 +51,10 @@ export {
|
||||
listEnabledSignalAccounts,
|
||||
listSignalAccountIds,
|
||||
resolveDefaultSignalAccountId,
|
||||
} from "../../extensions/signal/api.js";
|
||||
export { monitorSignalProvider } from "../../extensions/signal/src/monitor.js";
|
||||
export { probeSignal } from "../../extensions/signal/src/probe.js";
|
||||
export { resolveSignalReactionLevel } from "../../extensions/signal/src/reaction-level.js";
|
||||
export {
|
||||
removeReactionSignal,
|
||||
sendReactionSignal,
|
||||
} from "../../extensions/signal/src/send-reactions.js";
|
||||
export { sendMessageSignal } from "../../extensions/signal/src/send.js";
|
||||
export { signalMessageActions } from "../../extensions/signal/src/message-actions.js";
|
||||
} from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { monitorSignalProvider } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { probeSignal } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { resolveSignalReactionLevel } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { removeReactionSignal, sendReactionSignal } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { sendMessageSignal } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
export { signalMessageActions } from "../channels/signal/plugin-sdk-bridge.js";
|
||||
|
||||
@ -3,4 +3,4 @@ export {
|
||||
resolveSlackChannelId,
|
||||
type SlackTarget,
|
||||
type SlackTargetKind,
|
||||
} from "../../extensions/slack/api.js";
|
||||
} from "../channels/slack/plugin-sdk-bridge.js";
|
||||
|
||||
@ -1,7 +1,54 @@
|
||||
import type {
|
||||
InspectedSlackAccount,
|
||||
ResolvedSlackAccount,
|
||||
SlackActionContext,
|
||||
} from "../channels/slack/plugin-sdk-bridge.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 "../channels/slack/plugin-sdk-bridge.js";
|
||||
import {
|
||||
handleSlackAction,
|
||||
listSlackDirectoryGroupsLive,
|
||||
listSlackDirectoryPeersLive,
|
||||
monitorSlackProvider,
|
||||
probeSlack,
|
||||
resolveSlackChannelAllowlist,
|
||||
resolveSlackUserAllowlist,
|
||||
sendMessageSlack,
|
||||
listSlackDirectoryGroupsFromConfig,
|
||||
listSlackDirectoryPeersFromConfig,
|
||||
} from "../channels/slack/plugin-sdk-bridge.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 +79,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";
|
||||
};
|
||||
|
||||
@ -265,7 +265,27 @@ describe("plugin-sdk subpath exports", () => {
|
||||
|
||||
it("exports Discord helpers", () => {
|
||||
expect(typeof discordSdk.buildChannelConfigSchema).toBe("function");
|
||||
expect(typeof discordSdk.createDiscordActionGate).toBe("function");
|
||||
expect(typeof discordSdk.DiscordConfigSchema).toBe("object");
|
||||
expect(typeof discordSdk.discordMessageActions).toBe("object");
|
||||
expect(typeof discordSdk.listDiscordDirectoryGroupsFromConfig).toBe("function");
|
||||
expect(typeof discordSdk.listDiscordDirectoryPeersFromConfig).toBe("function");
|
||||
expect(typeof discordSdk.listDiscordDirectoryGroupsLive).toBe("function");
|
||||
expect(typeof discordSdk.listDiscordDirectoryPeersLive).toBe("function");
|
||||
expect(typeof discordSdk.fetchChannelInfoDiscord).toBe("function");
|
||||
expect(typeof discordSdk.fetchVoiceStatusDiscord).toBe("function");
|
||||
expect(typeof discordSdk.getGateway).toBe("function");
|
||||
expect(typeof discordSdk.getPresence).toBe("function");
|
||||
expect(typeof discordSdk.listThreadsDiscord).toBe("function");
|
||||
expect(typeof discordSdk.monitorDiscordProvider).toBe("function");
|
||||
expect(typeof discordSdk.normalizeDiscordOutboundTarget).toBe("function");
|
||||
expect(typeof discordSdk.probeDiscord).toBe("function");
|
||||
expect(typeof discordSdk.readMessagesDiscord).toBe("function");
|
||||
expect(typeof discordSdk.resolveDiscordChannelId).toBe("function");
|
||||
expect(typeof discordSdk.sendMessageDiscord).toBe("function");
|
||||
expect(typeof discordSdk.getThreadBindingManager).toBe("function");
|
||||
expect(typeof discordSdk.listThreadBindingsBySessionKey).toBe("function");
|
||||
expect(typeof discordSdk.normalizeExplicitDiscordSessionKey).toBe("function");
|
||||
expect(typeof discordSdk.projectCredentialSnapshotFields).toBe("function");
|
||||
expect("resolveDiscordAccount" in asExports(discordSdk)).toBe(false);
|
||||
});
|
||||
|
||||
@ -20,4 +20,4 @@ export { createFixedWindowRateLimiter } from "./webhook-memory-guards.js";
|
||||
export {
|
||||
synologyChatSetupAdapter,
|
||||
synologyChatSetupWizard,
|
||||
} from "../../extensions/synology-chat/setup-api.js";
|
||||
} from "../channels/synology-chat/plugin-sdk-bridge.js";
|
||||
|
||||
@ -1,3 +1,68 @@
|
||||
import type {
|
||||
InspectedTelegramAccount,
|
||||
ProviderInfo,
|
||||
ResolvedTelegramAccount,
|
||||
StickerMetadata,
|
||||
TelegramButtonStyle,
|
||||
TelegramInlineButtons,
|
||||
TelegramProbe,
|
||||
} from "../channels/telegram/plugin-sdk-bridge.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 "../channels/telegram/plugin-sdk-bridge.js";
|
||||
import {
|
||||
auditTelegramGroupMembership,
|
||||
collectTelegramUnmentionedGroupIds,
|
||||
createForumTopicTelegram,
|
||||
deleteMessageTelegram,
|
||||
editForumTopicTelegram,
|
||||
editMessageReplyMarkupTelegram,
|
||||
editMessageTelegram,
|
||||
monitorTelegramProvider,
|
||||
pinMessageTelegram,
|
||||
probeTelegram,
|
||||
reactMessageTelegram,
|
||||
renameForumTopicTelegram,
|
||||
resolveTelegramToken,
|
||||
sendMessageTelegram,
|
||||
sendPollTelegram,
|
||||
sendStickerTelegram,
|
||||
sendTypingTelegram,
|
||||
setTelegramThreadBindingIdleTimeoutBySessionKey,
|
||||
setTelegramThreadBindingMaxAgeBySessionKey,
|
||||
telegramMessageActions,
|
||||
unpinMessageTelegram,
|
||||
listTelegramDirectoryGroupsFromConfig,
|
||||
listTelegramDirectoryPeersFromConfig,
|
||||
} from "../channels/telegram/plugin-sdk-bridge.js";
|
||||
|
||||
export type {
|
||||
ChannelAccountSnapshot,
|
||||
ChannelGatewayContext,
|
||||
@ -17,11 +82,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 +117,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,
|
||||
};
|
||||
|
||||
@ -3,4 +3,4 @@ export {
|
||||
loadWebMedia,
|
||||
loadWebMediaRaw,
|
||||
type WebMediaResult,
|
||||
} from "../../extensions/whatsapp/runtime-api.js";
|
||||
} from "../channels/whatsapp/web-media-bridge.js";
|
||||
|
||||
@ -1 +1 @@
|
||||
export { handleWhatsAppAction } from "../../extensions/whatsapp/action-runtime-api.js";
|
||||
export { handleWhatsAppAction } from "../channels/whatsapp/action-runtime-bridge.js";
|
||||
|
||||
@ -13,7 +13,7 @@ export {
|
||||
export {
|
||||
resolveWhatsAppGroupRequireMention,
|
||||
resolveWhatsAppGroupToolPolicy,
|
||||
} from "../../extensions/whatsapp/api.js";
|
||||
} from "../channels/whatsapp/plugin-sdk-bridge.js";
|
||||
export { resolveWhatsAppGroupIntroHint } from "../channels/plugins/whatsapp-shared.js";
|
||||
export {
|
||||
ToolAuthorizationError,
|
||||
|
||||
@ -1 +1 @@
|
||||
export { startWebLoginWithQr, waitForWebLogin } from "../../extensions/whatsapp/login-qr-api.js";
|
||||
export { startWebLoginWithQr, waitForWebLogin } from "../channels/whatsapp/login-qr-bridge.js";
|
||||
|
||||
@ -1,11 +1,55 @@
|
||||
import {
|
||||
hasAnyWhatsAppAuth,
|
||||
listEnabledWhatsAppAccounts,
|
||||
resolveWhatsAppAccount,
|
||||
resolveWhatsAppGroupRequireMention,
|
||||
resolveWhatsAppGroupToolPolicy,
|
||||
listWhatsAppDirectoryGroupsFromConfig,
|
||||
listWhatsAppDirectoryPeersFromConfig,
|
||||
} from "../channels/whatsapp/plugin-sdk-bridge.js";
|
||||
import type {
|
||||
WebChannelStatus,
|
||||
WebInboundMessage,
|
||||
WebListenerCloseReason,
|
||||
WebMonitorTuning,
|
||||
} from "../channels/whatsapp/plugin-sdk-bridge.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 "../channels/whatsapp/plugin-sdk-bridge.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 +77,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 +90,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 +103,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,
|
||||
};
|
||||
|
||||
@ -62,8 +62,8 @@ export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.j
|
||||
export type { RuntimeEnv } from "../runtime.js";
|
||||
export type { WizardPrompter } from "../wizard/prompts.js";
|
||||
export { formatAllowFromLowercase, isNormalizedSenderAllowed } from "./allow-from.js";
|
||||
export { zaloSetupAdapter } from "../../extensions/zalo/api.js";
|
||||
export { zaloSetupWizard } from "../../extensions/zalo/api.js";
|
||||
export { zaloSetupAdapter } from "../channels/zalo/plugin-sdk-bridge.js";
|
||||
export { zaloSetupWizard } from "../channels/zalo/plugin-sdk-bridge.js";
|
||||
export {
|
||||
resolveDirectDmAuthorizationOutcome,
|
||||
resolveSenderCommandAuthorizationWithRuntime,
|
||||
|
||||
@ -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,22 +187,22 @@ 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: {
|
||||
probeSignal: typeof import("../../../extensions/signal/runtime-api.js").probeSignal;
|
||||
sendMessageSignal: typeof import("../../../extensions/signal/runtime-api.js").sendMessageSignal;
|
||||
monitorSignalProvider: typeof import("../../../extensions/signal/runtime-api.js").monitorSignalProvider;
|
||||
messageActions: typeof import("../../../extensions/signal/runtime-api.js").signalMessageActions;
|
||||
probeSignal: typeof import("openclaw/plugin-sdk/signal").probeSignal;
|
||||
sendMessageSignal: typeof import("openclaw/plugin-sdk/signal").sendMessageSignal;
|
||||
monitorSignalProvider: typeof import("openclaw/plugin-sdk/signal").monitorSignalProvider;
|
||||
messageActions: typeof import("openclaw/plugin-sdk/signal").signalMessageActions;
|
||||
};
|
||||
imessage: {
|
||||
monitorIMessageProvider: typeof import("../../../extensions/imessage/runtime-api.js").monitorIMessageProvider;
|
||||
probeIMessage: typeof import("../../../extensions/imessage/runtime-api.js").probeIMessage;
|
||||
sendMessageIMessage: typeof import("../../../extensions/imessage/runtime-api.js").sendMessageIMessage;
|
||||
monitorIMessageProvider: typeof import("openclaw/plugin-sdk/imessage").monitorIMessageProvider;
|
||||
probeIMessage: typeof import("openclaw/plugin-sdk/imessage").probeIMessage;
|
||||
sendMessageIMessage: typeof import("openclaw/plugin-sdk/imessage").sendMessageIMessage;
|
||||
};
|
||||
whatsapp: {
|
||||
getActiveWebListener: typeof import("openclaw/plugin-sdk/whatsapp").getActiveWebListener;
|
||||
|
||||
@ -39,7 +39,7 @@ export type PluginRuntimeCore = {
|
||||
formatNativeDependencyHint: typeof import("./native-deps.js").formatNativeDependencyHint;
|
||||
};
|
||||
media: {
|
||||
loadWebMedia: typeof import("../../../extensions/whatsapp/runtime-api.js").loadWebMedia;
|
||||
loadWebMedia: typeof import("openclaw/plugin-sdk/web-media").loadWebMedia;
|
||||
detectMime: typeof import("../../media/mime.js").detectMime;
|
||||
mediaKindFromMime: typeof import("../../media/constants.js").mediaKindFromMime;
|
||||
isVoiceCompatibleAudio: typeof import("../../media/audio.js").isVoiceCompatibleAudio;
|
||||
|
||||
60
src/providers/plugin-sdk-provider-models-bridge.ts
Normal file
60
src/providers/plugin-sdk-provider-models-bridge.ts
Normal 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";
|
||||
Loading…
x
Reference in New Issue
Block a user