mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-17 12:11:20 +00:00
214 lines
5.8 KiB
TypeScript
214 lines
5.8 KiB
TypeScript
import { requireBundledChannelPlugin } from "../../../src/channels/plugins/bundled.js";
|
|
import type { ChannelPlugin } from "../../../src/channels/plugins/types.js";
|
|
import type { OpenClawConfig } from "../../../src/config/config.js";
|
|
|
|
type ActionsContractEntry = {
|
|
id: string;
|
|
plugin: Pick<ChannelPlugin, "id" | "actions">;
|
|
unsupportedAction?: string;
|
|
cases: Array<{
|
|
name: string;
|
|
cfg: OpenClawConfig;
|
|
expectedActions: string[];
|
|
expectedCapabilities?: string[];
|
|
beforeTest?: () => void;
|
|
}>;
|
|
};
|
|
|
|
let actionContractRegistryCache: ActionsContractEntry[] | undefined;
|
|
|
|
export function getActionContractRegistry(): ActionsContractEntry[] {
|
|
actionContractRegistryCache ??= [
|
|
{
|
|
id: "slack",
|
|
plugin: requireBundledChannelPlugin("slack"),
|
|
unsupportedAction: "poll",
|
|
cases: [
|
|
{
|
|
name: "configured account exposes default Slack actions",
|
|
cfg: {
|
|
channels: {
|
|
slack: {
|
|
botToken: "xoxb-test",
|
|
appToken: "xapp-test",
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: [
|
|
"send",
|
|
"react",
|
|
"reactions",
|
|
"read",
|
|
"edit",
|
|
"delete",
|
|
"download-file",
|
|
"upload-file",
|
|
"pin",
|
|
"unpin",
|
|
"list-pins",
|
|
"member-info",
|
|
"emoji-list",
|
|
],
|
|
expectedCapabilities: ["blocks"],
|
|
},
|
|
{
|
|
name: "interactive replies add the shared interactive capability",
|
|
cfg: {
|
|
channels: {
|
|
slack: {
|
|
botToken: "xoxb-test",
|
|
appToken: "xapp-test",
|
|
capabilities: {
|
|
interactiveReplies: true,
|
|
},
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: [
|
|
"send",
|
|
"react",
|
|
"reactions",
|
|
"read",
|
|
"edit",
|
|
"delete",
|
|
"download-file",
|
|
"upload-file",
|
|
"pin",
|
|
"unpin",
|
|
"list-pins",
|
|
"member-info",
|
|
"emoji-list",
|
|
],
|
|
expectedCapabilities: ["blocks", "interactive"],
|
|
},
|
|
{
|
|
name: "missing tokens disables the actions surface",
|
|
cfg: {
|
|
channels: {
|
|
slack: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: [],
|
|
expectedCapabilities: [],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "mattermost",
|
|
plugin: requireBundledChannelPlugin("mattermost"),
|
|
unsupportedAction: "poll",
|
|
cases: [
|
|
{
|
|
name: "configured account exposes send and react",
|
|
cfg: {
|
|
channels: {
|
|
mattermost: {
|
|
enabled: true,
|
|
botToken: "test-token",
|
|
baseUrl: "https://chat.example.com",
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: ["send", "react"],
|
|
expectedCapabilities: ["buttons"],
|
|
},
|
|
{
|
|
name: "reactions can be disabled while send stays available",
|
|
cfg: {
|
|
channels: {
|
|
mattermost: {
|
|
enabled: true,
|
|
botToken: "test-token",
|
|
baseUrl: "https://chat.example.com",
|
|
actions: { reactions: false },
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: ["send"],
|
|
expectedCapabilities: ["buttons"],
|
|
},
|
|
{
|
|
name: "missing bot credentials disables the actions surface",
|
|
cfg: {
|
|
channels: {
|
|
mattermost: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: [],
|
|
expectedCapabilities: [],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "telegram",
|
|
plugin: requireBundledChannelPlugin("telegram"),
|
|
cases: [
|
|
{
|
|
name: "exposes configured Telegram actions and capabilities",
|
|
cfg: {
|
|
channels: {
|
|
telegram: {
|
|
botToken: "123:telegram-test-token",
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: [
|
|
"send",
|
|
"poll",
|
|
"react",
|
|
"delete",
|
|
"edit",
|
|
"topic-create",
|
|
"topic-edit",
|
|
],
|
|
expectedCapabilities: ["interactive", "buttons"],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "discord",
|
|
plugin: requireBundledChannelPlugin("discord"),
|
|
cases: [
|
|
{
|
|
name: "describes configured Discord actions and capabilities",
|
|
cfg: {
|
|
channels: {
|
|
discord: {
|
|
token: "Bot token-main",
|
|
actions: {
|
|
polls: true,
|
|
reactions: true,
|
|
permissions: false,
|
|
messages: false,
|
|
pins: false,
|
|
threads: false,
|
|
search: false,
|
|
stickers: false,
|
|
memberInfo: false,
|
|
roleInfo: false,
|
|
emojiUploads: false,
|
|
stickerUploads: false,
|
|
channelInfo: false,
|
|
channels: false,
|
|
voiceStatus: false,
|
|
events: false,
|
|
roles: false,
|
|
moderation: false,
|
|
presence: false,
|
|
},
|
|
},
|
|
},
|
|
} as OpenClawConfig,
|
|
expectedActions: ["send", "poll", "react", "reactions", "emoji-list"],
|
|
expectedCapabilities: ["interactive", "components"],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
return actionContractRegistryCache;
|
|
}
|