# Imagen de tmux-host: sesion tmux persistente para Claude Code sobre el # lab GitOps de cruzcloud. Reemplaza el `docker run ... alpine sh -c "apk # add ... && npm install ..."` inline documentado antes en # docs/arquitectura/sesion-tmux-persistente.md — mismo contenido, pero # construido una vez como imagen en vez de reinstalar todo en cada arranque # del contenedor. FROM alpine:3.24 # uv (paquete directo de Alpine, no via pip): corre servidores MCP en # Python bajo demanda (ej. `uvx workspace-mcp`, ver ADR 0012 practica # multi-cloud) sin instalar Python a mano -- uv baja el interprete que # necesite por su cuenta la primera vez que se usa. # @google/clasp (oficial, 2026-09-28): CLI + modo MCP (`clasp mcp`) para # el Portal SCM en Apps Script (sesion scm-portal, ADR 0013). Su credencial # NO vive en la imagen: va en /DATA/AppData/k3d-lab-v3/clasp-auth/.clasprc.json # (persistente) via la variable clasp_config_auth. RUN apk add --no-cache tmux docker-cli bash curl git kubectl nodejs npm uv \ && npm install -g @anthropic-ai/claude-code @google/clasp \ && git config --global --add safe.directory '*' # Repo raiz del lab (CLAUDE.md, apps-registry/, platform-infra/, scripts/). # docker exec hereda este WORKDIR como cwd por defecto, y ademas # lab-session.sh y healthcheck.sh lo pasan explicito via `tmux ... -c` # para no depender de ese comportamiento implicito. WORKDIR /DATA/AppData/k3d-lab-v3/lab-cruzcloud COPY healthcheck.sh /usr/local/bin/healthcheck.sh COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/healthcheck.sh /usr/local/bin/entrypoint.sh ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]