mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-08 03:01:47 +00:00
fix: keep Feishu topic replies from falling back to new threads (local patch)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3ccf723bf9
commit
a79b0ec461
2 changed files with 32 additions and 4 deletions
|
|
@ -2506,7 +2506,13 @@ class BasePlatformAdapter(ABC):
|
||||||
_r = await self._send_with_retry(
|
_r = await self._send_with_retry(
|
||||||
chat_id=event.source.chat_id,
|
chat_id=event.source.chat_id,
|
||||||
content=_text,
|
content=_text,
|
||||||
reply_to=event.message_id,
|
reply_to=(
|
||||||
|
event.reply_to_message_id
|
||||||
|
if event.source.platform == Platform.FEISHU
|
||||||
|
and event.source.thread_id
|
||||||
|
and event.reply_to_message_id
|
||||||
|
else event.message_id
|
||||||
|
),
|
||||||
metadata=thread_meta,
|
metadata=thread_meta,
|
||||||
)
|
)
|
||||||
if _eph_ttl > 0 and _r.success and _r.message_id:
|
if _eph_ttl > 0 and _r.success and _r.message_id:
|
||||||
|
|
@ -2606,7 +2612,13 @@ class BasePlatformAdapter(ABC):
|
||||||
_r = await self._send_with_retry(
|
_r = await self._send_with_retry(
|
||||||
chat_id=event.source.chat_id,
|
chat_id=event.source.chat_id,
|
||||||
content=_text,
|
content=_text,
|
||||||
reply_to=event.message_id,
|
reply_to=(
|
||||||
|
event.reply_to_message_id
|
||||||
|
if event.source.platform == Platform.FEISHU
|
||||||
|
and event.source.thread_id
|
||||||
|
and event.reply_to_message_id
|
||||||
|
else event.message_id
|
||||||
|
),
|
||||||
metadata=_thread_meta,
|
metadata=_thread_meta,
|
||||||
)
|
)
|
||||||
if _eph_ttl > 0 and _r.success and _r.message_id:
|
if _eph_ttl > 0 and _r.success and _r.message_id:
|
||||||
|
|
@ -2810,10 +2822,15 @@ class BasePlatformAdapter(ABC):
|
||||||
# Send the text portion
|
# Send the text portion
|
||||||
if text_content:
|
if text_content:
|
||||||
logger.info("[%s] Sending response (%d chars) to %s", self.name, len(text_content), event.source.chat_id)
|
logger.info("[%s] Sending response (%d chars) to %s", self.name, len(text_content), event.source.chat_id)
|
||||||
|
_reply_anchor = (
|
||||||
|
event.reply_to_message_id
|
||||||
|
if event.source.platform == Platform.FEISHU and event.source.thread_id and event.reply_to_message_id
|
||||||
|
else event.message_id
|
||||||
|
)
|
||||||
result = await self._send_with_retry(
|
result = await self._send_with_retry(
|
||||||
chat_id=event.source.chat_id,
|
chat_id=event.source.chat_id,
|
||||||
content=text_content,
|
content=text_content,
|
||||||
reply_to=event.message_id,
|
reply_to=_reply_anchor,
|
||||||
metadata=_thread_metadata,
|
metadata=_thread_metadata,
|
||||||
)
|
)
|
||||||
_record_delivery(result)
|
_record_delivery(result)
|
||||||
|
|
|
||||||
|
|
@ -2757,9 +2757,11 @@ class FeishuAdapter(BasePlatformAdapter):
|
||||||
if hint:
|
if hint:
|
||||||
text = f"{hint}\n\n{text}" if text else hint
|
text = f"{hint}\n\n{text}" if text else hint
|
||||||
|
|
||||||
|
thread_id = getattr(message, "thread_id", None) or getattr(message, "root_id", None) or None
|
||||||
reply_to_message_id = (
|
reply_to_message_id = (
|
||||||
getattr(message, "parent_id", None)
|
getattr(message, "parent_id", None)
|
||||||
or getattr(message, "upper_message_id", None)
|
or getattr(message, "upper_message_id", None)
|
||||||
|
or getattr(message, "root_id", None)
|
||||||
or None
|
or None
|
||||||
)
|
)
|
||||||
reply_to_text = await self._fetch_message_text(reply_to_message_id) if reply_to_message_id else None
|
reply_to_text = await self._fetch_message_text(reply_to_message_id) if reply_to_message_id else None
|
||||||
|
|
@ -2791,7 +2793,7 @@ class FeishuAdapter(BasePlatformAdapter):
|
||||||
chat_type=self._resolve_source_chat_type(chat_info=chat_info, event_chat_type=chat_type),
|
chat_type=self._resolve_source_chat_type(chat_info=chat_info, event_chat_type=chat_type),
|
||||||
user_id=sender_profile["user_id"],
|
user_id=sender_profile["user_id"],
|
||||||
user_name=sender_profile["user_name"],
|
user_name=sender_profile["user_name"],
|
||||||
thread_id=getattr(message, "thread_id", None) or None,
|
thread_id=thread_id,
|
||||||
user_id_alt=sender_profile["user_id_alt"],
|
user_id_alt=sender_profile["user_id_alt"],
|
||||||
is_bot=is_bot,
|
is_bot=is_bot,
|
||||||
)
|
)
|
||||||
|
|
@ -4227,6 +4229,15 @@ class FeishuAdapter(BasePlatformAdapter):
|
||||||
if active_reply_to and not self._response_succeeded(response):
|
if active_reply_to and not self._response_succeeded(response):
|
||||||
code = getattr(response, "code", None)
|
code = getattr(response, "code", None)
|
||||||
if code in _FEISHU_REPLY_FALLBACK_CODES:
|
if code in _FEISHU_REPLY_FALLBACK_CODES:
|
||||||
|
if (metadata or {}).get("thread_id"):
|
||||||
|
logger.warning(
|
||||||
|
"[Feishu] Reply to %s failed in thread %s (code %s — message withdrawn/missing); "
|
||||||
|
"skipping top-level fallback to avoid creating a new topic",
|
||||||
|
active_reply_to,
|
||||||
|
(metadata or {}).get("thread_id"),
|
||||||
|
code,
|
||||||
|
)
|
||||||
|
return response
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"[Feishu] Reply to %s failed (code %s — message withdrawn/missing); "
|
"[Feishu] Reply to %s failed (code %s — message withdrawn/missing); "
|
||||||
"falling back to new message in chat %s",
|
"falling back to new message in chat %s",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue