# Architect Indexer Dockerfile # Scans target project codebase and generates .architect/ directory # # Usage: # docker compose -f docker/docker-compose.architect.yml build # docker compose -f docker/docker-compose.architect.yml run --rm architect-indexer # docker compose -f docker/docker-compose.architect.yml run --rm architect-indexer --mode incremental # ── Build stage ──────────────────────────────────────────────────── FROM oven/bun:1-alpine AS builder WORKDIR /build # Copy dependency files first (cache layer) COPY package.json ./ # bun.lock might not exist; handle gracefully COPY bun.lock* ./ # Install dependencies RUN bun install 2>/dev/null || npm install 2>/dev/null || true # Copy source for build COPY tsconfig.json ./ COPY src/ ./src/ # Build TypeScript RUN bun run build 2>/dev/null || npx tsc 2>/dev/null || true # ── Production stage ──────────────────────────────────────────────── FROM node:20-alpine AS production WORKDIR /app # Security: non-root user RUN addgroup -S apaw && adduser -S apaw -G apaw # Copy built artifacts COPY --from=builder /build/dist/ ./dist/ COPY --from=builder /build/node_modules/ ./node_modules/ COPY --from=builder /build/package.json ./ # Copy .kilo configs for agent context COPY .kilo/agents/architect-indexer.md ./agents/architect-indexer.md COPY .kilo/skills/project-mapping/ ./skills/project-mapping/ COPY .kilo/rules/ ./rules/ # Ensure .architect template directory exists COPY .architect/ /template/.architect/ # Default project mount point ENV PROJECT_ROOT=/project ENV NODE_ENV=production ENV TZ=UTC # Healthcheck: verify .architect/ was generated HEALTHCHECK --interval=60s --timeout=15s --start-period=10s --retries=2 \ CMD test -d /project/.architect || exit 1 USER apaw # Run the indexer script (compiled from TypeScript) ENTRYPOINT ["node", "dist/kilocode/scripts/run-architect-indexer.js"] CMD ["--target", "/project"]