Files
lvmh/docker/control.Dockerfile

49 lines
2.0 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 \
libglib2.0-0 libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 \
libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 \
&& 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).
COPY docker/npm-real /usr/local/bin/npm-real
COPY docker/npm-shim /usr/local/bin/npm-ignore-scripts
# rm first: /usr/local/bin/npm is a symlink into npm's lib dir, and COPY
# would follow it and clobber npm-cli.js itself.
RUN rm -f /usr/local/bin/npm \
&& mv /usr/local/bin/npm-ignore-scripts /usr/local/bin/npm \
&& chmod +x /usr/local/bin/npm-real /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.fallback
# 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
# MCP tooling (same as workers; ops also browses).
RUN npm-real install -g --ignore-scripts cloakbrowser-mcp@1.4.0 \
&& mkdir -p /root/.config/mcp
COPY docker/mcp.json /root/.config/mcp/mcp.json
ENV PI_SESSION_DIR=/pi-sessions
WORKDIR /ops
ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "/bridge/index.mjs"]