@@ -2,7 +2,11 @@ import { describe, expect, test, vi } from "vitest";
22import type { ChatType } from "../channels/chat-type.js" ;
33import type { OpenClawConfig } from "../config/config.js" ;
44import * as routingBindings from "./bindings.js" ;
5- import { resolveAgentRoute } from "./resolve-route.js" ;
5+ import {
6+ deriveLastRoutePolicy ,
7+ resolveAgentRoute ,
8+ resolveInboundLastRouteSessionKey ,
9+ } from "./resolve-route.js" ;
610
711describe ( "resolveAgentRoute" , ( ) => {
812 const resolveDiscordGuildRoute = ( cfg : OpenClawConfig ) =>
@@ -25,6 +29,7 @@ describe("resolveAgentRoute", () => {
2529 expect ( route . agentId ) . toBe ( "main" ) ;
2630 expect ( route . accountId ) . toBe ( "default" ) ;
2731 expect ( route . sessionKey ) . toBe ( "agent:main:main" ) ;
32+ expect ( route . lastRoutePolicy ) . toBe ( "main" ) ;
2833 expect ( route . matchedBy ) . toBe ( "default" ) ;
2934 } ) ;
3035
@@ -47,9 +52,47 @@ describe("resolveAgentRoute", () => {
4752 peer : { kind : "direct" , id : "+15551234567" } ,
4853 } ) ;
4954 expect ( route . sessionKey ) . toBe ( testCase . expected ) ;
55+ expect ( route . lastRoutePolicy ) . toBe ( "session" ) ;
5056 }
5157 } ) ;
5258
59+ test ( "resolveInboundLastRouteSessionKey follows route policy" , ( ) => {
60+ expect (
61+ resolveInboundLastRouteSessionKey ( {
62+ route : {
63+ mainSessionKey : "agent:main:main" ,
64+ lastRoutePolicy : "main" ,
65+ } ,
66+ sessionKey : "agent:main:discord:direct:user-1" ,
67+ } ) ,
68+ ) . toBe ( "agent:main:main" ) ;
69+
70+ expect (
71+ resolveInboundLastRouteSessionKey ( {
72+ route : {
73+ mainSessionKey : "agent:main:main" ,
74+ lastRoutePolicy : "session" ,
75+ } ,
76+ sessionKey : "agent:main:telegram:atlas:direct:123" ,
77+ } ) ,
78+ ) . toBe ( "agent:main:telegram:atlas:direct:123" ) ;
79+ } ) ;
80+
81+ test ( "deriveLastRoutePolicy collapses only main-session routes" , ( ) => {
82+ expect (
83+ deriveLastRoutePolicy ( {
84+ sessionKey : "agent:main:main" ,
85+ mainSessionKey : "agent:main:main" ,
86+ } ) ,
87+ ) . toBe ( "main" ) ;
88+ expect (
89+ deriveLastRoutePolicy ( {
90+ sessionKey : "agent:main:telegram:direct:123" ,
91+ mainSessionKey : "agent:main:main" ,
92+ } ) ,
93+ ) . toBe ( "session" ) ;
94+ } ) ;
95+
5396 test ( "identityLinks applies to direct-message scopes" , ( ) => {
5497 const cases = [
5598 {
0 commit comments