diff --git a/extensions/discord/src/monitor/monitor.test.ts b/extensions/discord/src/monitor/monitor.test.ts index d50b5903f9d..412ced186b8 100644 --- a/extensions/discord/src/monitor/monitor.test.ts +++ b/extensions/discord/src/monitor/monitor.test.ts @@ -52,6 +52,11 @@ type CreateDiscordComponentModal = typeof import("./agent-components.js").createDiscordComponentModal; type CreateDiscordComponentStringSelect = typeof import("./agent-components.js").createDiscordComponentStringSelect; +type DispatchReplyWithBufferedBlockDispatcherFn = + typeof import("openclaw/plugin-sdk/reply-dispatch-runtime").dispatchReplyWithBufferedBlockDispatcher; +type DispatchReplyWithBufferedBlockDispatcherResult = Awaited< + ReturnType +>; let createDiscordComponentButton: CreateDiscordComponentButton; let createDiscordComponentStringSelect: CreateDiscordComponentStringSelect; @@ -81,12 +86,7 @@ describe("discord component interactions", () => { ...overrides, }) as DiscordAccountConfig; - type DispatchParams = { - ctx: Record; - dispatcherOptions: { - deliver: (payload: { text?: string }) => Promise | void; - }; - }; + type DispatchParams = Parameters[0]; type ComponentContext = Parameters[0]; @@ -285,10 +285,22 @@ describe("discord component interactions", () => { resetDiscordComponentRuntimeMocks(); lastDispatchCtx = undefined; enqueueSystemEventMock.mockClear(); - dispatchReplyMock.mockClear().mockImplementation(async (params: DispatchParams) => { - lastDispatchCtx = params.ctx; - await params.dispatcherOptions.deliver({ text: "ok" }); - }); + dispatchReplyMock + .mockClear() + .mockImplementation( + async (params: DispatchParams): Promise => { + lastDispatchCtx = params.ctx; + await params.dispatcherOptions.deliver({ text: "ok" }, { kind: "final" }); + return { + queuedFinal: false, + counts: { + block: 0, + final: 1, + tool: 0, + }, + }; + }, + ); recordInboundSessionMock.mockClear().mockResolvedValue(undefined); readSessionUpdatedAtMock.mockClear().mockReturnValue(undefined); resolveStorePathMock.mockClear().mockReturnValue("/tmp/openclaw-sessions-test.json"); diff --git a/extensions/discord/src/test-support/component-runtime.ts b/extensions/discord/src/test-support/component-runtime.ts index fb45b1ea061..7f80ead8b30 100644 --- a/extensions/discord/src/test-support/component-runtime.ts +++ b/extensions/discord/src/test-support/component-runtime.ts @@ -4,11 +4,14 @@ import { resolvePinnedMainDmOwnerFromAllowlist } from "../../../../src/security/ type UnknownMock = Mock<(...args: unknown[]) => unknown>; type AsyncUnknownMock = Mock<(...args: unknown[]) => Promise>; +type DispatchReplyWithBufferedBlockDispatcherFn = + typeof import("openclaw/plugin-sdk/reply-dispatch-runtime").dispatchReplyWithBufferedBlockDispatcher; +type DispatchReplyMock = Mock; type DiscordComponentRuntimeMocks = { buildPluginBindingResolvedTextMock: UnknownMock; dispatchPluginInteractiveHandlerMock: AsyncUnknownMock; - dispatchReplyMock: UnknownMock; + dispatchReplyMock: DispatchReplyMock; enqueueSystemEventMock: UnknownMock; readAllowFromStoreMock: AsyncUnknownMock; readSessionUpdatedAtMock: UnknownMock; @@ -22,7 +25,7 @@ const runtimeMocks = vi.hoisted( (): DiscordComponentRuntimeMocks => ({ buildPluginBindingResolvedTextMock: vi.fn(), dispatchPluginInteractiveHandlerMock: vi.fn(), - dispatchReplyMock: vi.fn(), + dispatchReplyMock: vi.fn(), enqueueSystemEventMock: vi.fn(), readAllowFromStoreMock: vi.fn(), readSessionUpdatedAtMock: vi.fn(), @@ -36,7 +39,7 @@ const runtimeMocks = vi.hoisted( export const readAllowFromStoreMock: AsyncUnknownMock = runtimeMocks.readAllowFromStoreMock; export const dispatchPluginInteractiveHandlerMock: AsyncUnknownMock = runtimeMocks.dispatchPluginInteractiveHandlerMock; -export const dispatchReplyMock: UnknownMock = runtimeMocks.dispatchReplyMock; +export const dispatchReplyMock: DispatchReplyMock = runtimeMocks.dispatchReplyMock; export const enqueueSystemEventMock: UnknownMock = runtimeMocks.enqueueSystemEventMock; export const upsertPairingRequestMock: AsyncUnknownMock = runtimeMocks.upsertPairingRequestMock; export const recordInboundSessionMock: AsyncUnknownMock = runtimeMocks.recordInboundSessionMock; @@ -104,7 +107,7 @@ vi.mock("../monitor/agent-components.runtime.js", () => { ), dispatchPluginInteractiveHandler: (...args: unknown[]) => dispatchPluginInteractiveHandlerMock(...args), - dispatchReplyWithBufferedBlockDispatcher: (...args: unknown[]) => dispatchReplyMock(...args), + dispatchReplyWithBufferedBlockDispatcher: dispatchReplyMock, finalizeInboundContext: vi.fn((ctx) => ctx), parsePluginBindingApprovalCustomId, recordInboundSession: (...args: unknown[]) => recordInboundSessionMock(...args), diff --git a/extensions/matrix/src/exec-approvals.ts b/extensions/matrix/src/exec-approvals.ts index 2fea05824d9..05b1388d536 100644 --- a/extensions/matrix/src/exec-approvals.ts +++ b/extensions/matrix/src/exec-approvals.ts @@ -54,24 +54,18 @@ function countMatrixExecApprovalEligibleAccounts(params: { cfg: params.cfg, accountId, }); - const filters = config?.enabled - ? { - agentFilter: config.agentFilter, - sessionFilter: config.sessionFilter, - } - : { - agentFilter: undefined, - sessionFilter: undefined, - }; + if (!config?.enabled) { + return false; + } return ( isChannelExecApprovalClientEnabledFromConfig({ - enabled: config?.enabled, + enabled: config.enabled, approverCount: getMatrixExecApprovalApprovers({ cfg: params.cfg, accountId }).length, }) && matchesApprovalRequestFilters({ request: params.request.request, - agentFilter: filters.agentFilter, - sessionFilter: filters.sessionFilter, + agentFilter: config.agentFilter, + sessionFilter: config.sessionFilter, }) ); }).length; diff --git a/src/gateway/server.agent.gateway-server-agent-b.test.ts b/src/gateway/server.agent.gateway-server-agent-b.test.ts index 15e25e544b3..14b624c9251 100644 --- a/src/gateway/server.agent.gateway-server-agent-b.test.ts +++ b/src/gateway/server.agent.gateway-server-agent-b.test.ts @@ -112,7 +112,7 @@ function expectChannels(call: Record, channel: string) { } function readAgentCommandCall(fromEnd = 1) { - const calls = vi.mocked(agentCommand).mock.calls as unknown[][]; + const calls = vi.mocked(agentCommand).mock.calls; return (calls.at(-fromEnd)?.[0] ?? {}) as Record; } @@ -376,7 +376,7 @@ describe("gateway server agent", () => { test("agent routes bare /new through session reset before running greeting prompt", async () => { await writeMainSessionEntry({ sessionId: "sess-main-before-reset" }); const spy = vi.mocked(agentCommand); - const calls = spy.mock.calls as unknown[][]; + const calls = spy.mock.calls; const callsBefore = calls.length; const res = await rpcReq(ws, "agent", { message: "/new",