Telegram, Feishu, and MSTeams channel monitors created inbound debouncers
without calling unregister() during teardown. On reconnect a new debouncer
was registered while the old one stayed in the global INBOUND_DEBOUNCERS
map, accumulating stale entries that increased restart latency and memory.
- Telegram: registerTelegramHandlers now returns unregisterDebouncer;
called in bot.stop override
- Feishu: registerEventHandlers now returns unregisterDebouncer;
monitorSingleAccount wraps transport in try/finally
- MSTeams: createMSTeamsMessageHandler returns { handleTeamsMessage,
unregisterDebouncer }; threaded through registerMSTeamsHandlers and
called in monitor shutdown
Safety net: flushAllInboundDebouncers auto-evicts debouncers idle >5 min
so orphaned entries from channels that forget unregister() are cleaned up.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>