@@ -197,6 +197,7 @@ import {
197197} from "./ThreadComposer" ;
198198import { ComposerPopoverHost } from "./ComposerPopoverHost" ;
199199import { ThreadFeed , type ThreadFeedHandle , type ThreadFeedHistoryControls } from "./ThreadFeed" ;
200+ import { WorkspaceMutationIdProvider } from "./WorkspaceMutationIdProvider" ;
200201import { useThreadTurnSubagents } from "./ThreadAgentsSheet" ;
201202import { ComposerQueuedEditBanner } from "./ComposerQueuedEdit" ;
202203import { useThreadQueuedCount } from "./ThreadQueueControl" ;
@@ -1437,54 +1438,56 @@ function ThreadDetailBody(
14371438 />
14381439 ) }
14391440 >
1440- < ThreadFeed
1441- environmentId = { props . environmentId }
1442- threadId = { props . selectedThread . id }
1443- detailRef = { props . selectedThreadDetailRef }
1444- workspaceRoot = { props . threadCwd }
1445- feed = { props . selectedThreadFeed }
1446- pendingHandoff = { props . pendingHandoff }
1447- worktreeSetup = { props . worktreeSetup }
1448- setupWorkingStartedAt = { props . setupWorkingStartedAt }
1449- queuedMessages = { props . queuedMessages }
1450- dispatchingMessageId = { props . dispatchingMessageId }
1451- // A native subagent has no composer to edit a pending message in;
1452- // Cancel on the edit banner would discard it.
1453- onEditPendingMessage = {
1454- isProviderSubagent || pendingMessageEditBlocked ? null : handleEditPendingMessage
1455- }
1456- contentPresentation = { props . contentPresentation }
1457- threadTitle = { props . selectedThread . title }
1458- latestRun = { props . activityRun }
1459- activeWorkStartedAt = { props . activeWorkStartedAt }
1460- runlessWorkActive = { props . runlessWorkActive ?? false }
1461- listRef = { listRef }
1462- freeze = { freeze }
1463- anchorMessageId = { anchorMessageId }
1464- jumpToMessageId = { jumpMessageLoaded ? jumpMessageId : null }
1465- onJumpedToMessage = { ( ) => finishThreadMessageJump ( selectedThreadKey ) }
1466- ref = { feedRef }
1467- contentInsetEndAdjustment = { combinedContentInsetEndAdjustment }
1468- keyboardOffset = { composerKeyboardOffset }
1469- sendingWithKeyboard = { sendingWithKeyboard }
1470- fitShortFeedToViewport = { questionInFlow && ! isKeyboardVisible }
1471- contentTopInset = { 0 }
1472- contentBottomInset = {
1473- questionInFlow
1474- ? 0
1475- : estimatedOverlayHeight +
1476- ( showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0 )
1477- }
1478- contentMaxWidth = { contentMaxWidth }
1479- historyControls = { props . historyControls }
1480- contentSideInsets = { nativeMetrics ?. safeArea }
1481- layoutVariant = { layoutVariant }
1482- usesAutomaticContentInsets = { props . usesAutomaticContentInsets }
1483- onHeaderMaterialVisibilityChange = { props . onHeaderMaterialVisibilityChange }
1484- onEndFollowEnabledChange = { handleEndFollowEnabledChange }
1485- skills = { selectedProviderSkills }
1486- onUseArtifactTemplate = { handleUseArtifactTemplate }
1487- />
1441+ < WorkspaceMutationIdProvider threadRef = { props . selectedThreadDetailRef } >
1442+ < ThreadFeed
1443+ environmentId = { props . environmentId }
1444+ threadId = { props . selectedThread . id }
1445+ detailRef = { props . selectedThreadDetailRef }
1446+ workspaceRoot = { props . threadCwd }
1447+ feed = { props . selectedThreadFeed }
1448+ pendingHandoff = { props . pendingHandoff }
1449+ worktreeSetup = { props . worktreeSetup }
1450+ setupWorkingStartedAt = { props . setupWorkingStartedAt }
1451+ queuedMessages = { props . queuedMessages }
1452+ dispatchingMessageId = { props . dispatchingMessageId }
1453+ // A native subagent has no composer to edit a pending message in;
1454+ // Cancel on the edit banner would discard it.
1455+ onEditPendingMessage = {
1456+ isProviderSubagent || pendingMessageEditBlocked ? null : handleEditPendingMessage
1457+ }
1458+ contentPresentation = { props . contentPresentation }
1459+ threadTitle = { props . selectedThread . title }
1460+ latestRun = { props . activityRun }
1461+ activeWorkStartedAt = { props . activeWorkStartedAt }
1462+ runlessWorkActive = { props . runlessWorkActive ?? false }
1463+ listRef = { listRef }
1464+ freeze = { freeze }
1465+ anchorMessageId = { anchorMessageId }
1466+ jumpToMessageId = { jumpMessageLoaded ? jumpMessageId : null }
1467+ onJumpedToMessage = { ( ) => finishThreadMessageJump ( selectedThreadKey ) }
1468+ ref = { feedRef }
1469+ contentInsetEndAdjustment = { combinedContentInsetEndAdjustment }
1470+ keyboardOffset = { composerKeyboardOffset }
1471+ sendingWithKeyboard = { sendingWithKeyboard }
1472+ fitShortFeedToViewport = { questionInFlow && ! isKeyboardVisible }
1473+ contentTopInset = { 0 }
1474+ contentBottomInset = {
1475+ questionInFlow
1476+ ? 0
1477+ : estimatedOverlayHeight +
1478+ ( showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0 )
1479+ }
1480+ contentMaxWidth = { contentMaxWidth }
1481+ historyControls = { props . historyControls }
1482+ contentSideInsets = { nativeMetrics ?. safeArea }
1483+ layoutVariant = { layoutVariant }
1484+ usesAutomaticContentInsets = { props . usesAutomaticContentInsets }
1485+ onHeaderMaterialVisibilityChange = { props . onHeaderMaterialVisibilityChange }
1486+ onEndFollowEnabledChange = { handleEndFollowEnabledChange }
1487+ skills = { selectedProviderSkills }
1488+ onUseArtifactTemplate = { handleUseArtifactTemplate }
1489+ />
1490+ </ WorkspaceMutationIdProvider >
14881491 </ RenderErrorBoundary >
14891492 </ View >
14901493 ) : (
0 commit comments