Commit 08ad431
feat: add Slack adapter with multi-platform ChatAdapter architecture
Introduces a platform-agnostic adapter layer (ChatAdapter trait + AdapterRouter)
that decouples session management, streaming, and reactions from any specific
chat platform. Refactors Discord support to implement this trait and adds a
new Slack adapter using Socket Mode (WebSocket) with auto-reconnect.
- Extract ChatAdapter trait with send/edit/thread/react methods + message_limit()
- Extract AdapterRouter with shared session routing, edit-streaming, and reactions
- Decouple StatusReactionController from serenity types (uses Arc<dyn ChatAdapter>)
- Implement DiscordAdapter (ChatAdapter for Discord via serenity)
- Implement SlackAdapter (ChatAdapter for Slack via reqwest + tokio-tungstenite)
- Add [slack] config section (bot_token, app_token, allowed_channels, allowed_users)
- Support running Discord + Slack simultaneously in one process
- Session keys namespaced by platform (discord:xxx, slack:xxx)
- Unicode emoji → Slack short name mapping for reactions
Relates to openabdev#93, openabdev#94, openabdev#86
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent 025d19a commit 08ad431
9 files changed
Lines changed: 1124 additions & 494 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
| 18 | + | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
| 23 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | 4 | | |
3 | 5 | | |
4 | 6 | | |
5 | 7 | | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
6 | 14 | | |
7 | 15 | | |
8 | 16 | | |
| |||
0 commit comments