From 08c9cc3d3dd4597fc131506ddfc10a432849149b Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 21 Aug 2026 20:58:14 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=BC=EF=B8=8F=20fix:=20Restore=20Shared?= =?UTF-8?q?=20Subagent=20Activity=20as=20a=20Read-Only=20View=20(#15108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Messages/Content/Parts/SubagentCall.tsx | 51 +++++-- .../src/components/Chat/Presentation.test.tsx | 1 + client/src/components/Chat/Presentation.tsx | 6 +- .../SharedSubagentActivityDialog.test.tsx | 133 ++++++++++++++++++ .../SharedSubagentActivityDialog.tsx | 74 ++++++++++ .../Subagents/SubagentThreadPanel.test.tsx | 2 + .../Chat/Subagents/adapters.test.ts | 28 ++++ .../src/components/Chat/Subagents/adapters.ts | 12 +- client/src/components/Share/ShareView.tsx | 2 + client/src/store/subagents.ts | 2 + packages/api/src/agents/view.spec.ts | 29 ++++ packages/api/src/agents/view.ts | 33 +++-- packages/data-schemas/src/index.ts | 1 + packages/data-schemas/src/methods/index.ts | 3 +- .../data-schemas/src/methods/message.spec.ts | 39 ++++- packages/data-schemas/src/methods/message.ts | 82 ++++++++++- 16 files changed, 470 insertions(+), 28 deletions(-) create mode 100644 client/src/components/Chat/Subagents/SharedSubagentActivityDialog.test.tsx create mode 100644 client/src/components/Chat/Subagents/SharedSubagentActivityDialog.tsx diff --git a/client/src/components/Chat/Messages/Content/Parts/SubagentCall.tsx b/client/src/components/Chat/Messages/Content/Parts/SubagentCall.tsx index d5a05cf38c..5581fb1fde 100644 --- a/client/src/components/Chat/Messages/Content/Parts/SubagentCall.tsx +++ b/client/src/components/Chat/Messages/Content/Parts/SubagentCall.tsx @@ -14,7 +14,9 @@ import store, { subagentProgressByToolCallId, subagentProgressKey, } from '~/store'; +import { adaptLivePersistedActivity } from '~/components/Chat/Subagents/adapters'; import { MessageContext } from '~/Providers/MessageContext'; +import { useShareContext } from '~/Providers/ShareContext'; import MessageIcon from '~/components/Share/MessageIcon'; import { parseSubagentBackgroundHandle } from './handle'; import { useAgentsMapContext } from '~/Providers'; @@ -166,6 +168,7 @@ export default function SubagentCall({ hideAttachments = false, }: SubagentCallProps) { const localize = useLocalize(); + const { isSharedConvo, shareId } = useShareContext(); const parentMessageContext = useContext(MessageContext); const parentMessageId = parentMessageContext.messageId?.trim() ?? ''; const partIndex = parentMessageContext.partIndex ?? 0; @@ -181,7 +184,8 @@ export default function SubagentCall({ [output, args], ); const parentConversationId = parentMessageContext.conversationId?.trim() ?? ''; - const canOpenDurablePanel = backgroundHandle != null && parentConversationId !== ''; + const canOpenDurablePanel = + isSharedConvo !== true && backgroundHandle != null && parentConversationId !== ''; const subagentType = progress?.subagentType ?? extractSubagentType(args); const isSelfSpawn = subagentType === 'self'; @@ -277,8 +281,26 @@ export default function SubagentCall({ * the name isn't resolvable (agent map miss). */ const subagentNameLabel = !isSelfSpawn && subagentAgent?.name ? subagentAgent.name : ''; + const canOpenDetails = useMemo( + () => + isSharedConvo !== true || + adaptLivePersistedActivity({ + title: '', + progress: null, + persistedContent, + legacyOutput: backgroundHandle == null ? output : undefined, + initialProgress, + isSubmitting: false, + runStepStatus, + approvalVisibility: 'hidden', + }).items.length > 0, + [backgroundHandle, initialProgress, isSharedConvo, output, persistedContent, runStepStatus], + ); + const panelSelection = useMemo( () => ({ + host: isSharedConvo === true ? ('share' as const) : ('conversation' as const), + ...(isSharedConvo === true && shareId != null ? { shareId } : {}), parentConversationId, parentMessageId, toolCallId, @@ -303,6 +325,7 @@ export default function SubagentCall({ backgroundHandle, canOpenDurablePanel, initialProgress, + isSharedConvo, isSubmitting, output, parentConversationId, @@ -311,6 +334,7 @@ export default function SubagentCall({ persistedContent, prompt, runStepStatus, + shareId, subagentType, toolCallId, ], @@ -327,16 +351,24 @@ export default function SubagentCall({ }, [panelSelection, parentMessageId, partIndex, setSelectedSubagent, toolCallId]); const openDetails = useCallback(() => { + if (!canOpenDetails) return; resetCurrentArtifactId(); setArtifactsVisible(false); setSelectedSubagent(panelSelection); - }, [panelSelection, resetCurrentArtifactId, setArtifactsVisible, setSelectedSubagent]); + }, [ + canOpenDetails, + panelSelection, + resetCurrentArtifactId, + setArtifactsVisible, + setSelectedSubagent, + ]); return ( <>