FROM mcr.microsoft.com/dotnet/sdk:10.0-noble ARG DEBIAN_FRONTEND=noninteractive ENV TZ=Etc/UTC \ DOTNET_CLI_TELEMETRY_OPTOUT=1 \ DOTNET_NOLOGO=1 \ PIP_BREAK_SYSTEM_PACKAGES=1 \ PATH=/home/coder/.local/bin:/usr/local/bin:/usr/share/dotnet:$PATH \ PYTHONUNBUFFERED=1 \ PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright \ HOME=/home/coder # A real Linux development environment, with common compilers and media tools. RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl wget git git-lfs jq unzip zip xz-utils \ bash sudo supervisor nginx openssh-client \ build-essential gcc g++ make cmake ninja-build pkg-config gdb clang \ python3 python3-pip python3-dev python3-venv python-is-python3 \ ffmpeg imagemagick sox libsox-fmt-all \ fonts-noto-cjk fonts-noto-color-emoji fonts-dejavu-core fontconfig \ libnss3 libatk-bridge2.0-0 libgtk-3-0 libasound2t64 \ libx11-xcb1 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libxshmfence1 \ bubblewrap socat ripgrep sqlite3 file procps tini \ && rm -rf /var/lib/apt/lists/* # Node.js 22 LTS for Hyperframes and modern frontend work. RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y nodejs \ && node --version && npm --version \ && rm -rf /var/lib/apt/lists/* # The bridge targets .NET 8; SDK 10 is for creating new .NET projects. RUN curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh \ && bash /tmp/dotnet-install.sh --channel 8.0 --runtime aspnetcore --install-dir /usr/share/dotnet --no-path \ && rm /tmp/dotnet-install.sh \ && dotnet --list-runtimes # Browser-accessible VS Code-compatible IDE. RUN curl -fsSL https://code-server.dev/install.sh | sh \ && code-server --version # Microsoft's official VS Code CLI is required for a real 'code agent host'. RUN curl -fL --retry 4 https://update.code.visualstudio.com/latest/cli-linux-x64/stable \ -o /tmp/vscode-cli.tar.gz \ && tar -xzf /tmp/vscode-cli.tar.gz -C /usr/local/bin code \ && chmod 755 /usr/local/bin/code \ && rm /tmp/vscode-cli.tar.gz \ && code --version # Hyperframes v2 runtime dependencies; no fake TTS fallback. RUN python3 -m pip install --break-system-packages --no-cache-dir \ "edge-tts>=7.0.0" "numpy>=1.24" pillow requests playwright \ && npm install -g hyperframes@0.8.115 gsap@3.15.0 \ && python3 -m playwright install --with-deps chromium \ && chmod -R a+rX /opt/ms-playwright \ && rm -rf /var/lib/apt/lists/* /tmp/* # Use a non-root user. HF Docker Space must serve on 7860. RUN if getent passwd 1000 >/dev/null; then \ olduser="$(getent passwd 1000 | cut -d: -f1)"; \ usermod -l coder -d /home/coder "$olduser"; \ else \ useradd -m -u 1000 -s /bin/bash coder; \ fi \ && mkdir -p /opt/workstation/bridge /opt/workstation/scripts /opt/workstation/skill \ /home/coder/workspace /home/coder/data /home/coder/.local/share \ && chown -R coder /opt/workstation /home/coder COPY --chown=coder bridge/ /opt/workstation/bridge/ COPY --chown=coder skill/ /opt/workstation/skill/ COPY --chown=coder scripts/ /opt/workstation/scripts/ COPY --chown=coder nginx.conf supervisord.conf welcome.html /opt/workstation/ RUN chmod +x /opt/workstation/scripts/*.sh USER coder WORKDIR /home/coder/workspace EXPOSE 7860 ENTRYPOINT ["/usr/bin/tini","--","/opt/workstation/scripts/entrypoint.sh"]