hermes-agent-custom/patches/apply_patch.py
2026-04-27 14:55:51 -03:00

47 lines
1.5 KiB
Python

"""
Injeta `from skills_api import router as skills_router` + `app.include_router(...)`
no api_server.py do Hermes durante o build da imagem.
Idempotente: se o marcador já existir, não faz nada.
"""
from __future__ import annotations
import sys
from pathlib import Path
MARKER = "# >>> hermes-custom: skills_api <<<"
INJECT = f"""
{MARKER}
try:
from skills_api import router as _skills_router
app.include_router(_skills_router)
print("[hermes-custom] skills_api router registered", flush=True)
except Exception as _e:
print(f"[hermes-custom] failed to register skills_api: {{_e}}", flush=True)
# <<< hermes-custom: skills_api >>>
"""
def main(target: str) -> int:
p = Path(target)
if not p.exists():
print(f"[apply_patch] target not found: {target}", file=sys.stderr)
return 1
src = p.read_text(encoding="utf-8")
if MARKER in src:
print("[apply_patch] already applied, skipping")
return 0
# Procura a linha onde o `app = FastAPI(...)` é instanciado e injeta logo
# após o bloco de criação. Estratégia: anexa no final do arquivo — mais
# robusto contra mudanças upstream do que tentar achar a linha exata.
new_src = src.rstrip() + "\n\n" + INJECT + "\n"
p.write_text(new_src, encoding="utf-8")
print(f"[apply_patch] injected at offset {len(src)}")
return 0
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "/opt/hermes/gateway/platforms/api_server.py"
sys.exit(main(target))