From 3361593442e295e9bb1f55cbfb38861ea9413e45 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 24 Apr 2026 02:55:07 +0100 Subject: [PATCH] perf: reduce feishu monitor import drag --- extensions/feishu/src/monitor.reaction.test.ts | 7 +++++-- extensions/feishu/src/monitor.startup.test.ts | 15 ++++++++------- extensions/feishu/src/monitor.ts | 16 +++++++++------- extensions/feishu/src/sequential-key.ts | 5 ++++- src/plugin-sdk/command-primitives-runtime.ts | 1 + 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/extensions/feishu/src/monitor.reaction.test.ts b/extensions/feishu/src/monitor.reaction.test.ts index cb9dd482c3f..55e696eb121 100644 --- a/extensions/feishu/src/monitor.reaction.test.ts +++ b/extensions/feishu/src/monitor.reaction.test.ts @@ -8,8 +8,11 @@ import { createNonExitingTypedRuntimeEnv } from "../../../test/helpers/plugins/r import type { ClawdbotConfig, PluginRuntime, RuntimeEnv } from "../runtime-api.js"; import { parseFeishuMessageEvent, type FeishuMessageEvent } from "./bot.js"; import * as dedup from "./dedup.js"; -import { monitorSingleAccount } from "./monitor.account.js"; -import { resolveReactionSyntheticEvent, type FeishuReactionCreatedEvent } from "./monitor.js"; +import { + monitorSingleAccount, + resolveReactionSyntheticEvent, + type FeishuReactionCreatedEvent, +} from "./monitor.account.js"; import { setFeishuRuntime } from "./runtime.js"; import type { ResolvedFeishuAccount } from "./types.js"; diff --git a/extensions/feishu/src/monitor.startup.test.ts b/extensions/feishu/src/monitor.startup.test.ts index f70e898755d..2abf3b15b74 100644 --- a/extensions/feishu/src/monitor.startup.test.ts +++ b/extensions/feishu/src/monitor.startup.test.ts @@ -40,9 +40,12 @@ function buildMultiAccountWebsocketConfig(accountIds: string[]): ClawdbotConfig } async function waitForStartedAccount(started: string[], accountId: string) { - for (let i = 0; i < 10 && !started.includes(accountId); i += 1) { - await Promise.resolve(); - } + await vi.waitFor( + () => { + expect(started).toContain(accountId); + }, + { timeout: 10_000 }, + ); } afterEach(() => { @@ -74,9 +77,7 @@ describe("Feishu monitor startup preflight", () => { }); try { - await Promise.resolve(); - await Promise.resolve(); - + await waitForStartedAccount(started, "alpha"); expect(started).toEqual(["alpha"]); expect(maxInFlight).toBe(1); } finally { @@ -177,7 +178,7 @@ describe("Feishu monitor startup preflight", () => { }); try { - await Promise.resolve(); + await waitForStartedAccount(started, "alpha"); expect(started).toEqual(["alpha"]); abortController.abort(); diff --git a/extensions/feishu/src/monitor.ts b/extensions/feishu/src/monitor.ts index 3613a1c55c1..5110a313b37 100644 --- a/extensions/feishu/src/monitor.ts +++ b/extensions/feishu/src/monitor.ts @@ -1,10 +1,5 @@ import type { ClawdbotConfig, RuntimeEnv } from "../runtime-api.js"; import { listEnabledFeishuAccounts, resolveFeishuRuntimeAccount } from "./accounts.js"; -import { - monitorSingleAccount, - resolveReactionSyntheticEvent, - type FeishuReactionCreatedEvent, -} from "./monitor.account.js"; import { fetchBotIdentityForMonitor } from "./monitor.startup.js"; import { clearFeishuWebhookRateLimitStateForTest, @@ -20,13 +15,18 @@ export type MonitorFeishuOpts = { accountId?: string; }; +let monitorAccountRuntimePromise: Promise | undefined; + +async function loadMonitorAccountRuntime() { + monitorAccountRuntimePromise ??= import("./monitor.account.js"); + return await monitorAccountRuntimePromise; +} + export { clearFeishuWebhookRateLimitStateForTest, getFeishuWebhookRateLimitStateSizeForTest, isWebhookRateLimitedForTest, - resolveReactionSyntheticEvent, }; -export type { FeishuReactionCreatedEvent }; export async function monitorFeishuProvider(opts: MonitorFeishuOpts = {}): Promise { const cfg = opts.config; @@ -44,6 +44,7 @@ export async function monitorFeishuProvider(opts: MonitorFeishuOpts = {}): Promi if (!account.enabled || !account.configured) { throw new Error(`Feishu account "${opts.accountId}" not configured or disabled`); } + const { monitorSingleAccount } = await loadMonitorAccountRuntime(); return monitorSingleAccount({ cfg, account, @@ -61,6 +62,7 @@ export async function monitorFeishuProvider(opts: MonitorFeishuOpts = {}): Promi `feishu: starting ${accounts.length} account(s): ${accounts.map((a) => a.accountId).join(", ")}`, ); + const { monitorSingleAccount } = await loadMonitorAccountRuntime(); const monitorPromises: Promise[] = []; for (const account of accounts) { if (opts.abortSignal?.aborted) { diff --git a/extensions/feishu/src/sequential-key.ts b/extensions/feishu/src/sequential-key.ts index 4dabde0ad7d..3f6a0a17bf2 100644 --- a/extensions/feishu/src/sequential-key.ts +++ b/extensions/feishu/src/sequential-key.ts @@ -1,4 +1,7 @@ -import { isAbortRequestText, isBtwRequestText } from "openclaw/plugin-sdk/reply-runtime"; +import { + isAbortRequestText, + isBtwRequestText, +} from "openclaw/plugin-sdk/command-primitives-runtime"; import { parseFeishuMessageEvent, type FeishuMessageEvent } from "./bot.js"; export function getFeishuSequentialKey(params: { diff --git a/src/plugin-sdk/command-primitives-runtime.ts b/src/plugin-sdk/command-primitives-runtime.ts index 7ce2d831c42..199c499c69a 100644 --- a/src/plugin-sdk/command-primitives-runtime.ts +++ b/src/plugin-sdk/command-primitives-runtime.ts @@ -1 +1,2 @@ export { isAbortRequestText } from "../auto-reply/reply/abort-primitives.js"; +export { isBtwRequestText } from "../auto-reply/reply/btw-command.js";