fix(gateway): preserve agentId through gateway send path

Landed from #23249 by @Sid-Qin.
Includes extra regression tests for agentId precedence + blank fallback.

Co-authored-by: Sid <201593046+Sid-Qin@users.noreply.github.com>
This commit is contained in:
Peter Steinberger
2026-02-25 23:30:40 +00:00
parent 125f4071bc
commit 2011edc9e5
8 changed files with 146 additions and 8 deletions

View File

@@ -342,6 +342,96 @@ describe("gateway send mirroring", () => {
);
});
it("uses explicit agentId for delivery when sessionKey is not provided", async () => {
mockDeliverySuccess("m-agent");
await runSend({
to: "channel:C1",
message: "hello",
channel: "slack",
agentId: "work",
idempotencyKey: "idem-agent-explicit",
});
expect(mocks.deliverOutboundPayloads).toHaveBeenCalledWith(
expect.objectContaining({
agentId: "work",
mirror: expect.objectContaining({
sessionKey: "agent:work:slack:channel:resolved",
agentId: "work",
}),
}),
);
});
it("uses sessionKey agentId when explicit agentId is omitted", async () => {
mockDeliverySuccess("m-session-agent");
await runSend({
to: "channel:C1",
message: "hello",
channel: "slack",
sessionKey: "agent:work:slack:channel:c1",
idempotencyKey: "idem-session-agent",
});
expect(mocks.deliverOutboundPayloads).toHaveBeenCalledWith(
expect.objectContaining({
agentId: "work",
mirror: expect.objectContaining({
sessionKey: "agent:work:slack:channel:c1",
agentId: "work",
}),
}),
);
});
it("prefers explicit agentId over sessionKey agent for delivery and mirror", async () => {
mockDeliverySuccess("m-agent-precedence");
await runSend({
to: "channel:C1",
message: "hello",
channel: "slack",
agentId: "work",
sessionKey: "agent:main:slack:channel:c1",
idempotencyKey: "idem-agent-precedence",
});
expect(mocks.deliverOutboundPayloads).toHaveBeenCalledWith(
expect.objectContaining({
agentId: "work",
mirror: expect.objectContaining({
sessionKey: "agent:main:slack:channel:c1",
agentId: "work",
}),
}),
);
});
it("ignores blank explicit agentId and falls back to sessionKey agent", async () => {
mockDeliverySuccess("m-agent-blank");
await runSend({
to: "channel:C1",
message: "hello",
channel: "slack",
agentId: " ",
sessionKey: "agent:work:slack:channel:c1",
idempotencyKey: "idem-agent-blank",
});
expect(mocks.deliverOutboundPayloads).toHaveBeenCalledWith(
expect.objectContaining({
agentId: "work",
mirror: expect.objectContaining({
sessionKey: "agent:work:slack:channel:c1",
agentId: "work",
}),
}),
);
});
it("forwards threadId to outbound delivery when provided", async () => {
mockDeliverySuccess("m-thread");