teknium1
978e1356c0
feat: Slack adapter improvements — formatting, reactions, user resolution, commands
1. Markdown → mrkdwn conversion (format_message override):
- **bold** → *bold*, *italic* → _italic_
- ## Headers → *Headers* (bold)
- [link](url) → <url|link>
- ~~strike~~ → ~strike~
- Code blocks and inline code preserved unchanged
- Placeholder-based approach (same pattern as Telegram)
2. Message length splitting:
- send() now calls format_message() + truncate_message()
- Long responses split at natural boundaries (newlines, spaces)
- Code blocks properly closed/reopened across chunks
- Chunk indicators (1/N) appended for multi-part messages
3. Reaction-based acknowledgment:
- 👀 (eyes) reaction added on message receipt
- Replaced with ✅ (white_check_mark) when response is complete
- Graceful error handling (missing scopes, already-reacted)
- Serves as visual feedback since Slack has no bot typing API
4. User identity resolution:
- Resolves Slack user IDs to display names via users.info API
- LRU-style in-memory cache (one API call per user)
- Fallback chain: display_name → real_name → user_id
- user_name now included in MessageEvent source
5. Expanded slash commands (/hermes <subcommand>):
- Added: compact, compress, resume, background, usage,
insights, title, reasoning, provider, rollback
- Arguments preserved (e.g. /hermes resume my session)
6. reply_broadcast config option:
- When gateway.slack.reply_broadcast is true, first response
in a thread also appears in the main channel
- Disabled by default — thread = session stays clean
30 new tests covering all features.
2026-03-12 16:22:39 -07:00
..
2026-03-12 00:29:04 -07:00
2026-03-11 09:22:32 +01:00
2026-03-12 16:22:39 -07:00
2026-03-12 16:02:35 -07:00
2026-03-11 20:14:44 -07:00
2026-03-10 00:35:14 -07:00
2026-03-12 06:27:21 -07:00
2026-03-12 01:23:28 -07:00
2026-03-12 08:35:45 -07:00
2026-03-12 01:23:28 -07:00
2026-03-10 15:22:44 -07:00
2026-03-12 01:23:28 -07:00
2026-03-11 06:52:55 -07:00
2026-03-11 06:52:55 -07:00
2026-03-07 21:00:12 -05:00
2026-03-11 21:06:54 -07:00
2026-03-10 06:05:02 -07:00
2026-03-12 08:35:45 -07:00
2026-03-10 17:31:00 -07:00
2026-03-12 16:02:35 -07:00
2026-03-11 22:04:42 -07:00
2026-03-08 20:22:33 -07:00
2026-03-08 18:30:27 -07:00
2026-03-09 21:01:40 -07:00
2026-03-11 21:38:29 -07:00
2026-03-09 02:19:32 -07:00
2026-03-11 21:06:54 -07:00
2026-03-09 23:59:26 -07:00
2026-03-12 08:35:45 -07:00
2026-03-12 08:35:45 -07:00
2026-03-11 06:52:55 -07:00
2026-03-10 17:12:34 -07:00
2026-03-09 17:31:54 +03:00
2026-03-07 10:14:19 -08:00
2026-03-09 07:38:06 +03:00
2026-03-12 08:35:45 -07:00
2026-03-12 05:38:19 -07:00
2026-03-12 08:35:45 -07:00
2026-03-08 17:45:45 -07:00
2026-03-11 04:28:31 -07:00
2026-03-11 21:06:54 -07:00
2026-03-11 20:14:44 -07:00
2026-03-11 08:42:04 -07:00
2026-03-11 06:52:55 -07:00
2026-03-09 23:27:19 -07:00
2026-03-07 21:05:40 -08:00