# pigo 协作镜像（单 agent 版）
#
# 构建（在仓库根目录执行，先本地交叉编译 pigo，再 docker build）：
#   $env:GOOS="linux"; $env:CGO_ENABLED="0"
#   go build -trimpath -ldflags="-s -w" -o coop/tmp/pigo-linux-amd64 ./cmd/pigo
#   docker build -f coop/Dockerfile -t pigo-coop .
# 或直接用 Linux 的 Go 工具链时跳过交叉编译步骤。
#
# 运行示例（模型后端由外部调用方通过环境变量传入）：
#   docker run --rm \
#     -e MODEL=deepseek-chat \
#     -e BASE_URL=https://api.deepseek.com \
#     -e API_KEY=<your-key> \
#     -e TASK="请为 XX 编写设计文档并实现原型" \
#     -e ROUND_MAX=6 \
#     pigo-coop
#
# 协作方式：单个 pigo 进程在工作区 /blackboard/workspace 内完成 task.md 的任务，
# 用 --resume 保持跨轮连续上下文；完成时通过 blackboard 工具创建 DONE，
# supervisor 把结果以结构化 JSON（/blackboard/result.json）落盘。
#
# 基础镜像复用本机已有的 pigo-worker:latest（Alpine，已含 bash/git/wget/flock/
# timeout/CA 证书与静态 pigo 二进制），这里仅覆盖 pigo 二进制为新代码（含
# blackboard 工具）并加入 supervisor 与协作 prompt，避免重新拉取 golang/alpine。

FROM pigo-worker:latest

# solve/pentest tools: base image only ships busybox (no curl/python3), add them here.
# pigo-worker 镜像 USER=agent，RUN 层以非 root 执行，apk 无法锁库，先切 root 再恢复。
USER root
RUN apk add --no-cache curl wget python3 py3-pip jq openssl

# Python 常用库：网络/加密/数据/解析等，覆盖多数协作与 CTF 场景。
# 使用清华 PyPI 镜像加速国内构建；--no-cache-dir 避免膨胀镜像。
# --break-system-packages：Alpine 3.20+ 标记 externally-managed，pip 全局安装需显式放行。
RUN pip3 install --no-cache-dir --break-system-packages \
      -i https://pypi.tuna.tsinghua.edu.cn/simple \
      requests urllib3 certifi idna charset-normalizer \
      cryptography pyOpenSSL paramiko pyjwt \
      PyYAML beautifulsoup4 lxml \
      python-dotenv click tqdm \
      numpy pandas \
      httpx aiohttp websockets dnspython \
      psutil pillow

USER agent

# 覆盖 pigo 二进制：coop/tmp/pigo-linux-amd64 由本地 Go 交叉编译（GOOS=linux CGO_ENABLED=0）。
# legacy builder 不支持 COPY --chmod（需 BuildKit）。权限位由主机侧 chmod 提供（构建前先 chmod 755）。
COPY coop/tmp/pigo-linux-amd64 /usr/local/bin/pigo
COPY coop/supervisor.sh /usr/local/bin/supervisor.sh
COPY coop/prompts /prompts
COPY coop/AGENTS.md /prompts/AGENTS.md

WORKDIR /blackboard
ENTRYPOINT ["/usr/local/bin/supervisor.sh"]
