


























@@ -75,6 +75,65 @@ const defaultSubagentAnnounceDeliveryDeps: SubagentAnnounceDeliveryDeps = {
7575let subagentAnnounceDeliveryDeps: SubagentAnnounceDeliveryDeps =
7676defaultSubagentAnnounceDeliveryDeps;
777778+function resolveBoundConversationOrigin(params: {
79+bindingConversation: ConversationRef & { parentConversationId?: string };
80+requesterConversation?: ConversationRef;
81+requesterOrigin?: DeliveryContext;
82+}): DeliveryContext {
83+const conversation = params.bindingConversation;
84+const conversationId = conversation.conversationId?.trim() ?? "";
85+const parentConversationId = conversation.parentConversationId?.trim() ?? "";
86+const requesterConversationId = params.requesterConversation?.conversationId?.trim() ?? "";
87+const requesterTo = params.requesterOrigin?.to?.trim();
88+if (
89+conversation.channel === "matrix" &&
90+parentConversationId &&
91+requesterConversationId &&
92+parentConversationId === requesterConversationId &&
93+requesterTo
94+) {
95+return {
96+channel: conversation.channel,
97+accountId: conversation.accountId,
98+to: requesterTo,
99+ ...(conversationId ? { threadId: conversationId } : {}),
100+};
101+}
102+103+const boundTarget = resolveConversationDeliveryTarget({
104+channel: conversation.channel,
105+ conversationId,
106+ parentConversationId,
107+});
108+if (
109+requesterTo &&
110+conversationId &&
111+requesterConversationId &&
112+conversationId.toLowerCase() === requesterConversationId.toLowerCase()
113+) {
114+return {
115+channel: conversation.channel,
116+accountId: conversation.accountId,
117+to: requesterTo,
118+threadId:
119+boundTarget.threadId ??
120+(params.requesterOrigin?.threadId != null && params.requesterOrigin.threadId !== ""
121+ ? String(params.requesterOrigin.threadId)
122+ : undefined),
123+};
124+}
125+return {
126+channel: conversation.channel,
127+accountId: conversation.accountId,
128+to: boundTarget.to,
129+threadId:
130+boundTarget.threadId ??
131+(params.requesterOrigin?.threadId != null && params.requesterOrigin.threadId !== ""
132+ ? String(params.requesterOrigin.threadId)
133+ : undefined),
134+};
135+}
136+78137function resolveRequesterSessionActivity(requesterSessionKey: string) {
79138const activity = subagentAnnounceDeliveryDeps.getRequesterSessionActivity(requesterSessionKey);
80139if (activity.sessionId || activity.isActive) {
@@ -243,22 +302,12 @@ export async function resolveSubagentCompletionOrigin(params: {
243302failClosed: false,
244303});
245304if (route.mode === "bound" && route.binding) {
246-const boundTarget = resolveConversationDeliveryTarget({
247-channel: route.binding.conversation.channel,
248-conversationId: route.binding.conversation.conversationId,
249-parentConversationId: route.binding.conversation.parentConversationId,
250-});
251305return mergeDeliveryContext(
252-{
253-channel: route.binding.conversation.channel,
254-accountId: route.binding.conversation.accountId,
255-to: boundTarget.to,
256-threadId:
257-boundTarget.threadId ??
258-(requesterOrigin?.threadId != null && requesterOrigin.threadId !== ""
259- ? String(requesterOrigin.threadId)
260- : undefined),
261-},
306+resolveBoundConversationOrigin({
307+bindingConversation: route.binding.conversation,
308+ requesterConversation,
309+ requesterOrigin,
310+}),
262311requesterOrigin,
263312);
264313}
@@ -489,7 +538,7 @@ async function sendSubagentAnnounceDirectly(params: {
489538 ? normalizedSessionOnlyOriginChannel
490539 : undefined;
491540const requesterActivity = resolveRequesterSessionActivity(canonicalRequesterSessionKey);
492-if (params.expectsCompletionMessage && requesterActivity.isActive) {
541+if (params.expectsCompletionMessage && requesterActivity.sessionId) {
493542const woke = requesterActivity.sessionId
494543 ? subagentAnnounceDeliveryDeps.queueEmbeddedPiMessage(
495544requesterActivity.sessionId,
@@ -502,11 +551,13 @@ async function sendSubagentAnnounceDirectly(params: {
502551path: "steered",
503552};
504553}
505-return {
506-delivered: false,
507-path: "direct",
508-error: "active requester session could not be woken",
509-};
554+if (requesterActivity.isActive) {
555+return {
556+delivered: false,
557+path: "direct",
558+error: "active requester session could not be woken",
559+};
560+}
510561}
511562if (params.signal?.aborted) {
512563return {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。