const fs = require('fs'); const dockerfile = `FROM node:lts-trixie-slim AS base RUN apt-get update \\ && apt-get install -y --no-install-recommends ca-certificates curl git \\ && rm -rf /var/lib/apt/lists/* RUN corepack enable FROM base AS deps WORKDIR /app COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./ COPY cli/package.json cli/ COPY server/package.json server/ COPY ui/package.json ui/ COPY packages/shared/package.json packages/shared/ COPY packages/db/package.json packages/db/ COPY packages/adapter-utils/package.json packages/adapter-utils/ COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/ COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/ COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/ COPY packages/adapters/gemini-local/package.json packages/adapters/gemini-local/ COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/ COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/ COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/ COPY packages/plugins/sdk/package.json packages/plugins/sdk/ COPY packages/plugins/create-paperclip-plugin/package.json packages/plugins/create-paperclip-plugin/ COPY packages/plugins/examples packages/plugins/examples/ RUN pnpm install --frozen-lockfile FROM base AS build WORKDIR /app COPY --from=deps /app /app COPY . . RUN pnpm --filter @paperclipai/plugin-sdk build RUN pnpm --filter @paperclipai/shared build RUN pnpm --filter @paperclipai/db build RUN pnpm --filter @paperclipai/adapter-utils build RUN pnpm --filter @paperclipai/ui build RUN pnpm --filter @paperclipai/server build FROM base AS production WORKDIR /app COPY --chown=node:node --from=build /app /app RUN npm install --global --omit=dev @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \\ && mkdir -p /paperclip \\ && chown node:node /paperclip ENV NODE_ENV=production \\ HOME=/paperclip \\ HOST=0.0.0.0 \\ PORT=7860 \\ SERVE_UI=true \\ PAPERCLIP_HOME=/paperclip \\ PAPERCLIP_INSTANCE_ID=default \\ PAPERCLIP_CONFIG=/paperclip/instances/default/config.json \\ PAPERCLIP_DEPLOYMENT_MODE=authenticated \\ PAPERCLIP_DEPLOYMENT_EXPOSURE=private VOLUME ["/paperclip"] EXPOSE 7860 USER node CMD ["node", "--import", "./server/node_modules/tsx/dist/loader.mjs", "server/dist/index.js"] `; fs.writeFileSync('Dockerfile', dockerfile);