import { defineBundledChannelEntry, loadBundledEntryExportSync, } from "openclaw/plugin-sdk/channel-entry-contract"; import type { OpenClawPluginApi } from "openclaw/plugin-sdk/channel-entry-contract"; type FeishuSubagentHooksModule = typeof import("./api.js"); let feishuSubagentHooksPromise: Promise | null = null; function loadFeishuSubagentHooksModule() { feishuSubagentHooksPromise ??= import("./api.js"); return feishuSubagentHooksPromise; } function registerFeishuDocTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuDocTools", }); register(api); } function registerFeishuChatTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuChatTools", }); register(api); } function registerFeishuWikiTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuWikiTools", }); register(api); } function registerFeishuDriveTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuDriveTools", }); register(api); } function registerFeishuPermTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuPermTools", }); register(api); } function registerFeishuBitableTools(api: OpenClawPluginApi) { const register = loadBundledEntryExportSync<(api: OpenClawPluginApi) => void>(import.meta.url, { specifier: "./api.js", exportName: "registerFeishuBitableTools", }); register(api); } export default defineBundledChannelEntry({ id: "feishu", name: "Feishu", description: "Feishu/Lark channel plugin", importMetaUrl: import.meta.url, plugin: { specifier: "./api.js", exportName: "feishuPlugin", }, secrets: { specifier: "./src/secret-contract.js", exportName: "channelSecrets", }, runtime: { specifier: "./runtime-api.js", exportName: "setFeishuRuntime", }, registerFull(api) { api.on("subagent_spawning", async (event, ctx) => { const { handleFeishuSubagentSpawning } = await loadFeishuSubagentHooksModule(); return await handleFeishuSubagentSpawning(event, ctx); }); api.on("subagent_delivery_target", async (event) => { const { handleFeishuSubagentDeliveryTarget } = await loadFeishuSubagentHooksModule(); return handleFeishuSubagentDeliveryTarget(event); }); api.on("subagent_ended", async (event) => { const { handleFeishuSubagentEnded } = await loadFeishuSubagentHooksModule(); handleFeishuSubagentEnded(event); }); registerFeishuDocTools(api); registerFeishuChatTools(api); registerFeishuWikiTools(api); registerFeishuDriveTools(api); registerFeishuPermTools(api); registerFeishuBitableTools(api); }, });