feat: script command routing + LLM slot acquisition in base_agent

- Add _handle_script_command() to bypass LLM and call script skill directly
- Add 'script' to _handle_system_command routing
- Add _llm_slot_acquire() / _llm_slot_release() MQTT semaphore for Ollama coordination

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-15 19:48:51 +00:00
parent 4b5960ada6
commit add11ee6c1
+25
View File
@@ -559,12 +559,37 @@ class BaseAgent(ABC):
all_agents = [a.agent_id for a in self.registry.all_agents()]
return f"Agents en ligne : {online}\nAgents connus : {all_agents}"
if cmd == "script":
return self._handle_script_command(args, source_msg)
if cmd == "update":
return self._do_self_update(source_msg)
# Commandes custom de l'agent
return self.handle_custom_command(cmd, args, source_msg)
# ──────────────────────────────────────────────
# Commande script directe (bypass LLM)
# ──────────────────────────────────────────────
def _handle_script_command(self, args: str, source_msg: Optional[Message] = None) -> str:
"""
Exécute une commande script sans passer par le LLM.
args : 'exec <nom> [args]' | 'list' | 'show <nom>' | 'run | <contenu>'
"""
context = AgentContext(self)
result = self.skills.run("script", args, context)
if result is None:
result = f"[{self.agent_id}] Skill 'script' non disponible."
# Renvoi MQTT si la commande vient d'un autre agent
if source_msg and source_msg.reply_to:
try:
self.mqtt.reply(source_msg, result)
except Exception as e:
logger.debug(f"[Script] Impossible d'envoyer la réponse : {e}")
return result
# ──────────────────────────────────────────────
# Mise à jour self
# ──────────────────────────────────────────────