From 9b21540a4e3beb4e98f8e1af50bdb9ce9a0bdcf6 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 16:16:18 +0100 Subject: [PATCH] perf(test): defer matrix approval reaction imports --- .../matrix/src/matrix/monitor/handler.test.ts | 37 ++++++++++++------- .../src/matrix/monitor/reaction-events.ts | 21 ++++++++++- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/extensions/matrix/src/matrix/monitor/handler.test.ts b/extensions/matrix/src/matrix/monitor/handler.test.ts index d1780acc79c..1f719226bfb 100644 --- a/extensions/matrix/src/matrix/monitor/handler.test.ts +++ b/extensions/matrix/src/matrix/monitor/handler.test.ts @@ -2734,19 +2734,25 @@ describe("matrix monitor handler draft streaming", () => { const { deliver, opts, finish } = await dispatch(); opts.onPartialReply?.({ text: "Alpha" }); - await vi.waitFor(() => { - expect(sendSingleTextMessageMatrixMock).toHaveBeenCalledTimes(1); - }); + await vi.waitFor( + () => { + expect(sendSingleTextMessageMatrixMock).toHaveBeenCalledTimes(1); + }, + { interval: 1 }, + ); opts.onPartialReply?.({ text: "AlphaBeta" }); - await vi.waitFor(() => { - expect(editMessageMatrixMock).toHaveBeenCalledWith( - "!room:example.org", - "$draft1", - "AlphaBeta", - expect.anything(), - ); - }); + await vi.waitFor( + () => { + expect(editMessageMatrixMock).toHaveBeenCalledWith( + "!room:example.org", + "$draft1", + "AlphaBeta", + expect.anything(), + ); + }, + { interval: 1 }, + ); await opts.onBlockReplyQueued?.({ text: "Alpha" }); @@ -2758,9 +2764,12 @@ describe("matrix monitor handler draft streaming", () => { }); await deliver({ text: "Alpha" }, { kind: "block" }); - await vi.waitFor(() => { - expect(sendSingleTextMessageMatrixMock).toHaveBeenCalledTimes(1); - }); + await vi.waitFor( + () => { + expect(sendSingleTextMessageMatrixMock).toHaveBeenCalledTimes(1); + }, + { interval: 1 }, + ); expect(sendSingleTextMessageMatrixMock.mock.calls[0]?.[1]).toBe("Beta"); expect(editMessageMatrixMock).toHaveBeenCalledWith( "!room:example.org", diff --git a/extensions/matrix/src/matrix/monitor/reaction-events.ts b/extensions/matrix/src/matrix/monitor/reaction-events.ts index 05cf24801aa..445c8cb8fab 100644 --- a/extensions/matrix/src/matrix/monitor/reaction-events.ts +++ b/extensions/matrix/src/matrix/monitor/reaction-events.ts @@ -1,10 +1,8 @@ import { getSessionBindingService } from "openclaw/plugin-sdk/session-binding-runtime"; -import { isMatrixApprovalReactionAuthorizedSender } from "../../approval-reaction-auth.js"; import { resolveMatrixApprovalReactionTarget, unregisterMatrixApprovalReactionTarget, } from "../../approval-reactions.js"; -import { isApprovalNotFoundError, resolveMatrixApproval } from "../../exec-approval-resolver.js"; import type { CoreConfig } from "../../types.js"; import { resolveMatrixAccountConfig } from "../account-config.js"; import { extractMatrixReactionAnnotation } from "../reaction-common.js"; @@ -14,6 +12,23 @@ import type { PluginRuntime } from "./runtime-api.js"; import { resolveMatrixThreadRootId, resolveMatrixThreadRouting } from "./threads.js"; import type { MatrixRawEvent, RoomMessageEventContent } from "./types.js"; +let approvalReactionAuthPromise: + | Promise + | undefined; +let execApprovalResolverPromise: + | Promise + | undefined; + +function loadApprovalReactionAuth(): Promise { + approvalReactionAuthPromise ??= import("../../approval-reaction-auth.js"); + return approvalReactionAuthPromise; +} + +function loadExecApprovalResolver(): Promise { + execApprovalResolverPromise ??= import("../../exec-approval-resolver.js"); + return execApprovalResolverPromise; +} + export type MatrixReactionNotificationMode = "off" | "own"; export function resolveMatrixReactionNotificationMode(params: { @@ -41,9 +56,11 @@ async function maybeResolveMatrixApprovalReaction(params: { return false; } const approvalKind = params.target.approvalId.startsWith("plugin:") ? "plugin" : "exec"; + const { isMatrixApprovalReactionAuthorizedSender } = await loadApprovalReactionAuth(); if (!isMatrixApprovalReactionAuthorizedSender({ ...params, approvalKind })) { return false; } + const { isApprovalNotFoundError, resolveMatrixApproval } = await loadExecApprovalResolver(); try { await resolveMatrixApproval({ cfg: params.cfg,