mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
An observer-backed agent that started typing its reply mid-turn had the typing signal swallowed entirely: computeAgentWorkingState drops a channel's typing entry under observer precedence, so the pill kept showing the stale last tool action and typing could only ever surface as a separate item in the trailing typing group. Now the existing pill's ticker swaps to "<name> is typing…" in the same slot and swaps back to the last action headline when typing clears. - desktop/src/features/agents/agentWorkingSignal.ts: add getAgentChannelTypingSince(pubkey, channelId) — a raw typing-registry read that deliberately bypasses the observer-precedence fold, returning the first-seen typing timestamp or null - desktop/src/features/channels/ui/BotActivityBar.tsx: BotActivityAgentPill subscribes via useSyncExternalStore; while typing, the ticker keys on a dedicated TYPING_LABEL_ID and the label becomes "<name> is typing…" — same slot, avatar, and hover feed, no new strip item. Partition unchanged: typing-only agents still divert to the combined typing indicator group - desktop/src/features/agents/agentWorkingSignal.test.mjs: three new tests pinning the getter (null cases, first-seen anchor lifecycle, and not-folded-under-observer-precedence) Co-authored-by: Taylor Ho <taylorkmho@gmail.com> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Buzz
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition