mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-23 14:45:46 +00:00
## Changes ### 1. Fix client.start() hanging forever (shared.ts) The bot-sdk's `client.start()` returns a promise that never resolves (infinite sync loop). The plugin awaited it, blocking the entire provider startup — `logged in as` never printed, no messages were processed. Fix: fire-and-forget with error handler + 2s initialization delay. ### 2. Fix DM false positive for 2-member rooms (direct.ts) `memberCount === 2` heuristic misclassified explicitly configured group rooms as DMs when only bot + one user were joined. Messages were routed through DM policy and silently dropped. Fix: remove member count heuristic; only trust `m.direct` account data and `is_direct` room state flag. Ref: #20145 ### 3. Prevent duplicate event listener registration (events.ts) When both bundled channel plugin and extension load, listeners were registered twice on the same shared client, causing inconsistent state. Fix: WeakSet guard to skip registration if client already has listeners. Ref: #18330 ### 4. Add startup grace period (index.ts) `startupGraceMs = 0` dropped messages timestamped during async setup. Especially problematic with Conduit which retries on `M_NOT_FOUND` during filter creation. Fix: 5-second grace period. ### 5. Fix room ID case sensitivity with Conduit (index.ts) Room IDs (`!xyz`) without `:server` suffix failed the `includes(':')` check and were sent to `resolveMatrixTargets`, which called Conduit's `resolveRoom` — returning lowercased IDs. The bot-sdk emits events with original-case IDs, causing config lookup mismatches and reply delivery failures (`M_UNKNOWN: non-create event for room of unknown version`). Fix: treat `!`-prefixed entries as room IDs directly (skip resolution). Only resolve `#alias:server` entries. ## Testing Tested with Conduit homeserver (lightweight Rust Matrix server). All fixes verified with gateway log tracing: - `logged in as @arvi:matrix.local` — first successful login - `room.message` events fire and reach handler - Room config matching returns `allowed: true` - Agent generates response and delivers it to Matrix room