@@ -884,7 +884,7 @@ describe("deliverSubagentAnnouncement active requester steering", () => {
884884} ) ;
885885
886886describe ( "deliverSubagentAnnouncement completion delivery" , ( ) => {
887- it ( "uses an active requester queue as the completion handoff when message-tool delivery is not required " , async ( ) => {
887+ it ( "uses direct requester-agent handoff before steering active completion requesters " , async ( ) => {
888888 const callGateway = createGatewayMock ( ) ;
889889 const queueEmbeddedPiMessageWithOutcome = createQueueOutcomeMock ( true ) ;
890890 const result = await deliverSlackThreadAnnouncement ( {
@@ -898,24 +898,21 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
898898
899899 expectRecordFields ( result , {
900900 delivered : true ,
901- path : "steered" ,
902- enqueuedAt : 4_100 ,
903- deliveredAt : 4_200 ,
901+ path : "direct" ,
902+ phases : [ { phase : "direct-primary" , delivered : true , path : "direct" , error : undefined } ] ,
904903 } ) ;
905- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledWith (
906- "requester-session-1" ,
907- "child done" ,
908- {
909- steeringMode : "all" ,
910- debounceMs : 500 ,
911- waitForTranscriptCommit : true ,
912- deliveryTimeoutMs : 120_000 ,
913- } ,
914- ) ;
915- expect ( callGateway ) . not . toHaveBeenCalled ( ) ;
904+ expectGatewayAgentParams ( callGateway , {
905+ deliver : true ,
906+ channel : "slack" ,
907+ accountId : "acct-1" ,
908+ to : "channel:C123" ,
909+ threadId : "171.222" ,
910+ bestEffortDeliver : true ,
911+ } ) ;
912+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
916913 } ) ;
917914
918- it ( "does not also direct-run a queued active completion" , async ( ) => {
915+ it ( "falls back to queued steering only after direct active completion handoff fails " , async ( ) => {
919916 const callGateway = createGatewayMock ( ) ;
920917 const queueEmbeddedPiMessageWithOutcome = createQueueOutcomeMock ( true ) ;
921918 const result = await deliverSlackThreadAnnouncement ( {
@@ -931,11 +928,27 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
931928 expectRecordFields ( result , {
932929 delivered : true ,
933930 path : "steered" ,
934- enqueuedAt : 4_100 ,
935- deliveredAt : 4_200 ,
931+ phases : [
932+ {
933+ phase : "direct-primary" ,
934+ delivered : false ,
935+ path : "direct" ,
936+ deliveredAt : undefined ,
937+ enqueuedAt : undefined ,
938+ error : "completion agent did not produce a visible reply" ,
939+ } ,
940+ {
941+ phase : "steer-fallback" ,
942+ delivered : true ,
943+ path : "steered" ,
944+ deliveredAt : 4_200 ,
945+ enqueuedAt : 4_100 ,
946+ error : undefined ,
947+ } ,
948+ ] ,
936949 } ) ;
950+ expect ( callGateway ) . toHaveBeenCalledTimes ( 1 ) ;
937951 expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledTimes ( 1 ) ;
938- expect ( callGateway ) . not . toHaveBeenCalled ( ) ;
939952 } ) ;
940953
941954 it ( "keeps direct external delivery for dormant completion requesters" , async ( ) => {
@@ -1525,28 +1538,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
15251538 to : "channel:C123" ,
15261539 threadId : "171.222" ,
15271540 } ) ;
1528- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledTimes ( 2 ) ;
1529- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenNthCalledWith (
1530- 1 ,
1531- "requester-session-4" ,
1532- "child done" ,
1533- {
1534- debounceMs : 500 ,
1535- deliveryTimeoutMs : 120_000 ,
1536- steeringMode : "all" ,
1537- waitForTranscriptCommit : true ,
1538- } ,
1539- ) ;
1540- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenNthCalledWith (
1541- 2 ,
1542- "requester-session-4" ,
1543- "child done" ,
1544- {
1545- debounceMs : 500 ,
1546- deliveryTimeoutMs : 120_000 ,
1547- steeringMode : "all" ,
1548- } ,
1549- ) ;
1541+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
15501542 expect ( sendMessage ) . not . toHaveBeenCalled ( ) ;
15511543 } ) ;
15521544
@@ -1765,17 +1757,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
17651757 } ,
17661758 ] ,
17671759 } ) ;
1768- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledTimes ( 1 ) ;
1769- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledWith (
1770- "requester-session-telegram" ,
1771- "child done" ,
1772- {
1773- steeringMode : "all" ,
1774- debounceMs : 500 ,
1775- waitForTranscriptCommit : true ,
1776- deliveryTimeoutMs : 10 ,
1777- } ,
1778- ) ;
1760+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
17791761 expect ( callGateway ) . toHaveBeenCalledTimes ( 1 ) ;
17801762 expect ( sendMessage ) . not . toHaveBeenCalled ( ) ;
17811763 } ) ;
@@ -1835,7 +1817,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
18351817 } ,
18361818 ] ,
18371819 } ) ;
1838- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledTimes ( 1 ) ;
1820+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
18391821 expect ( callGateway ) . toHaveBeenCalledTimes ( 1 ) ;
18401822 } ) ;
18411823
@@ -2507,7 +2489,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
25072489 ) ;
25082490 } ) ;
25092491
2510- it ( "keeps generated media completions on the active requester session path" , async ( ) => {
2492+ it ( "keeps generated media completions on the direct requester handoff path" , async ( ) => {
25112493 const callGateway = createGatewayMock ( ) ;
25122494 const queueEmbeddedPiMessageWithOutcome = createQueueOutcomeMock ( true ) ;
25132495 const sendMessage = createSendMessageMock ( ) ;
@@ -2540,23 +2522,20 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
25402522
25412523 expectRecordFields ( result , {
25422524 delivered : true ,
2543- path : "steered" ,
2544- enqueuedAt : 4_100 ,
2545- deliveredAt : 4_200 ,
2525+ path : "direct" ,
25462526 } ) ;
2547- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledWith (
2548- "requester-session-channel" ,
2549- "child done" ,
2550- {
2551- steeringMode : "all" ,
2552- sourceReplyDeliveryMode : "message_tool_only" ,
2553- debounceMs : 500 ,
2554- waitForTranscriptCommit : true ,
2555- deliveryTimeoutMs : 120_000 ,
2556- } ,
2527+ expect ( callGateway ) . toHaveBeenCalledTimes ( 1 ) ;
2528+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
2529+ expect ( sendMessage ) . toHaveBeenCalledWith (
2530+ expect . objectContaining ( {
2531+ channel : "slack" ,
2532+ accountId : "acct-1" ,
2533+ to : "channel:C123" ,
2534+ content : "The generated video is ready." ,
2535+ mediaUrls : [ "/tmp/generated-corgi.mp4" ] ,
2536+ idempotencyKey : "announce-channel-media-active-direct:generated-media-direct" ,
2537+ } ) ,
25572538 ) ;
2558- expect ( callGateway ) . not . toHaveBeenCalled ( ) ;
2559- expect ( sendMessage ) . not . toHaveBeenCalled ( ) ;
25602539 } ) ;
25612540
25622541 it ( "directly delivers missing generated media after active requester wake failure" , async ( ) => {
@@ -2612,7 +2591,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
26122591 delivered : true ,
26132592 path : "direct" ,
26142593 } ) ;
2615- expect ( queueEmbeddedPiMessageWithOutcome ) . toHaveBeenCalledTimes ( 2 ) ;
2594+ expect ( queueEmbeddedPiMessageWithOutcome ) . not . toHaveBeenCalled ( ) ;
26162595 expect ( callGateway ) . toHaveBeenCalledTimes ( 1 ) ;
26172596 expect ( sendMessage ) . toHaveBeenCalledWith (
26182597 expect . objectContaining ( {
0 commit comments