# syntax=docker/dockerfile:1
# Hermes Agent with Chromium -- local browser tool support
# Based on python:3.11-slim for minimal footprint.
# Chromium installed via apt-get for system-level browser automation.
#
# Build:
#   docker build -t hermes-agent:chromium .
#
# Environment variables:
#   CHROME_EXECUTABLE  -- path to the Chromium binary

# ---------- Base image ----------
FROM python:3.11-slim

ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1

# ---------- System dependencies for Chromium ----------
# The minimum set required to run headless Chromium on Linux.
# python:3.11-slim is Debian Bookworm (12) -- package names without t64 suffix.
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        # Chromium and its launcher
        chromium \
        chromium-common \
        chromium-sandbox \
        # Font rendering for proper page rendering
        fonts-liberation \
        fonts-noto-color-emoji \
        fonts-dejavu-core \
        # System libraries required by Chromium at runtime
        libnss3 \
        libnspr4 \
        libatk1.0-0 \
        libatk-bridge2.0-0 \
        libcups2 \
        libdrm2 \
        libxdamage1 \
        libxfixes3 \
        libxcomposite1 \
        libxrandr2 \
        libgbm1 \
        libpango-1.0-0 \
        libcairo2 \
        libasound2 \
        libxkbcommon0 \
        libxshmfence1 \
        # Virtual framebuffer for headless operation
        xvfb \
        # Process supervisor for orphan reaping
        tini \
        # Git for Hermes source operations
        git \
        # SSL certificates for HTTPS connections
        ca-certificates \
        # Curl for health checks
        curl \
    && rm -rf /var/lib/apt/lists/*

# ---------- Hermes Agent installation ----------
# Install uv (fast Python package manager)
COPY --chmod=0755 --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
COPY --chmod=0755 --from=ghcr.io/astral-sh/uv:latest /uvx /usr/local/bin/uvx

# Create hermes user (non-root runtime)
RUN useradd -u 10000 -m -d /opt/data hermes

# Install Hermes Agent from PyPI with gateway support for messaging
RUN uv pip install --system --no-cache-dir \
        'hermes-agent[gateway]' \
        croniter && \
    uv cache clean

# Create the /opt/hermes directory structure expected by entrypoint
RUN mkdir -p /opt/hermes/.venv/bin && \
    mkdir -p /opt/hermes/docker && \
    ln -sf /usr/local/bin/uv /opt/hermes/.venv/bin/uv && \
    ln -sf /usr/local/bin/uvx /opt/hermes/.venv/bin/uvx

# ---------- Entrypoint script ----------
COPY entrypoint.sh /opt/hermes/docker/entrypoint.sh
RUN chmod +x /opt/hermes/docker/entrypoint.sh

# ---------- Environment variables ----------
# Point browser tool to system Chromium (installed via apt-get)
ENV CHROME_EXECUTABLE=/usr/bin/chromium

# Hermes paths
ENV HERMES_HOME=/opt/data
ENV PATH="/opt/data/.local/bin:${PATH}"

# Playwright browsers path (for agent-browser install at runtime)
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/hermes/.playwright

# Virtual framebuffer display for headless Chromium
ENV DISPLAY=:99

# ---------- Data volume ----------
VOLUME [ "/opt/data" ]

# ---------- Runtime ----------
USER hermes
WORKDIR /opt/data

ENTRYPOINT [ "/opt/hermes/docker/entrypoint.sh" ]
CMD [ "gateway", "run" ]
