!agentUPDATE/UPGRADE : fallback automatique sur /opt/<nom> si install_path absent

_get_agent_git_info déduit le chemin depuis le nom de l'agent par convention
(/opt/<nom>, service <nom>) au lieu de bloquer avec une erreur.
!agentsUPDATE/UPGRADE couvre tous les agents du registre sans filtre.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 16:06:14 +00:00
parent 3575b391b6
commit 1565b145dc
+29 -24
View File
@@ -202,26 +202,35 @@ def _handle_agent_command(text: str) -> tuple:
return False, None return False, None
# ── MISE À JOUR DEPUIS GIT ─────────────────────────────────────────────── # ── MISE À JOUR DEPUIS GIT ───────────────────────────────────────────────
def _get_agent_git_info(name: str) -> dict | None: def _get_agent_git_info(name: str) -> dict:
"""Retourne {install_path, service_name, git_branch} depuis le registre, ou None.""" """
Retourne {install_path, service_name, git_branch} pour un agent.
Priorité : registre → convention /opt/<nom> (fallback automatique).
"""
try: try:
registry = json.loads(REGISTRY_FILE.read_text(encoding="utf-8")) registry = json.loads(REGISTRY_FILE.read_text(encoding="utf-8"))
agent = registry.get(name, {}) agent = registry.get(name, {})
if "install_path" not in agent:
return None
return {
"install_path": agent["install_path"],
"service_name": agent.get("service_name", name),
"git_branch" : agent.get("git_branch", "main"),
}
except Exception: except Exception:
return None agent = {}
# Fallback : déduire depuis le nom de l'agent (convention /opt/<nom>)
# agent1 est un cas particulier : /opt/agent, service "agent"
if name == "agent1":
default_path = "/opt/agent"
default_service = "agent"
else:
default_path = "/opt/{}".format(name)
default_service = name
return {
"install_path": agent.get("install_path", default_path),
"service_name": agent.get("service_name", default_service),
"git_branch" : agent.get("git_branch", "main"),
}
def _handle_update_one(name: str) -> str: def _handle_update_one(name: str) -> str:
from skills.agent_update import check_update from skills.agent_update import check_update
info = _get_agent_git_info(name) info = _get_agent_git_info(name)
if not info:
return "[{}] Infos git absentes du registre (install_path manquant).".format(name)
return check_update(name, info["install_path"], info["git_branch"]) return check_update(name, info["install_path"], info["git_branch"])
def _handle_update_all() -> str: def _handle_update_all() -> str:
@@ -231,17 +240,14 @@ def _handle_update_all() -> str:
except Exception: except Exception:
return "Erreur lecture registre." return "Erreur lecture registre."
results = [] results = []
for name, info in registry.items(): for name in registry:
if "install_path" not in info: info = _get_agent_git_info(name)
continue results.append(check_update(name, info["install_path"], info["git_branch"]))
results.append(check_update(name, info["install_path"], info.get("git_branch", "main"))) return "\n\n".join(results) if results else "Aucun agent dans le registre."
return "\n\n".join(results) if results else "Aucun agent avec install_path dans le registre."
def _handle_upgrade_one(name: str) -> str: def _handle_upgrade_one(name: str) -> str:
from skills.agent_update import do_upgrade from skills.agent_update import do_upgrade
info = _get_agent_git_info(name) info = _get_agent_git_info(name)
if not info:
return "[{}] Infos git absentes du registre.".format(name)
self_upgrade = (name == "agent1") self_upgrade = (name == "agent1")
msg = do_upgrade(name, info["install_path"], info["service_name"], msg = do_upgrade(name, info["install_path"], info["service_name"],
info["git_branch"], self_upgrade=self_upgrade) info["git_branch"], self_upgrade=self_upgrade)
@@ -264,14 +270,13 @@ def _handle_upgrade_all() -> str:
results = [] results = []
agent1_info = None agent1_info = None
for name, info in registry.items(): for name in registry:
if "install_path" not in info: info = _get_agent_git_info(name)
continue
if name == "agent1": if name == "agent1":
agent1_info = (name, info) # traiter en dernier agent1_info = (name, info) # traiter en dernier
continue continue
msg = do_upgrade(name, info["install_path"], msg = do_upgrade(name, info["install_path"],
info.get("service_name", name), info.get("git_branch", "main")) info["service_name"], info["git_branch"])
results.append(msg) results.append(msg)
summary = "\n\n".join(results) if results else "Aucun agent mis à jour." summary = "\n\n".join(results) if results else "Aucun agent mis à jour."
@@ -279,7 +284,7 @@ def _handle_upgrade_all() -> str:
if agent1_info: if agent1_info:
name, info = agent1_info name, info = agent1_info
pull_msg = do_upgrade(name, info["install_path"], pull_msg = do_upgrade(name, info["install_path"],
info.get("service_name", "agent"), info.get("git_branch", "main"), info["service_name"], info["git_branch"],
self_upgrade=True) self_upgrade=True)
summary += "\n\n" + pull_msg summary += "\n\n" + pull_msg
if xmpp_bot: if xmpp_bot: