@@ -90,17 +90,23 @@ type FeishuGroupSessionScope = "group" | "group_sender" | "group_topic" | "group
9090
9191function shouldSendNoVisibleReplyFallback ( dispatchResult : {
9292 counts : { final ?: number } ;
93+ failedCounts ?: { final ?: number } ;
9394 noVisibleReplyFallbackEligible ?: boolean ;
9495 queuedFinal ?: boolean ;
9596 sendPolicyDenied ?: boolean ;
9697 sourceReplyDeliveryMode ?: string ;
9798} ) : boolean {
98- return (
99+ const finalCount = dispatchResult . counts . final ?? 0 ;
100+ const failedFinalCount = dispatchResult . failedCounts ?. final ?? 0 ;
101+ const emptyEligibleDispatch =
99102 dispatchResult . noVisibleReplyFallbackEligible === true &&
100103 dispatchResult . queuedFinal !== true &&
101- ( dispatchResult . counts . final ?? 0 ) === 0 &&
104+ finalCount === 0 ;
105+ const queuedFinalFailed = dispatchResult . queuedFinal === true && failedFinalCount > 0 ;
106+ return (
102107 dispatchResult . sendPolicyDenied !== true &&
103- dispatchResult . sourceReplyDeliveryMode !== "message_tool_only"
108+ dispatchResult . sourceReplyDeliveryMode !== "message_tool_only" &&
109+ ( emptyEligibleDispatch || queuedFinalFailed )
104110 ) ;
105111}
106112
@@ -1567,9 +1573,12 @@ export async function handleFeishuMessage(params: {
15671573 } ) ;
15681574 if (
15691575 turnResult . dispatched &&
1570- shouldSendNoVisibleReplyFallback ( turnResult . dispatchResult )
1576+ shouldSendNoVisibleReplyFallback ( {
1577+ ...turnResult . dispatchResult ,
1578+ failedCounts : dispatcher . getFailedCounts ( ) ,
1579+ } )
15711580 ) {
1572- await ensureNoVisibleReplyFallback ( "broadcast-dispatch-complete-zero-final " ) ;
1581+ await ensureNoVisibleReplyFallback ( "broadcast-dispatch-complete-no-visible-reply " ) ;
15731582 }
15741583 } else {
15751584 // Observer agent: no-op dispatcher (session entry + inference, no Feishu reply).
@@ -1759,8 +1768,13 @@ export async function handleFeishuMessage(params: {
17591768 }
17601769 const { dispatchResult } = turnResult ;
17611770 const { queuedFinal, counts } = dispatchResult ;
1762- if ( shouldSendNoVisibleReplyFallback ( dispatchResult ) ) {
1763- await ensureNoVisibleReplyFallback ( "dispatch-complete-zero-final" ) ;
1771+ if (
1772+ shouldSendNoVisibleReplyFallback ( {
1773+ ...dispatchResult ,
1774+ failedCounts : dispatcher . getFailedCounts ( ) ,
1775+ } )
1776+ ) {
1777+ await ensureNoVisibleReplyFallback ( "dispatch-complete-no-visible-reply" ) ;
17641778 }
17651779
17661780 log (
0 commit comments