
























@@ -2797,12 +2797,10 @@ describe("dispatchReplyFromConfig", () => {
2797279727982798await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
279927992800-expect(dispatcher.sendToolResult).toHaveBeenCalledWith(
2801-expect.objectContaining({ text: "Approval required." }),
2802-);
2803-expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
2804-expect.objectContaining({ text: "done" }),
2805-);
2800+expect(firstToolResultPayload(dispatcher)?.text).toBe("Approval required.");
2801+expect(
2802+((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
2803+).toBe("done");
28062804});
2807280528082806it("suppresses local discord exec approval tool prompts when the native runtime is active", async () => {
@@ -2850,9 +2848,9 @@ describe("dispatchReplyFromConfig", () => {
28502848await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
2851284928522850expect(dispatcher.sendToolResult).not.toHaveBeenCalled();
2853-expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
2854-expect.objectContaining({ text: "done" }),
2855-);
2851+expect(
2852+((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
2853+).toBe("done");
28562854} finally {
28572855await reporter.stop();
28582856}
@@ -2917,29 +2915,32 @@ describe("dispatchReplyFromConfig", () => {
29172915const replyResolver = async () => ({ text: "hi" }) satisfies ReplyPayload;
29182916await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
291929172920-expect(hookMocks.runner.runMessageReceived).toHaveBeenCalledWith(
2921-expect.objectContaining({
2922-from: ctx.From,
2923-content: "/search hello",
2924-timestamp: 1710000000000,
2925-metadata: expect.objectContaining({
2926-originatingChannel: "Telegram",
2927-originatingTo: "telegram:999",
2928-messageId: "sid-full",
2929-senderId: "user-1",
2930-senderName: "Alice",
2931-senderUsername: "alice",
2932-senderE164: "+15555550123",
2933-guildId: "guild-123",
2934-channelName: "alerts",
2935-}),
2936-}),
2937-expect.objectContaining({
2938-channelId: "telegram",
2939-accountId: "acc-1",
2940-conversationId: "telegram:999",
2941-}),
2942-);
2918+const [event, hookContext] = hookMocks.runner.runMessageReceived.mock.calls[0] as
2919+| [
2920+{
2921+content?: unknown;
2922+from?: unknown;
2923+metadata?: Record<string, unknown>;
2924+timestamp?: unknown;
2925+},
2926+{ accountId?: unknown; channelId?: unknown; conversationId?: unknown },
2927+]
2928+| [];
2929+expect(event?.from).toBe(ctx.From);
2930+expect(event?.content).toBe("/search hello");
2931+expect(event?.timestamp).toBe(1710000000000);
2932+expect(event?.metadata?.originatingChannel).toBe("Telegram");
2933+expect(event?.metadata?.originatingTo).toBe("telegram:999");
2934+expect(event?.metadata?.messageId).toBe("sid-full");
2935+expect(event?.metadata?.senderId).toBe("user-1");
2936+expect(event?.metadata?.senderName).toBe("Alice");
2937+expect(event?.metadata?.senderUsername).toBe("alice");
2938+expect(event?.metadata?.senderE164).toBe("+15555550123");
2939+expect(event?.metadata?.guildId).toBe("guild-123");
2940+expect(event?.metadata?.channelName).toBe("alerts");
2941+expect(hookContext?.channelId).toBe("telegram");
2942+expect(hookContext?.accountId).toBe("acc-1");
2943+expect(hookContext?.conversationId).toBe("telegram:999");
29432944});
2944294529452946it("does not broadcast inbound claims without a core-owned plugin binding", async () => {
@@ -2975,36 +2976,35 @@ describe("dispatchReplyFromConfig", () => {
2975297629762977expect(result).toEqual({ queuedFinal: true, counts: { tool: 0, block: 0, final: 0 } });
29772978expect(hookMocks.runner.runInboundClaim).not.toHaveBeenCalled();
2978-expect(hookMocks.runner.runMessageReceived).toHaveBeenCalledWith(
2979-expect.objectContaining({
2980-from: ctx.From,
2981-content: "who are you",
2982-metadata: expect.objectContaining({
2983-messageId: "msg-claim-1",
2984-originatingChannel: "telegram",
2985-originatingTo: "telegram:-10099",
2986-senderId: "user-9",
2987-senderUsername: "ada",
2988-threadId: 77,
2989-}),
2990-}),
2991-expect.objectContaining({
2992-channelId: "telegram",
2993-accountId: "default",
2994-conversationId: "telegram:-10099",
2995-}),
2996-);
2997-expect(internalHookMocks.triggerInternalHook).toHaveBeenCalledWith(
2998-expect.objectContaining({
2999-type: "message",
3000-action: "received",
3001-sessionKey: "agent:main:hook-test",
3002-}),
3003-);
2979+const [event, hookContext] = hookMocks.runner.runMessageReceived.mock.calls[0] as
2980+| [
2981+{ content?: unknown; from?: unknown; metadata?: Record<string, unknown> },
2982+{ accountId?: unknown; channelId?: unknown; conversationId?: unknown },
2983+]
2984+| [];
2985+expect(event?.from).toBe(ctx.From);
2986+expect(event?.content).toBe("who are you");
2987+expect(event?.metadata?.messageId).toBe("msg-claim-1");
2988+expect(event?.metadata?.originatingChannel).toBe("telegram");
2989+expect(event?.metadata?.originatingTo).toBe("telegram:-10099");
2990+expect(event?.metadata?.senderId).toBe("user-9");
2991+expect(event?.metadata?.senderUsername).toBe("ada");
2992+expect(event?.metadata?.threadId).toBe(77);
2993+expect(hookContext?.channelId).toBe("telegram");
2994+expect(hookContext?.accountId).toBe("default");
2995+expect(hookContext?.conversationId).toBe("telegram:-10099");
2996+const internalHookEvent = (
2997+internalHookMocks.triggerInternalHook.mock.calls as unknown as Array<
2998+[{ action?: unknown; sessionKey?: unknown; type?: unknown }]
2999+>
3000+)[0]?.[0];
3001+expect(internalHookEvent?.type).toBe("message");
3002+expect(internalHookEvent?.action).toBe("received");
3003+expect(internalHookEvent?.sessionKey).toBe("agent:main:hook-test");
30043004expect(replyResolver).toHaveBeenCalledTimes(1);
3005-expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
3006-expect.objectContaining({ text: "core reply" }),
3007-);
3005+expect(
3006+((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
3007+).toBe("core reply");
30083008});
3009300930103010it("emits internal message:received hook when a session key is available", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。