- Extract the composer status strip into ChannelComposerActivityRow.tsx
(new component hosting the inline bot-activity trigger and the typing
indicator, plus the useChannelWorkingAgentPubkeys subscription). Also
brings ChannelPane.tsx back under the 1000-line file-size ceiling
(1006 -> 969).
- Change the row from min-h-8 to a fixed h-8.5 (34px). The inline
bot-activity trigger is h-7 (28px), which plus the row's pb-1.5 (6px)
made the active row 34px — 2px taller than the 32px idle minimum — so
the bottom-anchored composer visibly bumped up whenever an agent turn
or bot typing mounted the trigger, and dropped back when it cleared.
34px matches the previous active-state height exactly: the working
state renders identically and the idle state now reserves the same
space. (Typing indicators alone are 20px of content, under the old
minimum, which is why only the agent-activity trigger caused the
shift.)
- channels.spec.ts: add "composer does not shift when the activity row
mounts and clears" e2e test asserting the composer's y-position stays
stable across trigger mount and clear. Verified via negative control:
with min-h-8 restored the test fails with exactly the 2px delta.
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>