This commit is contained in:
Ivan Casco 2026-01-29 21:53:30 -05:00 committed by GitHub
commit b7c70b9823
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 1 deletions

View File

@ -77,7 +77,33 @@ describe("resolveAgentRoute", () => {
accountId: null,
peer: { kind: "dm", id: "222222222222222222" },
});
expect(route.sessionKey).toBe("agent:main:discord:dm:alice");
expect(route.sessionKey).toBe("agent:main:dm:alice");
});
test("identityLinks per-channel-peer shares context across channels", () => {
const cfg: ClawdbotConfig = {
session: {
dmScope: "per-channel-peer",
identityLinks: {
alice: ["telegram:111111111", "discord:222222222222222222"],
},
},
};
const telegramRoute = resolveAgentRoute({
cfg,
channel: "telegram",
accountId: null,
peer: { kind: "dm", id: "111111111" },
});
const discordRoute = resolveAgentRoute({
cfg,
channel: "discord",
accountId: null,
peer: { kind: "dm", id: "222222222222222222" },
});
expect(telegramRoute.sessionKey).toBe("agent:main:dm:alice");
expect(discordRoute.sessionKey).toBe("agent:main:dm:alice");
expect(telegramRoute.sessionKey).toBe(discordRoute.sessionKey);
});
test("peer binding wins over account binding", () => {

View File

@ -138,6 +138,9 @@ export function buildAgentPeerSessionKey(params: {
return `agent:${normalizeAgentId(params.agentId)}:${channel}:${accountId}:dm:${peerId}`;
}
if (dmScope === "per-channel-peer" && peerId) {
if (linkedPeerId) {
return `agent:${normalizeAgentId(params.agentId)}:dm:${peerId}`;
}
const channel = (params.channel ?? "").trim().toLowerCase() || "unknown";
return `agent:${normalizeAgentId(params.agentId)}:${channel}:dm:${peerId}`;
}