# cursor-agent-api-proxy — OpenAI-compatible API in front of cursor-agent CLI (ACP).
#
# Every request uses cursor-agent ACP (`agent acp`):
#   - session/new with in-process MCP server for client tools[]
#   - session/prompt with text + image ContentBlocks
#   - session/request_permission denies built-in tools, allows MCP client tools
#   - Tool invocations park until HTTP client returns role:"tool"
#
# Requires CURSOR_API_KEY (Cursor subscription) at runtime.

FROM ubuntu:noble

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        bash \
        ca-certificates \
        curl \
        tzdata \
    && rm -rf /var/lib/apt/lists/*

# Node 20 (LTS) — proxy and stdio MCP bridge both run on Node.
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
    apt-get install -y --no-install-recommends nodejs && \
    rm -rf /var/lib/apt/lists/*

# cursor-agent CLI (subscription-backed).
RUN curl -fsS https://cursor.com/install | bash && \
    CURSOR_VERSION_DIR="$(echo /root/.local/share/cursor-agent/versions/*)" && \
    cp -r "${CURSOR_VERSION_DIR}" /opt/cursor-agent && \
    ln -sf /opt/cursor-agent/cursor-agent /usr/local/bin/cursor-agent && \
    ln -sf /opt/cursor-agent/cursor-agent /usr/local/bin/agent.real

# Application code.
COPY src/   /app/src/
COPY scripts/ /app/scripts/
COPY cursor-bootstrap/ /opt/cursor-bootstrap/
COPY entrypoint.sh /app/entrypoint.sh

RUN mkdir -p /workspace /home/nobody/.cursor && \
    chmod +x /app/scripts/*.sh /app/entrypoint.sh && \
    chown -R nobody:nogroup /opt/cursor-agent /opt/cursor-bootstrap /app /workspace /home/nobody

WORKDIR /workspace
ENV PORT=4646
ENV HOME=/home/nobody
ENV NODE_ENV=production
USER nobody

EXPOSE 4646
ENTRYPOINT ["/app/entrypoint.sh"]
