


























@@ -160,14 +160,11 @@ describe("slack prepareSlackMessage inbound contract", () => {
160160const prepared = await prepareWithDefaultCtx(createSlackMessage({}));
161161162162assertPrepared(prepared);
163-expect(enqueueSystemEventMock).toHaveBeenCalledWith(
164-expect.stringContaining("Slack DM from Alice: hi"),
165-expect.objectContaining({
166-sessionKey: expect.any(String),
167-contextKey: "slack:message:D123:1.000",
168-trusted: false,
169-}),
170-);
163+expect(enqueueSystemEventMock).toHaveBeenCalledWith("Slack DM from Alice: hi", {
164+sessionKey: prepared.ctxPayload.SessionKey,
165+contextKey: "slack:message:D123:1.000",
166+trusted: false,
167+});
171168});
172169173170function createThreadSlackCtx(params: { cfg: OpenClawConfig; replies: unknown }) {
@@ -601,9 +598,7 @@ Second paragraph should still reach the agent after Slack's preview cutoff.`;
601598);
602599603600expect(prepared).toBeNull();
604-expect(members).toHaveBeenCalledWith(
605-expect.objectContaining({ token: "token", channel: "C123", limit: 999 }),
606-);
601+expect(members).toHaveBeenCalledWith({ token: "token", channel: "C123", limit: 999 });
607602});
608603609604it("allows bot-authored room messages when an explicit owner is present (#59284)", async () => {
@@ -1076,11 +1071,13 @@ Second paragraph should still reach the agent after Slack's preview cutoff.`;
10761071);
1077107210781073assertPrepared(prepared);
1079-expect(history).toHaveBeenCalledWith(
1080-expect.objectContaining({
1081-limit: 2,
1082-}),
1083-);
1074+expect(history).toHaveBeenCalledWith({
1075+token: "token",
1076+channel: "D123",
1077+latest: "400.000",
1078+inclusive: true,
1079+limit: 2,
1080+});
1084108110851082history.mockClear();
10861083fs.writeFileSync(
@@ -1358,7 +1355,14 @@ Second paragraph should still reach the agent after Slack's preview cutoff.`;
13581355expect(prepared.ctxPayload.SessionKey).toBe("agent:main:slack:direct:u1:thread:500.000");
13591356expect(
13601357(prepared.turn.record as { updateLastRoute?: { sessionKey?: string } }).updateLastRoute,
1361-).toEqual(expect.objectContaining({ sessionKey: prepared.ctxPayload.SessionKey }));
1358+).toEqual({
1359+sessionKey: prepared.ctxPayload.SessionKey,
1360+channel: "slack",
1361+to: "user:U1",
1362+accountId: "default",
1363+threadId: "500.000",
1364+mainDmOwnerPin: undefined,
1365+});
13621366});
1363136713641368it("keeps default main-scope DM last-route metadata on the main session", async () => {
@@ -1384,7 +1388,14 @@ Second paragraph should still reach the agent after Slack's preview cutoff.`;
13841388expect(prepared.ctxPayload.SessionKey).toBe("agent:main:main:thread:600.000");
13851389expect(
13861390(prepared.turn.record as { updateLastRoute?: { sessionKey?: string } }).updateLastRoute,
1387-).toEqual(expect.objectContaining({ sessionKey: "agent:main:main" }));
1391+).toEqual({
1392+sessionKey: "agent:main:main",
1393+channel: "slack",
1394+to: "user:U1",
1395+accountId: "default",
1396+threadId: "600.000",
1397+mainDmOwnerPin: undefined,
1398+});
13881399});
1389140013901401it("routes Slack thread replies through runtime conversation bindings", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。