refactor(routing): centralize inbound last-route policy

This commit is contained in:
Peter Steinberger
2026-03-08 02:02:00 +00:00
parent b2f8f5e4dd
commit 6a8081a7f3
10 changed files with 172 additions and 9 deletions

View File

@@ -30,6 +30,7 @@ describe("discord route resolution helpers", () => {
accountId: "default",
sessionKey: "agent:main:discord:channel:c1",
mainSessionKey: "agent:main:main",
lastRoutePolicy: "session",
matchedBy: "default",
};
@@ -54,6 +55,7 @@ describe("discord route resolution helpers", () => {
accountId: "default",
sessionKey: "agent:main:discord:channel:c1",
mainSessionKey: "agent:main:main",
lastRoutePolicy: "session",
matchedBy: "default",
};
const configuredRoute = {
@@ -62,6 +64,7 @@ describe("discord route resolution helpers", () => {
agentId: "worker",
sessionKey: "agent:worker:discord:channel:c1",
mainSessionKey: "agent:worker:main",
lastRoutePolicy: "session" as const,
matchedBy: "binding.peer" as const,
},
};

View File

@@ -1,5 +1,6 @@
import type { OpenClawConfig } from "../../config/config.js";
import {
deriveLastRoutePolicy,
resolveAgentRoute,
type ResolvedAgentRoute,
type RoutePeer,
@@ -90,6 +91,10 @@ export function resolveDiscordEffectiveRoute(params: {
...params.route,
sessionKey: boundSessionKey,
agentId: resolveAgentIdFromSessionKey(boundSessionKey),
lastRoutePolicy: deriveLastRoutePolicy({
sessionKey: boundSessionKey,
mainSessionKey: params.route.mainSessionKey,
}),
...(params.matchedBy ? { matchedBy: params.matchedBy } : {}),
};
}