





















@@ -66,6 +66,17 @@ vi.mock("../send.js", () => ({
6666},
6767}));
686869+const discordTargetMocks = vi.hoisted(() => ({
70+resolveDiscordTargetChannelId: vi.fn(async (target: string) => ({
71+channelId: target === "user:u1" ? "dm-u1" : target,
72+})),
73+}));
74+75+vi.mock("../send.shared.js", () => ({
76+resolveDiscordTargetChannelId: (target: string, opts: unknown) =>
77+discordTargetMocks.resolveDiscordTargetChannelId(target, opts),
78+}));
79+6980vi.mock("../send.messages.js", () => ({
7081editMessageDiscord: (channelId: string, messageId: string, payload: unknown, opts?: unknown) =>
7182deliveryMocks.editMessageDiscord(channelId, messageId, payload, opts),
@@ -315,6 +326,7 @@ beforeEach(() => {
315326vi.useRealTimers();
316327sendMocks.reactMessageDiscord.mockClear();
317328sendMocks.removeReactionDiscord.mockClear();
329+discordTargetMocks.resolveDiscordTargetChannelId.mockClear();
318330editMessageDiscord.mockClear();
319331deliverDiscordReply.mockClear();
320332createDiscordDraftStream.mockClear();
@@ -637,6 +649,43 @@ describe("processDiscordMessage ack reactions", () => {
637649expect(calls).toContainEqual(expect.arrayContaining(["c1", "m1", DEFAULT_EMOJIS.done]));
638650});
639651652+it("resolves tracked reaction to targets like the Discord reaction action", async () => {
653+vi.useFakeTimers();
654+dispatchInboundMessage.mockImplementationOnce(async (params?: DispatchInboundParams) => {
655+await params?.replyOptions?.onToolStart?.({
656+name: "message",
657+phase: "start",
658+args: {
659+action: "react",
660+to: "user:u1",
661+messageId: "m1",
662+emoji: "📈",
663+trackToolCalls: true,
664+},
665+});
666+await vi.advanceTimersByTimeAsync(DEFAULT_TIMING.debounceMs);
667+return createNoQueuedDispatchResult();
668+});
669+670+const ctx = await createAutomaticSourceDeliveryContext({
671+cfg: { messages: { ackReaction: "👀" } },
672+});
673+674+await runProcessDiscordMessage(ctx);
675+await vi.runAllTimersAsync();
676+677+expect(discordTargetMocks.resolveDiscordTargetChannelId).toHaveBeenCalledWith(
678+"user:u1",
679+expect.objectContaining({ accountId: "default" }),
680+);
681+const calls = sendMocks.reactMessageDiscord.mock.calls as unknown as Array<
682+[string, string, string]
683+>;
684+expect(calls).toContainEqual(expect.arrayContaining(["dm-u1", "m1", "📈"]));
685+expect(calls).toContainEqual(expect.arrayContaining(["dm-u1", "m1", "✉️"]));
686+expect(calls).toContainEqual(expect.arrayContaining(["dm-u1", "m1", DEFAULT_EMOJIS.done]));
687+});
688+640689it("shows stall emojis for long no-progress runs", async () => {
641690vi.useFakeTimers();
642691let releaseDispatch!: () => void;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。