
























@@ -5043,6 +5043,72 @@ describe("dispatchReplyFromConfig", () => {
50435043expect(processedEvent?.sessionKey).toBe("agent:main:main");
50445044});
504550455046+it("carries the session store UUID on interactive diagnostic events", async () => {
5047+setNoAbort();
5048+sessionStoreMocks.currentEntry = {
5049+sessionId: "test-uuid-1234",
5050+};
5051+const cfg = { diagnostics: { enabled: true } } as OpenClawConfig;
5052+const dispatcher = createDispatcher();
5053+const ctx = buildTestCtx({
5054+Provider: "slack",
5055+Surface: "slack",
5056+SessionKey: "agent:main:main",
5057+MessageSid: "msg-1",
5058+To: "slack:C123",
5059+});
5060+5061+const replyResolver = async () => ({ text: "hi" }) satisfies ReplyPayload;
5062+await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
5063+5064+expect(diagnosticMocks.logMessageQueued).toHaveBeenCalledTimes(1);
5065+expect(diagnosticMocks.logMessageQueued).toHaveBeenCalledWith(
5066+expect.objectContaining({
5067+sessionId: "test-uuid-1234",
5068+sessionKey: "agent:main:main",
5069+}),
5070+);
5071+expect(diagnosticMocks.logSessionStateChange).toHaveBeenCalledWith({
5072+sessionId: "test-uuid-1234",
5073+sessionKey: "agent:main:main",
5074+state: "processing",
5075+reason: "message_start",
5076+});
5077+});
5078+5079+it("does not stamp a command target's UUID under the source session key", async () => {
5080+// Native command turn: runs in the source conversation but targets a
5081+// different session. resolveSessionStoreLookup is command-target-aware, so
5082+// its entry is the *target's* — while the lifecycle reports the *source*
5083+// key. The UUID must NOT be attached here, to avoid mis-associating a
5084+// session id with the wrong session key (agentweave#187).
5085+setNoAbort();
5086+sessionStoreMocks.currentEntry = {
5087+sessionId: "target-session-uuid-9999",
5088+};
5089+const cfg = { diagnostics: { enabled: true } } as OpenClawConfig;
5090+const dispatcher = createDispatcher();
5091+const ctx = buildTestCtx({
5092+Provider: "slack",
5093+Surface: "slack",
5094+CommandSource: "native",
5095+SessionKey: "agent:main:source-convo",
5096+CommandTargetSessionKey: "agent:main:target-session",
5097+MessageSid: "msg-1",
5098+To: "slack:C123",
5099+});
5100+5101+const replyResolver = async () => ({ text: "hi" }) satisfies ReplyPayload;
5102+await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
5103+5104+expect(diagnosticMocks.logMessageQueued).toHaveBeenCalledTimes(1);
5105+const queued = diagnosticMocks.logMessageQueued.mock.calls[0]?.[0] as
5106+| { sessionId?: unknown; sessionKey?: unknown }
5107+| undefined;
5108+expect(queued?.sessionKey).toBe("agent:main:source-convo");
5109+expect(queued?.sessionId).toBeUndefined();
5110+});
5111+50465112it("marks diagnostic progress for real reply events but not reply start callbacks", async () => {
50475113setNoAbort();
50485114const cfg = { diagnostics: { enabled: true } } as OpenClawConfig;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。