@@ -234,6 +234,30 @@ export const registerTelegramHandlers = ({
234234 const promptContextMinTimestampMs = normalizePromptContextMinTimestampMs ( timestampMs ) ;
235235 return promptContextMinTimestampMs === undefined ? { } : { promptContextMinTimestampMs } ;
236236 } ;
237+ const sourceMessageIdOptions = (
238+ messages : readonly Message [ ] ,
239+ ) : Pick < TelegramMessageContextOptions , "sourceMessageIds" > => {
240+ const sourceMessageIds = messages
241+ . map ( ( msg ) => ( typeof msg . message_id === "number" ? String ( msg . message_id ) : undefined ) )
242+ . filter ( ( messageId ) : messageId is string => Boolean ( messageId ) ) ;
243+ return sourceMessageIds . length > 0 ? { sourceMessageIds } : { } ;
244+ } ;
245+ const sessionBoundMessageIds = (
246+ messageId : string ,
247+ sourceMessageIds ?: readonly string [ ] ,
248+ ) : string [ ] => {
249+ const seen = new Set < string > ( ) ;
250+ const ids : string [ ] = [ ] ;
251+ for ( const candidate of [ ...( sourceMessageIds ?? [ ] ) , messageId ] ) {
252+ const normalized = candidate . trim ( ) ;
253+ if ( ! normalized || seen . has ( normalized ) ) {
254+ continue ;
255+ }
256+ seen . add ( normalized ) ;
257+ ids . push ( normalized ) ;
258+ }
259+ return ids ;
260+ } ;
237261 const latestPromptContextMinTimestampMs = (
238262 ...timestamps : Array < number | undefined >
239263 ) : number | undefined => {
@@ -445,6 +469,7 @@ export const registerTelegramHandlers = ({
445469 }
446470 if ( entries . length === 1 ) {
447471 await processMessageWithReplyChain ( last . ctx , last . msg , last . allMedia , last . storeAllowFrom , {
472+ ...sourceMessageIdOptions ( [ last . msg ] ) ,
448473 receivedAtMs : last . receivedAtMs ,
449474 ingressBuffer : "inbound-debounce" ,
450475 ...promptContextBoundaryOptions ( last . promptContextMinTimestampMs ) ,
@@ -478,6 +503,7 @@ export const registerTelegramHandlers = ({
478503 first . storeAllowFrom ,
479504 {
480505 ...( messageIdOverride ? { messageIdOverride } : { } ) ,
506+ ...sourceMessageIdOptions ( entries . map ( ( { msg } ) => msg ) ) ,
481507 receivedAtMs : first . receivedAtMs ,
482508 ingressBuffer : "inbound-debounce" ,
483509 ...promptContextBoundaryOptions ( promptContextMinTimestampMs ) ,
@@ -795,7 +821,10 @@ export const registerTelegramHandlers = ({
795821 primaryEntry . msg ,
796822 allMedia ,
797823 entry . storeAllowFrom ,
798- promptContextBoundaryOptions ( entry . promptContextMinTimestampMs ) ,
824+ {
825+ ...sourceMessageIdOptions ( messages . map ( ( { msg } ) => msg ) ) ,
826+ ...promptContextBoundaryOptions ( entry . promptContextMinTimestampMs ) ,
827+ } ,
799828 ) ;
800829 } catch ( err ) {
801830 runtime . error ?.( danger ( `media group handler failed: ${ String ( err ) } ` ) ) ;
@@ -829,6 +858,7 @@ export const registerTelegramHandlers = ({
829858 const syntheticCtx = buildSyntheticContext ( baseCtx , syntheticMessage ) ;
830859 await processMessageWithReplyChain ( syntheticCtx , syntheticMessage , [ ] , storeAllowFrom , {
831860 messageIdOverride : String ( last . msg . message_id ) ,
861+ ...sourceMessageIdOptions ( messages . map ( ( { msg } ) => msg ) ) ,
832862 receivedAtMs : first . receivedAtMs ,
833863 ingressBuffer : "text-fragment" ,
834864 ...promptContextBoundaryOptions ( entry . promptContextMinTimestampMs ) ,
@@ -1010,12 +1040,17 @@ export const registerTelegramHandlers = ({
10101040 options ?. resolvePromptContext ?.( params ) ??
10111041 buildPromptContextForMessage ( msg , replyChainNodes , options , params . sessionKey ) ,
10121042 markSessionBoundMessage : ( params ) => {
1013- messageCache . markSessionBound ( {
1014- accountId,
1015- chatId : msg . chat . id ,
1016- messageId : params . messageId ,
1017- sessionKey : params . sessionKey ,
1018- } ) ;
1043+ for ( const messageId of sessionBoundMessageIds (
1044+ params . messageId ,
1045+ options ?. sourceMessageIds ,
1046+ ) ) {
1047+ messageCache . markSessionBound ( {
1048+ accountId,
1049+ chatId : msg . chat . id ,
1050+ messageId,
1051+ sessionKey : params . sessionKey ,
1052+ } ) ;
1053+ }
10191054 options ?. markSessionBoundMessage ?.( params ) ;
10201055 } ,
10211056 } ;
0 commit comments