# Codex app-server 任务镜像：只含运行环境 + codex 二进制，代码运行时挂载。
#
# 构建（在 codex-app-server 仓库根目录，构建上下文就是仓库根）：
#   docker build -f cloud/docker/Dockerfile -t codex-app-server:latest \
#     --build-arg CODEX_BIN_DIR=bin .
#
# 说明（不要绕过去）：
# - CODEX_BIN_DIR 是调用方在构建主机上提供的配对二进制目录
#   （npm 安装 @openai/codex 后自带 codex + codex-code-mode-host +
#   codex-resources/bwrap，约 367M）。bin/ 不进仓库、不进镜像层
#   之外的任何地方；没有配对二进制就不要构建，构建会直接失败，
#   绝不静默用一个缺 sibling 的裸二进制。
# - host.py / cloud/ 代码不在镜像里：运行时由 DockerExecutor 以
#   只读方式挂载到 /app（-v <代码目录>:/app:ro），代码改了不用
#   重新构建镜像；codex 版本变了才需要重新构建。
# - 任务自己的 worktree 运行时挂载到 /work（可写），绝不挂载宿主
#   根目录、绝不挂载任何含密钥的目录。
# - 镜像里不含任何 key：模型 key 运行时由 DockerExecutor 以
#   `-e <env_key名>` 从宿主进程环境注入容器，不写进 Dockerfile、
#   不写进镜像层、不写进日志。
# - codex 自带的 bubblewrap 沙箱在容器内是否可用，取决于宿主
#   的容器权限配置，本镜像不假装解决：真实环境实测时若 bwrap
#   不可用，host.py 的 sandbox 参数仍可退到 read-only /
#   workspace-write 的控制面约束，见 cloud/README.md。
ARG PYTHON_VERSION=3.12-slim
FROM python:${PYTHON_VERSION}
# 文档 / 图片工具（document-tools、image-workflow 技能的核查项）：
# - pandoc：通用文档转换；poppler-utils：pdftotext（PDF 读回）。
# - latexmk + texlive-latex-base：pdflatex 编译（英文 LaTeX；
#   中文 LaTeX 仍需 xelatex + CJK 字体，见下，本镜像故意不装：
#   texlive-xetex + fonts-noto-cjk 会再增数百 MB，主机盘已 89%，
#   中文 LaTeX 缺 xelatex 时技能按规则明说，不伪造）。
# - pip：python-docx / openpyxl / python-pptx / PyMuPDF（fitz）/
#   Pillow——技能核查的 Python 库与图片处理（Pillow 有其一即可
#   做裁剪/缩放/转格式）。图片“生成”仍未配置：本镜像不装、
#   不接任何生成端点，生成需求技能仍按规则明说无法生成。
# - --no-cache-dir：pip 不留缓存层，镜像不虚胖。
RUN apt-get update \
 && apt-get install -y --no-install-recommends git pandoc poppler-utils latexmk texlive-latex-base \
 && rm -rf /var/lib/apt/lists/* \
 && pip install --no-cache-dir python-docx openpyxl python-pptx PyMuPDF Pillow
ARG CODEX_BIN_DIR=bin
COPY ${CODEX_BIN_DIR}/codex /usr/local/bin/codex
COPY ${CODEX_BIN_DIR}/codex-code-mode-host /usr/local/bin/codex-code-mode-host
# 关键：codex 找 bundled bwrap 只看自身旁边的 codex-resources，
# 不能放到 /usr/local/lib 下（上一版镜像就是这么丢的，导致
# 容器内报 bubblewrap is unavailable，工具全失败）。
# 同时把 bwrap 放进 PATH，双保险。
COPY ${CODEX_BIN_DIR}/codex-resources /usr/local/bin/codex-resources
RUN chmod +x /usr/local/bin/codex /usr/local/bin/codex-code-mode-host \
 && ln -sf /usr/local/bin/codex-resources/bwrap /usr/local/bin/bwrap \
 && /usr/local/bin/bwrap --version
WORKDIR /work
# 无 ENTRYPOINT：DockerExecutor 显式传完整容器内命令
# （python3 /app/host.py dispatch/run/status ...），镜像只提供环境。
CMD ["python3", "--version"]
