fix: nexus répond dans le MUC quand message vient du MUC
Remplace send_message(sender) par _xmpp_reply(sender, body, is_muc) pour que les réponses aux commandes MUC arrivent dans la room et pas en chat privé vers un JID de participant. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -143,31 +143,36 @@ class Nexus(BaseAgent):
|
|||||||
if cmd.type == CommandType.SYSTEM:
|
if cmd.type == CommandType.SYSTEM:
|
||||||
reply = self._handle_system_command(f"/{cmd.command} {cmd.args}", raw_cmd=cmd)
|
reply = self._handle_system_command(f"/{cmd.command} {cmd.args}", raw_cmd=cmd)
|
||||||
if reply and self.xmpp:
|
if reply and self.xmpp:
|
||||||
self.xmpp.send_message(sender, reply)
|
self._xmpp_reply(sender, reply, is_muc)
|
||||||
return
|
return
|
||||||
|
|
||||||
# ── Message direct @agent
|
# ── Message direct @agent
|
||||||
if cmd.type == CommandType.DIRECT:
|
if cmd.type == CommandType.DIRECT:
|
||||||
reply = self._delegate_direct(cmd, sender)
|
reply = self._delegate_direct(cmd, sender)
|
||||||
if self.xmpp:
|
if self.xmpp:
|
||||||
self.xmpp.send_message(sender, reply)
|
self._xmpp_reply(sender, reply, is_muc)
|
||||||
return
|
return
|
||||||
|
|
||||||
# ── Broadcast @all
|
# ── Broadcast @all
|
||||||
if cmd.type == CommandType.BROADCAST:
|
if cmd.type == CommandType.BROADCAST:
|
||||||
self.mqtt.broadcast(cmd.args or "")
|
self.mqtt.broadcast(cmd.args or "")
|
||||||
if self.xmpp:
|
if self.xmpp:
|
||||||
self.xmpp.send_message(sender, "Broadcast envoyé à tous les agents.")
|
self._xmpp_reply(sender, "Broadcast envoyé à tous les agents.", is_muc)
|
||||||
return
|
return
|
||||||
|
|
||||||
# ── Mode naturel → LLM → skills
|
# ── Mode naturel → LLM → skills
|
||||||
extra_ctx = self.registry.summary_for_llm(self._online_agents)
|
extra_ctx = self.registry.summary_for_llm(self._online_agents)
|
||||||
response = self._llm_loop(body, context, extra_ctx)
|
response = self._llm_loop(body, context, extra_ctx)
|
||||||
|
|
||||||
# Enregistre le JID pour le retour asynchrone éventuel
|
|
||||||
# (si le LLM a délégué à un agent via DELEGATE skill)
|
|
||||||
if self.xmpp:
|
if self.xmpp:
|
||||||
self.xmpp.send_message(sender, response)
|
self._xmpp_reply(sender, response, is_muc)
|
||||||
|
|
||||||
|
def _xmpp_reply(self, sender: str, body: str, is_muc: bool):
|
||||||
|
"""Répond dans le bon canal : MUC si message vient du MUC, direct sinon."""
|
||||||
|
if is_muc:
|
||||||
|
self.xmpp.send_to_group(body)
|
||||||
|
else:
|
||||||
|
self.xmpp.send_message(sender, body)
|
||||||
|
|
||||||
def _delegate_direct(self, cmd: ParsedCommand, sender_jid: str) -> str:
|
def _delegate_direct(self, cmd: ParsedCommand, sender_jid: str) -> str:
|
||||||
"""Route @agent message directement via MQTT."""
|
"""Route @agent message directement via MQTT."""
|
||||||
|
|||||||
Reference in New Issue
Block a user