01819b5bc2
DingTalk websocket (Stream) channels stopped delivering @-mentions after a day or two and only recovered when the IM channel was toggled off/on. The factory fired the SDK's Start once and relied entirely on the SDK's internal auto-reconnect, with no liveness supervision on WeKnora's side. On long-running connections the SDK can enter a zombie state where the connection object stays alive but no longer receives messages, leaving no way to recover automatically. The cancel func was also ineffective because the SDK ignores the context after the initial dial, so stopping a channel leaked the old connection. Add a reusable RunSupervised helper that keeps a long connection alive and proactively recycles it every 6h on top of the SDK's own reconnect, which bounds the worst-case outage and clears stuck connections. Wire DingTalk to it, add LongConnClient.Close (disables AutoReconnect before closing so the SDK does not resurrect the connection), and make the cancel func actually tear the connection down. Drop the now-unused stream client reference from the adapter, which only sends replies via sessionWebhook or OpenAPI.