FROM node:20-slim

# Install Claude CLI globally (unpinned — always latest)
RUN npm install -g @anthropic-ai/claude-code

# Create workspace mount point
RUN mkdir -p /workspace

WORKDIR /app

# Copy dependency manifest first for layer caching
COPY package.json ./
RUN npm install --omit=dev

# Copy daemon source
COPY src/ ./src/

# Copy entrypoint
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

# Default environment for standalone Docker usage
ENV CLAUDE_DAEMON_MODE=standalone \
    CLAUDE_WORKING_DIR=/workspace \
    CLAUDE_DAEMON_PORT=3001

EXPOSE 3001

# Health check using Node.js TCP probe (no curl in slim image)
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD node -e "const s=require('net').createConnection({port:process.env.CLAUDE_DAEMON_PORT||3001},()=>{s.end();process.exit(0)});s.on('error',()=>process.exit(1))"

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "src/index.js"]
