fix(wechatmp): merge cached text segments in passive reply

In subscription account passive reply mode, WeChat allows only one reply per request. Multi-turn agent output was cached as separate entries, forcing the user to send an extra message to fetch each one. Now drain and merge all consecutive cached text segments into a single reply; media still returns one at a time.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
6vision
2026-05-30 14:41:51 +08:00
parent 3dd4b84179
commit 458b1a1d88

View File

@@ -131,8 +131,22 @@ class Query:
# Only one request can access to the cached data # Only one request can access to the cached data
try: try:
(reply_type, reply_content) = channel.cache_dict[from_user].pop(0) # WeChat passive reply allows only a single reply per request.
if not channel.cache_dict[from_user]: # If popping the message makes the list empty, delete the user entry from cache # To avoid forcing the user to send an extra message for every
# segment of multi-turn agent output, drain all consecutive
# cached text segments at once and merge them into one reply.
# Media (voice/image) can only be returned one at a time, so it
# stops the merge and is returned on its own.
cached = channel.cache_dict[from_user]
if cached[0][0] == "text":
reply_type = "text"
merged_parts = []
while cached and cached[0][0] == "text":
merged_parts.append(cached.pop(0)[1])
reply_content = "\n\n".join(merged_parts)
else:
(reply_type, reply_content) = cached.pop(0)
if not channel.cache_dict[from_user]: # If draining empties the list, delete the user entry from cache
del channel.cache_dict[from_user] del channel.cache_dict[from_user]
except IndexError: except IndexError:
return "success" return "success"