Si le LLM est déjà occupé, répond immédiatement au lieu d'empiler
les requêtes. Évite la queue silencieuse qui bloquait les agents
pendant plusieurs minutes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Stocke _config_path dans BaseAgent pour la persistance
- Souscription à agents/llm/switch (retained) sur tous les agents
- _on_llm_switch : change self.llm.model + persiste dans config.json
- _save_config : écrit la config en mémoire dans le fichier JSON
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The LLM call (up to 300s) was blocking the slixmpp asyncio event loop,
preventing keepalive pings and causing the server to close the connection.
All XMPP message handling now runs in a daemon thread.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
XMPPClient.connect_async() now runs a persistent reconnect loop in a
daemon thread. On connection loss, it reconnects after 5s with
exponential backoff up to 60s. The on_ready callback is only called
on the first successful connection.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix root cause: Message.from_json was parsing status/capabilities
payloads (plain JSON dicts) as Message objects with empty payload,
causing _on_status_update to silently fail. Now plain JSON payloads
(no 'type'/'sender' keys) are passed as raw strings to callbacks.
- _on_status_update: ignore own status, call on_agent_status_change
hook only when status actually changes (was_online != is_online)
- Add on_agent_status_change(agent_id, status) hook in BaseAgent
- Add on_xmpp_connected() hook in BaseAgent
- XMPPClient.connect_async() accepts on_ready callback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace process(forever=True) with asyncio event loop in _SlixClient.start()
- Make send_xmpp_message() thread-safe via loop.call_soon_threadsafe()
- Remove wait=True from join_muc() (no longer supported in slixmpp 1.13)
- Silence empty retained MQTT capability messages in CapabilitiesRegistry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>