FROM node:24-bookworm-slim AS build WORKDIR /app RUN npm install --global pnpm@11.19.0 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY apps/server/package.json apps/server/package.json COPY apps/web/package.json apps/web/package.json COPY packages/harness/package.json packages/harness/package.json COPY packages/shared/package.json packages/shared/package.json RUN pnpm install --frozen-lockfile COPY apps ./apps COPY packages ./packages COPY scripts ./scripts COPY fixtures/ads-account.json ./fixtures/ads-account.json COPY sandbox ./sandbox COPY .agents/skills/demo-report ./.agents/skills/demo-report COPY .agents/skills/ads-analysis ./.agents/skills/ads-analysis COPY .agents/skills/artifact-template-sw-ads-tiktok ./.agents/skills/artifact-template-sw-ads-tiktok COPY tsconfig.base.json eslint.config.mjs ./ RUN pnpm build && mkdir -p /app/workspace /app/.agents/skills /app/.pi/skills && chown node:node /app/workspace FROM node:24-bookworm-slim AS agent WORKDIR /app COPY --from=build /app /app RUN chown node:node /app/workspace USER 1000:1000 ENV NODE_ENV=production PORT=3001 HOST=127.0.0.1 EXPOSE 5173 CMD ["node", "sandbox/entry.mjs"] FROM node:24-bookworm-slim AS egress WORKDIR /proxy COPY sandbox/egress.mjs ./egress.mjs USER 1000:1000 CMD ["node", "egress.mjs"]