openclaw/src/test-utils/session-conversation-regist...

155 lines
4.3 KiB
TypeScript

import { createTestRegistry } from "./channel-plugins.js";
function resolveTelegramSessionConversation(params: { kind: "group" | "channel"; rawId: string }) {
if (params.kind !== "group") {
return null;
}
const match = params.rawId.match(/^(?<chatId>.+):topic:(?<topicId>[^:]+)$/u);
if (!match?.groups?.chatId || !match.groups.topicId) {
return null;
}
const chatId = match.groups.chatId;
return {
id: chatId,
threadId: match.groups.topicId,
baseConversationId: chatId,
parentConversationCandidates: [chatId],
};
}
function resolveFeishuSessionConversation(params: { kind: "group" | "channel"; rawId: string }) {
if (params.kind !== "group") {
return null;
}
const senderMatch = params.rawId.match(
/^(?<chatId>[^:]+):topic:(?<topicId>[^:]+):sender:(?<senderId>[^:]+)$/u,
);
if (!senderMatch?.groups?.chatId || !senderMatch.groups.topicId || !senderMatch.groups.senderId) {
return null;
}
const chatId = senderMatch.groups.chatId;
const topicId = senderMatch.groups.topicId;
return {
id: params.rawId,
baseConversationId: chatId,
parentConversationCandidates: [`${chatId}:topic:${topicId}`, chatId],
};
}
export function createSessionConversationTestRegistry() {
return createTestRegistry([
{
pluginId: "discord",
source: "test",
plugin: {
id: "discord",
meta: {
id: "discord",
label: "Discord",
selectionLabel: "Discord",
docsPath: "/channels/discord",
blurb: "Discord test stub.",
},
capabilities: { chatTypes: ["direct", "channel", "thread"] },
messaging: {
resolveSessionTarget: ({ id }: { id: string }) => `channel:${id}`,
},
config: {
listAccountIds: () => ["default"],
resolveAccount: () => ({}),
},
},
},
{
pluginId: "slack",
source: "test",
plugin: {
id: "slack",
meta: {
id: "slack",
label: "Slack",
selectionLabel: "Slack",
docsPath: "/channels/slack",
blurb: "Slack test stub.",
},
capabilities: { chatTypes: ["direct", "channel", "thread"] },
messaging: {
resolveSessionTarget: ({ id }: { id: string }) => `channel:${id}`,
},
config: {
listAccountIds: () => ["default"],
resolveAccount: () => ({}),
},
},
},
{
pluginId: "matrix",
source: "test",
plugin: {
id: "matrix",
meta: {
id: "matrix",
label: "Matrix",
selectionLabel: "Matrix",
docsPath: "/channels/matrix",
blurb: "Matrix test stub.",
},
capabilities: { chatTypes: ["direct", "channel", "thread"] },
messaging: {
resolveSessionTarget: ({ id }: { id: string }) => `channel:${id}`,
},
config: {
listAccountIds: () => ["default"],
resolveAccount: () => ({}),
},
},
},
{
pluginId: "telegram",
source: "test",
plugin: {
id: "telegram",
meta: {
id: "telegram",
label: "Telegram",
selectionLabel: "Telegram",
docsPath: "/channels/telegram",
blurb: "Telegram test stub.",
},
capabilities: { chatTypes: ["direct", "group", "thread"] },
messaging: {
normalizeTarget: (raw: string) => raw.replace(/^group:/, ""),
resolveSessionConversation: resolveTelegramSessionConversation,
},
config: {
listAccountIds: () => ["default"],
resolveAccount: () => ({}),
},
},
},
{
pluginId: "feishu",
source: "test",
plugin: {
id: "feishu",
meta: {
id: "feishu",
label: "Feishu",
selectionLabel: "Feishu",
docsPath: "/channels/feishu",
blurb: "Feishu test stub.",
},
capabilities: { chatTypes: ["direct", "group", "thread"] },
messaging: {
normalizeTarget: (raw: string) => raw.replace(/^group:/, ""),
resolveSessionConversation: resolveFeishuSessionConversation,
},
config: {
listAccountIds: () => ["default"],
resolveAccount: () => ({}),
},
},
},
]);
}