From be8699ae4cd6ca942612b3ca1f4699eb70cf8f19 Mon Sep 17 00:00:00 2001 From: mohe Date: Sat, 20 Jun 2026 20:16:05 +0800 Subject: [PATCH] lead= switch, @mention auto-grant --- xmpp_agent_core.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/xmpp_agent_core.py b/xmpp_agent_core.py index 5e54579..878da1a 100644 --- a/xmpp_agent_core.py +++ b/xmpp_agent_core.py @@ -143,14 +143,19 @@ class AgentBot(ClientXMPP): # Coordinator 模式 — 全走 XMPP 消息 - # 1. hmo 切换 coordinator - if nickname == 'hmo' and 'coordinator=' in body.lower(): - for _name in ['mohe', 'zhiwei', 'xxm']: - if f'coordinator={_name}' in body.lower(): - self._coordinator = _name - self._granted = None - logging.info(f"👑 Coordinator 切换为 {_name}") - break + # 1. hmo 切换 coordinator(lead=xxx) + if nickname == 'hmo': + if 'lead=' in body.lower(): + for _name in ['mohe', 'zhiwei', 'xxm']: + if f'lead={_name}' in body.lower(): + self._coordinator = _name + self._granted = None + logging.info(f"👑 Coordinator 切换为 {_name}") + break + # hmo 直接 @点名 → 临时授权(一次) + elif any(tag in body for tag in [f'@{AGENT_NICK}', f'@{AGENT_NAME}']): + self._granted = AGENT_NICK + logging.info(f"🎤 被 hmo 点名,获得发言权") # 2. 检测授权信号(优先于收回,GRANT 可以覆盖 REVOKE) _grant_match = re.search(r'\[GRANT:(\w+)\]', body) @@ -210,9 +215,10 @@ class AgentBot(ClientXMPP): "3. 别人说错了关键事实,不纠正会有后果\n" "如果以上都不符合,你的回复必须只包含 __SILENT__ 这10个字符," "不要有任何其他内容(不要前缀、不要解释、不要标点、不要空格)。\n\n" - "注意:你是协调者(coordinator)。你的第一职责是管理讨论节奏,不是自己说话。\n" + "注意:你是协调者(lead)。你的第一职责是管理讨论节奏,不是自己说话。\n" "- 别人能回答的问题,不抢答。\n" "- 如果其他 Agent 更合适,用 [GRANT:agent名] 授权他们发言(例如 [GRANT:zhiwei])。\n" + "- hmo 直接 @点名某人 也会自动授权。\n" "- 如果有人跑题/刷屏,用 [REVOKE:agent名] 收回发言权(例如 [REVOKE:zhiwei])。\n" "- [GRANT] 可以覆盖 [REVOKE]。标记会显示在消息中。\n\n" f"[核心群 {room}] {nickname} 说: {body}"