b447554ce5
`_fetch_last_message_in_thread` was the last hot-path `asyncio.to_thread` in the adapter: after a default-executor teardown (#111020) thread-reply routing would fail the same way the dedup flush did. Route it through `_run_blocking` like every other blocking SDK call. The remaining `to_thread` users (`_load_lark_oapi` at connect/onboarding, the voice transcode with its file-attachment fallback) are cold or degrade cleanly.