!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:
@@ -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:
|
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 {
|
return {
|
||||||
"install_path": agent["install_path"],
|
"install_path": agent.get("install_path", default_path),
|
||||||
"service_name": agent.get("service_name", name),
|
"service_name": agent.get("service_name", default_service),
|
||||||
"git_branch" : agent.get("git_branch", "main"),
|
"git_branch" : agent.get("git_branch", "main"),
|
||||||
}
|
}
|
||||||
except Exception:
|
|
||||||
return None
|
|
||||||
|
|
||||||
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:
|
||||||
|
|||||||
Reference in New Issue
Block a user