Skip to content

feat(desktop): render an optional activity label on typing indicators - #7637

Open
mmaudet wants to merge 1 commit into
block:mainfrom
mmaudet:feat/typing-activity-label
Open

mmaudet wants to merge 1 commit into
block:mainfrom
mmaudet:feat/typing-activity-label

Conversation

@mmaudet

@mmaudet mmaudet commented Sep 14, 2026

Copy link
Copy Markdown

Problem

Typing indicators say that someone is active, never what they are doing. For agent members this is the difference between a spinner and transparency: a harness turn can run for minutes while the channel only shows "Twaky is typing…". (Design discussion: #7635 — no duplicate found; closest is #2646, a different, richer surface.)

Implementation

Convention, documented in NOSTR.md and in the KIND_TYPING_INDICATOR comment: a typing event (kind 20002) whose content is non-empty carries a short activity label (publishers SHOULD stay under 80 chars).

  • Desktop: useChannelTyping trims and bounds the label onto TypingIndicatorEntry; TypingIndicatorRow renders Alice is typing — <label> when exactly one member is typing. Content-less pings (every existing publisher) and multi-typer rows render exactly as before.
  • No relay / pub-sub change: ephemeral events fan out verbatim, and the existing pubsub_presence_typing conformance test already binds typing content round-trip.
  • buzz-acp unchanged: it cannot know its agent's current activity, and a custom harness can already own the indicator via --no-typing and publish labeled typing itself.
  • Mobile unchanged: it ignores content, exactly as before — the parity one-liner is left as a follow-up (happy to include it here if you prefer).

content rather than a new tag follows the NIP-38 precedent (user-status text already rides in content) and keeps the change to the rendering layer.

Testing

  • New E2E spec typing indicator shows the activity label when present — label rendered after the name, updated on refresh, cleared by a content-less ping, hidden when several members type: 3/3 typing specs pass (playwright test --project=smoke channels.spec.ts -g typing).
  • tsc --noEmit, biome check, desktop node tests (typing-adjacent, 26/26), check:px-text, cargo fmt -p buzz-core --check, cargo clippy -p buzz-core: all clean.
  • Screenshot posted below with the repo's tooling.

Follow-ups

  • Mobile parity (one-line parse + render).
  • Downstream, the agent harness we run will switch its live status from a NIP-38 kind-30315 user status to labeled typing events.

Closes #7635

A typing event (kind 20002) whose content is non-empty now carries a
short activity label: the typing row renders "Alice is typing —
reviewing the quarterly report…" for a single typer, and falls back to
today's label for content-less pings (every existing publisher) and
whenever several members are typing at once. The label is trimmed and
bounded to 80 chars at parsing.

This lets any agent harness say what it is doing where members actually
look during a turn, with no new surface: a custom harness can own the
indicator via buzz-acp's --no-typing and publish labeled typing itself.
The convention is documented in NOSTR.md and in the KIND_TYPING_INDICATOR
comment; the relay/pub-sub round-trip of typing content is already bound
by the existing pubsub_presence_typing conformance test. Mobile is
unchanged (ignores content exactly as before).

Closes block#7635

Signed-off-by: Michel-Marie MAUDET <mmaudet@linagora.com>
@mmaudet
mmaudet requested a review from a team as a code owner September 14, 2026 06:35
@github-actions

Copy link
Copy Markdown

🔐 Codex Security Review

Status: review required for the current range.

The current range is 4cd82f513214aad11c2b742ce7cc7c681e8e32a0...66949760160271cd1863a8d53c51b29904558666.
A new review must complete for this exact range. When manual authorization
is required, a Block organization member must comment exactly
@buzz-security-review 66949760160271cd1863a8d53c51b29904558666 to authorize a new review.
Any previous review applies only to its recorded range.

@mmaudet

mmaudet commented Sep 14, 2026

Copy link
Copy Markdown
Author

Screenshots

pr-7637--typing-activity-label

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: an optional activity label in typing indicators (kind 20002)

1 participant