No description
- Rust 47.5%
- JavaScript 20.8%
- HTML 13%
- CSS 9.2%
- Shell 9%
- Other 0.5%
3A. Full-text message search:
- SQLite FTS5 virtual table (messages_fts) synced on message.send
- message.search RPC — FTS5 MATCH query with workspace filtering
- Ctrl+K opens search modal with debounced input, results as cards
- Click result navigates to channel
3B. Mention-based notifications:
- message.send parses @username/@alias patterns via regex
- Matches are inserted into mentions table (excludes self-mentions)
- Notification bell icon in channel header with unread badge
- pollNotifications() every 30s, dropdown with mention list
- Click mention navigates to channel, mark-read on click
- "Mark all as read" button
3C. Pinned messages:
- message.pin / message.unpin / message.list_pinned RPC methods
- Pin stored as {pinned: true, pinned_by: caller_id} in data blob
- Pin/unpin toggle in right-click context menu
- Pin icon button in channel header opens pinned messages panel
3D. Channel browse/discovery:
- browseChannels() modal shows all public channels in workspace
- Each channel shows name, description, and Join/Joined button
- Join calls channel.member.add, refreshes channel list
- Browse icon (grid) added next to + (create) in sidebar
New dependency: regex = "1" (for @mention parsing)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .cargo | ||
| crates | ||
| plan | ||
| scripts | ||
| .gitignore | ||
| apikeys.db | ||
| buildenv.sh | ||
| Cargo.toml | ||
| IMPLEMENTATION_SUMMARY.md | ||
| LICENSE | ||
| Makefile | ||
| PROJECT_STRUCTURE.md | ||
| README.md | ||
| TECH_SPEC.md | ||