From 6475fcc777a7e55f31fde2c339db4744dbf9df1d Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Fri, 17 Apr 2026 00:47:52 -0400 Subject: [PATCH] Agents: simplify subagent delivery routing --- src/agents/subagent-spawn.ts | 8 ++++- src/cli/send-runtime/channel-outbound-send.ts | 32 ++++++------------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/agents/subagent-spawn.ts b/src/agents/subagent-spawn.ts index 812b1b5b28a..1da677c5c37 100644 --- a/src/agents/subagent-spawn.ts +++ b/src/agents/subagent-spawn.ts @@ -379,6 +379,12 @@ function resolveThreadBindingDeliveryOrigin(childSessionKey: string): DeliveryCo }); } +function hasRoutableDeliveryOrigin( + origin?: DeliveryContext, +): origin is DeliveryContext & { channel: string; to: string } { + return Boolean(origin?.channel && origin.to); +} + export async function spawnSubagentDirect( params: SpawnSubagentParams, ctx: SpawnSubagentContext, @@ -740,7 +746,7 @@ export async function spawnSubagentDirect( const deliverInitialChildRunDirectly = requestThreadBinding && spawnMode === "session" && - Boolean(childSessionOrigin?.channel && childSessionOrigin.to); + hasRoutableDeliveryOrigin(childSessionOrigin); const shouldAnnounceCompletion = deliverInitialChildRunDirectly ? false : expectsCompletionMessage; diff --git a/src/cli/send-runtime/channel-outbound-send.ts b/src/cli/send-runtime/channel-outbound-send.ts index e39cc3c6202..57bbd4e9597 100644 --- a/src/cli/send-runtime/channel-outbound-send.ts +++ b/src/cli/send-runtime/channel-outbound-send.ts @@ -40,29 +40,7 @@ export function createChannelOutboundRuntimeSend(params: { const outbound = await loadChannelOutboundAdapter(params.channelId); const threadId = resolveRuntimeThreadId(opts); const replyToId = resolveRuntimeReplyToId(opts); - const hasMedia = Boolean(opts.mediaUrl); - if (hasMedia && outbound?.sendMedia) { - return await outbound.sendMedia({ - cfg: opts.cfg ?? loadConfig(), - to, - text, - mediaUrl: opts.mediaUrl, - mediaAccess: opts.mediaAccess, - mediaLocalRoots: opts.mediaLocalRoots, - mediaReadFile: opts.mediaReadFile, - accountId: opts.accountId, - threadId, - replyToId, - silent: opts.silent, - forceDocument: opts.forceDocument, - gifPlayback: opts.gifPlayback, - gatewayClientScopes: opts.gatewayClientScopes, - }); - } - if (!outbound?.sendText) { - throw new Error(params.unavailableMessage); - } - return await outbound.sendText({ + const buildContext = () => ({ cfg: opts.cfg ?? loadConfig(), to, text, @@ -78,6 +56,14 @@ export function createChannelOutboundRuntimeSend(params: { gifPlayback: opts.gifPlayback, gatewayClientScopes: opts.gatewayClientScopes, }); + const hasMedia = Boolean(opts.mediaUrl); + if (hasMedia && outbound?.sendMedia) { + return await outbound.sendMedia(buildContext()); + } + if (!outbound?.sendText) { + throw new Error(params.unavailableMessage); + } + return await outbound.sendText(buildContext()); }, }; }