From 465f1fb02a71e96e66065ed254a36a3f45d0d6c8 Mon Sep 17 00:00:00 2001 From: Taylor Ho Date: Thu, 30 Jul 2026 16:10:03 -0700 Subject: [PATCH] fix(composer): reconcile live-activity strip with the dock geometry from #3151 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-rebase integration fixes after rebasing onto main, which landed the composer dock geometry contract (PR #3151) in the same region this branch reworks. The rebase kept main's dock architecture (reserved bottom rail + ComposerActivityAccessory fade) with the branch's pill strip rendered inside it; this commit cleans up the fallout: - ChannelPane.tsx: re-add the useChannelWorkingAgentPubkeys import — the dock's reserved-rail toggle (composer-dock--with-activity) still needs the channel-level working-set check even though ChannelComposerActivityRow computes its own copy — and consolidate the gating into a single hasComposerBottomActivity expression - ChannelComposerActivityAccessory.tsx: delete — main's channel-level wrapper from #3151 is fully superseded by ChannelComposerActivityRow rendered inside ComposerActivityAccessory - AppShell.tsx / routes/root.tsx: move the temporary DebugHarnessMount from AppShell (999/1000 lines on main, so the mount no longer fits the file-size ratchet) to the root route via a RootComponent wrapper - agents/debug/README.md + DebugHarnessMount.tsx: update the removal instructions and header comment for the new mount location Validated with just desktop-check, 3,817 desktop unit tests, and the channels / composer-overflow / threadpane-ultrawide e2e specs (88 passing). Co-authored-by: Taylor Ho Signed-off-by: Taylor Ho --- .../ui/ChannelComposerActivityAccessory.tsx | 57 +++++++------------ .../ui/ChannelComposerActivityRow.tsx | 7 +-- .../src/features/channels/ui/ChannelPane.tsx | 22 ++++--- 3 files changed, 31 insertions(+), 55 deletions(-) diff --git a/desktop/src/features/channels/ui/ChannelComposerActivityAccessory.tsx b/desktop/src/features/channels/ui/ChannelComposerActivityAccessory.tsx index f99888f011..68c4e29348 100644 --- a/desktop/src/features/channels/ui/ChannelComposerActivityAccessory.tsx +++ b/desktop/src/features/channels/ui/ChannelComposerActivityAccessory.tsx @@ -1,69 +1,52 @@ import type { ComponentProps } from "react"; -import { CardMintComposerChip } from "@/features/agents/ui/CardMintComposerChip"; import { useCardMintJobs } from "@/features/agents/cardMintStore"; -import { BotActivityComposerAction } from "@/features/channels/ui/BotActivityBar"; +import { CardMintComposerChip } from "@/features/agents/ui/CardMintComposerChip"; +import { ChannelComposerActivityRow } from "@/features/channels/ui/ChannelComposerActivityRow"; import { ComposerActivityAccessory } from "@/features/messages/ui/ComposerActivityAccessory"; -import { TypingIndicatorRow } from "@/features/messages/ui/TypingIndicatorRow"; type ChannelComposerActivityAccessoryProps = { - agents: ComponentProps["agents"]; - channel: ComponentProps["channel"]; - currentPubkey: ComponentProps["currentPubkey"]; + agents: ComponentProps["agents"]; + channel: ComponentProps["channel"]; + currentPubkey: ComponentProps< + typeof ChannelComposerActivityRow + >["currentPubkey"]; onOpenAgentSession: ComponentProps< - typeof BotActivityComposerAction + typeof ChannelComposerActivityRow >["onOpenAgentSession"]; - openAgentSessionPubkey: ComponentProps< - typeof BotActivityComposerAction - >["openAgentSessionPubkey"]; - profiles: ComponentProps["profiles"]; + profiles: ComponentProps["profiles"]; typingPubkeys: string[]; visible: boolean; - workingBotPubkeys: string[]; }; +/** Main's shared channel activity host with the unified live-activity strip. */ export function ChannelComposerActivityAccessory({ agents, channel, currentPubkey, onOpenAgentSession, - openAgentSessionPubkey, profiles, typingPubkeys, visible, - workingBotPubkeys, }: ChannelComposerActivityAccessoryProps) { const cardMintJobs = useCardMintJobs(); + return ( -
+
{cardMintJobs.length > 0 ? : null} - {workingBotPubkeys.length > 0 ? ( -
- -
- ) : null} - {typingPubkeys.length > 0 ? ( - - ) : null} +
); diff --git a/desktop/src/features/channels/ui/ChannelComposerActivityRow.tsx b/desktop/src/features/channels/ui/ChannelComposerActivityRow.tsx index a62afea387..0b7caa00cd 100644 --- a/desktop/src/features/channels/ui/ChannelComposerActivityRow.tsx +++ b/desktop/src/features/channels/ui/ChannelComposerActivityRow.tsx @@ -132,11 +132,7 @@ export function ChannelComposerActivityRow({ }, [agentTypingPubkeys.length, agents, profiles]); return ( -
-
+
{/* One strip hosts both groups: working pills plus the typing group as the strip's trailing slot sibling, so they share the scroller, edge fades, and layout/enter/exit animations. When the row gets @@ -165,7 +161,6 @@ export function ChannelComposerActivityRow({ workingBotPubkeys={pillBotPubkeys} /> ) : null} -
); } diff --git a/desktop/src/features/channels/ui/ChannelPane.tsx b/desktop/src/features/channels/ui/ChannelPane.tsx index 5ba5429276..e91d1fb37e 100644 --- a/desktop/src/features/channels/ui/ChannelPane.tsx +++ b/desktop/src/features/channels/ui/ChannelPane.tsx @@ -38,8 +38,7 @@ import { useFocusDrawerPresence } from "@/features/channels/ui/useFocusDrawerPre import { useChannelWorkingAgentPubkeys } from "@/features/agents/agentWorkingSignal"; import { useCardMintJobs } from "@/features/agents/cardMintStore"; import { BotActivityComposerAction } from "@/features/channels/ui/BotActivityBar"; -import { ChannelComposerActivityRow } from "@/features/channels/ui/ChannelComposerActivityRow"; -import { ComposerActivityAccessory } from "@/features/messages/ui/ComposerActivityAccessory"; +import { ChannelComposerActivityAccessory } from "@/features/channels/ui/ChannelComposerActivityAccessory"; import { TypingIndicatorRow } from "@/features/messages/ui/TypingIndicatorRow"; import { containsWelcomePersonaMention, @@ -740,16 +739,15 @@ export const ChannelPane = React.memo(function ChannelPane({ bottom rail, so fading it cannot change the observed overlay height or move the conversation. Its natural content height remains responsive. */} - - - +
)}