FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y --no-install-recommends \ bash \ ca-certificates \ coreutils \ curl \ file \ findutils \ jq \ less \ poppler-utils \ ripgrep \ unzip \ zip \ && rm -rf /var/lib/apt/lists/* RUN pip install --no-cache-dir \ openpyxl==3.1.5 \ pandas==3.0.3 \ pdfplumber==0.11.10 \ pypdf==6.14.2 \ pytest==8.3.4 \ python-docx==1.2.0 \ python-pptx==1.0.2 \ pyyaml==6.0.2 \ reportlab==5.0.0 ENV NVM_DIR=/root/.nvm ENV NODE_VERSION=22.23.1 SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN curl -fsSL --retry 5 --retry-delay 2 \ https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh \ | bash \ && source "$NVM_DIR/nvm.sh" \ && nvm install "$NODE_VERSION" \ && nvm alias default "$NODE_VERSION" \ && nvm use "$NODE_VERSION" \ && npm install -g openclaw@2026.7.1 \ --fetch-retries=5 \ --fetch-retry-mintimeout=20000 \ --fetch-retry-maxtimeout=120000 \ && npm cache clean --force ENV PATH=/root/.nvm/versions/node/v22.23.1/bin:${PATH} RUN source "$NVM_DIR/nvm.sh" \ && nvm use 22 \ && test "$(node --version)" = "v22.23.1" \ && npm list -g openclaw@2026.7.1 --depth=0 \ && openclaw --version | grep -Eq '(^| )2026\.7\.1($| )' RUN printf '%s\n' '#!/bin/sh' 'exec python /app/tools/xlsx_dump.py "$@"' \ > /usr/local/bin/xlsx-dump \ && chmod +x /usr/local/bin/xlsx-dump \ && ln -s /app/pdf_text_extract.py /usr/local/bin/pdf_text_extract.py \ && ln -s /app/baseline_manifest.txt /opt/baseline_manifest.txt \ && mkdir -p /app/data /app/output WORKDIR /app CMD ["python", "-m", "http.server", "7860", "--bind", "0.0.0.0"]