feat: add agent work orders microservice with hybrid deployment

This commit is contained in:
Rasmus Widing
2025-10-23 12:46:57 +03:00
parent 8f3e8bc220
commit f07cefd1a1
23 changed files with 1741 additions and 93 deletions

View File

@@ -0,0 +1,77 @@
# Agent Work Orders Service - Independent microservice for agent execution
FROM python:3.12 AS builder
WORKDIR /build
# Install build dependencies and uv
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/* \
&& pip install --no-cache-dir uv
# Copy pyproject.toml for dependency installation
COPY pyproject.toml .
# Install agent work orders dependencies to a virtual environment using uv
RUN uv venv /venv && \
. /venv/bin/activate && \
uv pip install . --group agent-work-orders
# Runtime stage
FROM python:3.12-slim
WORKDIR /app
# Install runtime dependencies: git, gh CLI, curl
RUN apt-get update && apt-get install -y \
git \
curl \
ca-certificates \
wget \
gnupg \
&& curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt-get update \
&& apt-get install -y gh \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Copy the virtual environment from builder
COPY --from=builder /venv /venv
# Copy agent work orders source code only (not entire server)
COPY src/agent_work_orders/ src/agent_work_orders/
COPY src/__init__.py src/
# Copy Claude command files for agent work orders
COPY .claude/ .claude/
# Create non-root user for security (Claude CLI blocks --dangerously-skip-permissions with root)
RUN useradd -m -u 1000 -s /bin/bash agentuser && \
chown -R agentuser:agentuser /app /venv
# Create volume mount points for git operations and temp files
RUN mkdir -p /repos /tmp/agent-work-orders && \
chown -R agentuser:agentuser /repos /tmp/agent-work-orders && \
chmod -R 755 /repos /tmp/agent-work-orders
# Install Claude CLI for non-root user
USER agentuser
RUN curl -fsSL https://claude.ai/install.sh | bash
# Set environment variables
ENV PYTHONPATH="/app:$PYTHONPATH"
ENV PYTHONUNBUFFERED=1
ENV PATH="/venv/bin:/home/agentuser/.local/bin:$PATH"
# Expose agent work orders service port
ARG AGENT_WORK_ORDERS_PORT=8053
ENV AGENT_WORK_ORDERS_PORT=${AGENT_WORK_ORDERS_PORT}
EXPOSE ${AGENT_WORK_ORDERS_PORT}
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:${AGENT_WORK_ORDERS_PORT}/health')"
# Run the Agent Work Orders service
CMD python -m uvicorn src.agent_work_orders.server:app --host 0.0.0.0 --port ${AGENT_WORK_ORDERS_PORT}