Files
lvmh/docker/control.Dockerfile
T

37 lines
1.4 KiB
Docker

# lvmh ops image: the control pi that lives inside the daemon deployment.
# Has docker CLI + the daemon's docker.sock mounted (see ops.go binds), so it
# can clone repos, inspect them, write Dockerfiles, build per-repo worker
# images and register them via the daemon REST API.
FROM node:24-bookworm-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bash ca-certificates git ripgrep curl xz-utils make jq golang-go \
docker.io \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g --ignore-scripts @earendil-works/pi-coding-agent
# Same npm shim as the worker image (see worker.Dockerfile).
RUN mv /usr/local/bin/npm /usr/local/bin/npm-real
COPY docker/npm-shim /usr/local/bin/npm
RUN chmod +x /usr/local/bin/npm
# Same pi config as workers (dotfiles, filtered; git: packages stripped).
COPY docker/pi-agent/ /root/.pi/agent/
COPY plugin/lvmh-agent.ts /root/.pi/agent/extensions/lvmh-agent.ts
COPY docker/worker-models.json /root/.pi/agent/models.json
# Ops instructions live in the workspace (AGENTS.md is auto-loaded from cwd).
COPY docker/ops-context/AGENTS.md /ops-seed/AGENTS.md
COPY docker/bridge /bridge
# Seed AGENTS.md into the persistent /ops volume on first boot only.
COPY docker/ops-context/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV PI_SESSION_DIR=/pi-sessions
WORKDIR /ops
ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "/bridge/index.mjs"]