# Custom Trigger.dev Worker with CFN Agent Infrastructure
# Base: Official trigger.dev image with CFN agent execution capabilities

FROM ghcr.io/triggerdotdev/trigger.dev:latest

# Set working directory
WORKDIR /triggerdotdev

# Switch to root for global npm installs and build dependencies
USER root

# Install build dependencies for native modules (better-sqlite3)
# Install Docker CLI for per-agent container spawning
RUN apt-get update && apt-get install -y \
    python3 \
    make \
    g++ \
    docker.io \
    && rm -rf /var/lib/apt/lists/*

# Install CFN dependencies
# - claude-flow-novice CLI for agent spawning (requires native build)
# - TypeScript compiler for test execution
# - Additional build tools
RUN npm install -g \
    claude-flow-novice \
    typescript \
    ts-node

# Copy trigger.dev workflow and job definitions (as root)
COPY trigger-dev/src /triggerdotdev/trigger-dev/src
COPY trigger-dev/package.json /triggerdotdev/trigger-dev/
COPY trigger-dev/tsconfig.json /triggerdotdev/trigger-dev/

# Install trigger.dev workflow dependencies (as root)
WORKDIR /triggerdotdev/trigger-dev
RUN npm install

# Build TypeScript to JavaScript (required for worker to load workflows)
RUN npm run build

# Copy .claude agent templates (needed for agent spawning)
COPY .claude /triggerdotdev/.claude

# Create deliverables directory and set permissions
# Add node user to docker group for socket access
RUN mkdir -p /tmp/trigger-dev-deliverables && \
    chown -R node:node /triggerdotdev /tmp/trigger-dev-deliverables && \
    usermod -aG docker node || true

# Switch to node user for runtime security
USER node

# Set environment variables
ENV NODE_ENV=production
ENV CFN_WORKSPACE=/workspace
ENV CFN_DELIVERABLES_PATH=/tmp/trigger-dev-deliverables

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD node -e "require('http').get('http://localhost:3000/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1); })"

# Set working directory back to root for entrypoint script
WORKDIR /triggerdotdev

# Use trigger.dev's default entrypoint and command
# The base image handles worker mode via WORKER_MODE=true environment variable
CMD ["/triggerdotdev/scripts/entrypoint.sh"]
