11import { resolveExternalBestEffortDeliveryTarget } from "../infra/outbound/best-effort-delivery.js" ;
22import { sendMessage } from "../infra/outbound/message.js" ;
3- import { parseAgentSessionKey } from "../routing/session-key.js" ;
43import { isGatewayMessageChannel , normalizeMessageChannel } from "../utils/message-channel.js" ;
54import { callGatewayTool } from "./tools/gateway.js" ;
65
@@ -38,11 +37,13 @@ export function buildExecApprovalFollowupPrompt(resultText: string): string {
3837 return [
3938 "An async command the user already approved has completed." ,
4039 "Do not run the command again." ,
40+ "If the task requires more steps, continue from this result before replying to the user." ,
41+ "Only ask the user for help if you are actually blocked." ,
4142 "" ,
4243 "Exact completion details:" ,
4344 trimmed ,
4445 "" ,
45- "Reply to the user in a helpful way." ,
46+ "Continue the task if needed, then reply to the user in a helpful way." ,
4647 "If it succeeded, share the relevant output." ,
4748 "If it failed, explain what went wrong." ,
4849 ] . join ( "\n" ) ;
@@ -69,59 +70,50 @@ export async function sendExecApprovalFollowup(
6970 ? normalizedTurnSourceChannel
7071 : undefined ;
7172
73+ if ( sessionKey ) {
74+ await callGatewayTool (
75+ "agent" ,
76+ { timeoutMs : 60_000 } ,
77+ {
78+ sessionKey,
79+ message : buildExecApprovalFollowupPrompt ( resultText ) ,
80+ deliver : deliveryTarget . deliver ,
81+ ...( deliveryTarget . deliver ? { bestEffortDeliver : true as const } : { } ) ,
82+ channel : deliveryTarget . deliver ? deliveryTarget . channel : sessionOnlyOriginChannel ,
83+ to : deliveryTarget . deliver
84+ ? deliveryTarget . to
85+ : sessionOnlyOriginChannel
86+ ? params . turnSourceTo
87+ : undefined ,
88+ accountId : deliveryTarget . deliver
89+ ? deliveryTarget . accountId
90+ : sessionOnlyOriginChannel
91+ ? params . turnSourceAccountId
92+ : undefined ,
93+ threadId : deliveryTarget . deliver
94+ ? deliveryTarget . threadId
95+ : sessionOnlyOriginChannel
96+ ? params . turnSourceThreadId
97+ : undefined ,
98+ idempotencyKey : `exec-approval-followup:${ params . approvalId } ` ,
99+ } ,
100+ { expectFinal : true } ,
101+ ) ;
102+ return true ;
103+ }
104+
72105 if ( deliveryTarget . deliver ) {
73- const requesterAgentId = sessionKey ? parseAgentSessionKey ( sessionKey ) ?. agentId : undefined ;
74106 await sendMessage ( {
75107 channel : deliveryTarget . channel ,
76108 to : deliveryTarget . to ?? "" ,
77109 accountId : deliveryTarget . accountId ,
78110 threadId : deliveryTarget . threadId ,
79111 content : resultText ,
80- agentId : requesterAgentId ,
112+ agentId : undefined ,
81113 idempotencyKey : `exec-approval-followup:${ params . approvalId } ` ,
82- mirror : sessionKey
83- ? {
84- sessionKey,
85- agentId : requesterAgentId ,
86- idempotencyKey : `exec-approval-followup:${ params . approvalId } ` ,
87- }
88- : undefined ,
89114 } ) ;
90115 return true ;
91116 }
92117
93- if ( ! sessionKey ) {
94- throw new Error ( "Session key or deliverable origin route is required" ) ;
95- }
96-
97- await callGatewayTool (
98- "agent" ,
99- { timeoutMs : 60_000 } ,
100- {
101- sessionKey,
102- message : buildExecApprovalFollowupPrompt ( resultText ) ,
103- deliver : deliveryTarget . deliver ,
104- ...( deliveryTarget . deliver ? { bestEffortDeliver : true as const } : { } ) ,
105- channel : deliveryTarget . deliver ? deliveryTarget . channel : sessionOnlyOriginChannel ,
106- to : deliveryTarget . deliver
107- ? deliveryTarget . to
108- : sessionOnlyOriginChannel
109- ? params . turnSourceTo
110- : undefined ,
111- accountId : deliveryTarget . deliver
112- ? deliveryTarget . accountId
113- : sessionOnlyOriginChannel
114- ? params . turnSourceAccountId
115- : undefined ,
116- threadId : deliveryTarget . deliver
117- ? deliveryTarget . threadId
118- : sessionOnlyOriginChannel
119- ? params . turnSourceThreadId
120- : undefined ,
121- idempotencyKey : `exec-approval-followup:${ params . approvalId } ` ,
122- } ,
123- { expectFinal : true } ,
124- ) ;
125-
126- return true ;
118+ throw new Error ( "Session key or deliverable origin route is required" ) ;
127119}
0 commit comments