# ============================================================ # Stage 1: Build Hermes a partir do código-fonte oficial # ============================================================ FROM python:3.12-slim AS hermes-base RUN apt-get update && apt-get install -y --no-install-recommends \ git \ curl \ ca-certificates \ build-essential \ && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* # Clona o Hermes oficial da NousResearch RUN git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /opt/hermes WORKDIR /opt/hermes # Builda o frontend do dashboard web (necessário para `hermes dashboard`) WORKDIR /opt/hermes/web RUN npm install && npm run build # Volta para a raiz e instala o Hermes + dependências Python WORKDIR /opt/hermes RUN pip install --no-cache-dir --upgrade pip \ && pip install --no-cache-dir -e ".[all]" # ============================================================ # Stage 2: Customizações (skills_api + entrypoint + proxy) # ============================================================ FROM hermes-base # Dependências adicionais para o proxy/skills_api RUN pip install --no-cache-dir aiohttp # Copia customizações COPY patches/skills_api.py /opt/hermes-custom/skills_api.py COPY entrypoint.sh /opt/hermes-custom/entrypoint.sh RUN chmod +x /opt/hermes-custom/entrypoint.sh # Garante que o Python encontre o módulo customizado ENV PYTHONPATH=/opt/hermes-custom:/opt/hermes # Diretório de dados/config do Hermes RUN mkdir -p /opt/data/.hermes /opt/hermes-custom # Config padrão (caso HERMES_CONFIG_OVERRIDE não seja definido) RUN printf '%s\n' \ 'name: hermes-custom' \ 'host: 127.0.0.1' \ 'port: 8000' \ 'data_dir: /opt/data' \ > /opt/data/.hermes/config.yaml # SOUL.md padrão (sobrescrito em runtime via HERMES_SOUL_OVERRIDE) RUN printf '%s\n' \ '# Hermes Soul' \ '' \ 'Default soul. Override via HERMES_SOUL_OVERRIDE.' \ > /opt/data/.hermes/SOUL.md # Cria o usuário hermes (esperado pelos scripts internos do Hermes) RUN groupadd -r hermes \ && useradd -r -g hermes -d /opt/data -s /usr/sbin/nologin hermes \ && chown -R hermes:hermes /opt/data /opt/hermes-custom /opt/hermes # Porta pública do proxy/skills_api EXPOSE 8642 ENTRYPOINT ["/opt/hermes-custom/entrypoint.sh"]