Alejandro 93ffd365f5 feat: add repost system messages with grouping in chat (#194)
* feat: add repost system messages with grouping in chat

- Add kind 6 and 16 (reposts) to NIP-10 adapter filters
- Convert simple reposts (no content) to system messages
- Implement consecutive system message grouping
  - Groups consecutive system messages with same action
  - Format: "alice, bob and 3 others reposted"
  - Works for all system messages (reposts, join, leave, etc.)
- Update scroll-to-message to handle grouped messages
- Ignore reposts with content (quotes) to keep it simple

System message grouping UX:
- 1 person: "alice reposted"
- 2 people: "alice and bob reposted"
- 3 people: "alice, bob and charlie reposted"
- 4+ people: "alice, bob and 3 others reposted"

* feat: show all reposts regardless of content

Remove content filtering for reposts - now all kind 6 and 16 events
are shown as system messages. Quote reposts (with content) will just
display as 'reposted' without showing the quote text, keeping the
chat interface clean and consistent.

* refactor: extract and test system message grouping logic

Extract grouping logic to separate module:
- Created src/lib/chat/group-system-messages.ts with:
  - groupSystemMessages(): Groups consecutive system messages
  - isGroupedSystemMessage(): Type guard with validation
  - GroupedSystemMessage interface
- Updated ChatViewer to import from new module
- Improved type guard with additional validation:
  - Check array lengths match (authors.length === messageIds.length)
  - Ensure arrays are not empty
  - Validate all field types

Added comprehensive test coverage (26 tests):
- Basic grouping behavior
- Edge cases (empty arrays, single messages)
- Mixed message types (user, zap, system)
- Timestamp preservation
- Large group handling (100+ items)
- Type guard validation

All tests pass (1006 total), build succeeds.
Production ready.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-22 13:39:15 +01:00
2025-12-22 20:40:16 +00:00

Grimoire

A Nostr protocol explorer and developer tool with a tiling window manager interface.

Features

  • Tiling Windows - Each window is a Nostr "app" (profile viewer, event feed, NIP docs, etc.)
  • Command Palette - Unix-style commands via Cmd+K to open apps and navigate
  • Multi-workspace - Virtual desktops with independent layouts
  • Real-time - Reactive event subscriptions with automatic updates

Stack

React 19, TypeScript, Vite, TailwindCSS, Jotai, Dexie, Applesauce

Getting Started

npm install
npm run dev

Scripts

Command Description
npm run dev Start dev server
npm run build Build for production
npm test Run tests in watch mode
npm run lint Lint code
npm run format Format code

License

MIT

Description
No description provided
Readme MIT 14 MiB
Languages
TypeScript 98.9%
CSS 0.8%
JavaScript 0.3%