@@ -2797,12 +2797,10 @@ describe("dispatchReplyFromConfig", () => {
27972797
27982798 await dispatchReplyFromConfig ( { ctx, cfg, dispatcher, replyResolver } ) ;
27992799
2800- expect ( dispatcher . sendToolResult ) . toHaveBeenCalledWith (
2801- expect . objectContaining ( { text : "Approval required." } ) ,
2802- ) ;
2803- expect ( dispatcher . sendFinalReply ) . toHaveBeenCalledWith (
2804- expect . objectContaining ( { text : "done" } ) ,
2805- ) ;
2800+ expect ( firstToolResultPayload ( dispatcher ) ?. text ) . toBe ( "Approval required." ) ;
2801+ expect (
2802+ ( ( dispatcher . sendFinalReply as Mock ) . mock . calls [ 0 ] ?. [ 0 ] as ReplyPayload | undefined ) ?. text ,
2803+ ) . toBe ( "done" ) ;
28062804 } ) ;
28072805
28082806 it ( "suppresses local discord exec approval tool prompts when the native runtime is active" , async ( ) => {
@@ -2850,9 +2848,9 @@ describe("dispatchReplyFromConfig", () => {
28502848 await dispatchReplyFromConfig ( { ctx, cfg, dispatcher, replyResolver } ) ;
28512849
28522850 expect ( dispatcher . sendToolResult ) . not . toHaveBeenCalled ( ) ;
2853- expect ( dispatcher . sendFinalReply ) . toHaveBeenCalledWith (
2854- expect . objectContaining ( { text : "done" } ) ,
2855- ) ;
2851+ expect (
2852+ ( ( dispatcher . sendFinalReply as Mock ) . mock . calls [ 0 ] ?. [ 0 ] as ReplyPayload | undefined ) ?. text ,
2853+ ) . toBe ( "done" ) ;
28562854 } finally {
28572855 await reporter . stop ( ) ;
28582856 }
@@ -2917,29 +2915,32 @@ describe("dispatchReplyFromConfig", () => {
29172915 const replyResolver = async ( ) => ( { text : "hi" } ) satisfies ReplyPayload ;
29182916 await dispatchReplyFromConfig ( { ctx, cfg, dispatcher, replyResolver } ) ;
29192917
2920- expect ( hookMocks . runner . runMessageReceived ) . toHaveBeenCalledWith (
2921- expect . objectContaining ( {
2922- from : ctx . From ,
2923- content : "/search hello" ,
2924- timestamp : 1710000000000 ,
2925- metadata : expect . objectContaining ( {
2926- originatingChannel : "Telegram" ,
2927- originatingTo : "telegram:999" ,
2928- messageId : "sid-full" ,
2929- senderId : "user-1" ,
2930- senderName : "Alice" ,
2931- senderUsername : "alice" ,
2932- senderE164 : "+15555550123" ,
2933- guildId : "guild-123" ,
2934- channelName : "alerts" ,
2935- } ) ,
2936- } ) ,
2937- expect . objectContaining ( {
2938- channelId : "telegram" ,
2939- accountId : "acc-1" ,
2940- conversationId : "telegram:999" ,
2941- } ) ,
2942- ) ;
2918+ const [ event , hookContext ] = hookMocks . runner . runMessageReceived . mock . calls [ 0 ] as
2919+ | [
2920+ {
2921+ content ?: unknown ;
2922+ from ?: unknown ;
2923+ metadata ?: Record < string , unknown > ;
2924+ timestamp ?: unknown ;
2925+ } ,
2926+ { accountId ?: unknown ; channelId ?: unknown ; conversationId ?: unknown } ,
2927+ ]
2928+ | [ ] ;
2929+ expect ( event ?. from ) . toBe ( ctx . From ) ;
2930+ expect ( event ?. content ) . toBe ( "/search hello" ) ;
2931+ expect ( event ?. timestamp ) . toBe ( 1710000000000 ) ;
2932+ expect ( event ?. metadata ?. originatingChannel ) . toBe ( "Telegram" ) ;
2933+ expect ( event ?. metadata ?. originatingTo ) . toBe ( "telegram:999" ) ;
2934+ expect ( event ?. metadata ?. messageId ) . toBe ( "sid-full" ) ;
2935+ expect ( event ?. metadata ?. senderId ) . toBe ( "user-1" ) ;
2936+ expect ( event ?. metadata ?. senderName ) . toBe ( "Alice" ) ;
2937+ expect ( event ?. metadata ?. senderUsername ) . toBe ( "alice" ) ;
2938+ expect ( event ?. metadata ?. senderE164 ) . toBe ( "+15555550123" ) ;
2939+ expect ( event ?. metadata ?. guildId ) . toBe ( "guild-123" ) ;
2940+ expect ( event ?. metadata ?. channelName ) . toBe ( "alerts" ) ;
2941+ expect ( hookContext ?. channelId ) . toBe ( "telegram" ) ;
2942+ expect ( hookContext ?. accountId ) . toBe ( "acc-1" ) ;
2943+ expect ( hookContext ?. conversationId ) . toBe ( "telegram:999" ) ;
29432944 } ) ;
29442945
29452946 it ( "does not broadcast inbound claims without a core-owned plugin binding" , async ( ) => {
@@ -2975,36 +2976,35 @@ describe("dispatchReplyFromConfig", () => {
29752976
29762977 expect ( result ) . toEqual ( { queuedFinal : true , counts : { tool : 0 , block : 0 , final : 0 } } ) ;
29772978 expect ( hookMocks . runner . runInboundClaim ) . not . toHaveBeenCalled ( ) ;
2978- expect ( hookMocks . runner . runMessageReceived ) . toHaveBeenCalledWith (
2979- expect . objectContaining ( {
2980- from : ctx . From ,
2981- content : "who are you" ,
2982- metadata : expect . objectContaining ( {
2983- messageId : "msg-claim-1" ,
2984- originatingChannel : "telegram" ,
2985- originatingTo : "telegram:-10099" ,
2986- senderId : "user-9" ,
2987- senderUsername : "ada" ,
2988- threadId : 77 ,
2989- } ) ,
2990- } ) ,
2991- expect . objectContaining ( {
2992- channelId : "telegram" ,
2993- accountId : "default" ,
2994- conversationId : "telegram:-10099" ,
2995- } ) ,
2996- ) ;
2997- expect ( internalHookMocks . triggerInternalHook ) . toHaveBeenCalledWith (
2998- expect . objectContaining ( {
2999- type : "message" ,
3000- action : "received" ,
3001- sessionKey : "agent:main:hook-test" ,
3002- } ) ,
3003- ) ;
2979+ const [ event , hookContext ] = hookMocks . runner . runMessageReceived . mock . calls [ 0 ] as
2980+ | [
2981+ { content ?: unknown ; from ?: unknown ; metadata ?: Record < string , unknown > } ,
2982+ { accountId ?: unknown ; channelId ?: unknown ; conversationId ?: unknown } ,
2983+ ]
2984+ | [ ] ;
2985+ expect ( event ?. from ) . toBe ( ctx . From ) ;
2986+ expect ( event ?. content ) . toBe ( "who are you" ) ;
2987+ expect ( event ?. metadata ?. messageId ) . toBe ( "msg-claim-1" ) ;
2988+ expect ( event ?. metadata ?. originatingChannel ) . toBe ( "telegram" ) ;
2989+ expect ( event ?. metadata ?. originatingTo ) . toBe ( "telegram:-10099" ) ;
2990+ expect ( event ?. metadata ?. senderId ) . toBe ( "user-9" ) ;
2991+ expect ( event ?. metadata ?. senderUsername ) . toBe ( "ada" ) ;
2992+ expect ( event ?. metadata ?. threadId ) . toBe ( 77 ) ;
2993+ expect ( hookContext ?. channelId ) . toBe ( "telegram" ) ;
2994+ expect ( hookContext ?. accountId ) . toBe ( "default" ) ;
2995+ expect ( hookContext ?. conversationId ) . toBe ( "telegram:-10099" ) ;
2996+ const internalHookEvent = (
2997+ internalHookMocks . triggerInternalHook . mock . calls as unknown as Array <
2998+ [ { action ?: unknown ; sessionKey ?: unknown ; type ?: unknown } ]
2999+ >
3000+ ) [ 0 ] ?. [ 0 ] ;
3001+ expect ( internalHookEvent ?. type ) . toBe ( "message" ) ;
3002+ expect ( internalHookEvent ?. action ) . toBe ( "received" ) ;
3003+ expect ( internalHookEvent ?. sessionKey ) . toBe ( "agent:main:hook-test" ) ;
30043004 expect ( replyResolver ) . toHaveBeenCalledTimes ( 1 ) ;
3005- expect ( dispatcher . sendFinalReply ) . toHaveBeenCalledWith (
3006- expect . objectContaining ( { text : "core reply" } ) ,
3007- ) ;
3005+ expect (
3006+ ( ( dispatcher . sendFinalReply as Mock ) . mock . calls [ 0 ] ?. [ 0 ] as ReplyPayload | undefined ) ?. text ,
3007+ ) . toBe ( "core reply" ) ;
30083008 } ) ;
30093009
30103010 it ( "emits internal message:received hook when a session key is available" , async ( ) => {
0 commit comments