feat: initial CodeBoard monorepo scaffold

Turborepo monorepo with npm workspaces:
- apps/web: Next.js 14 frontend with Tailwind v4, SSE progress, doc viewer
- apps/worker: BullMQ job processor (clone → parse → LLM generate)
- packages/shared: TypeScript types
- packages/parser: Babel-based AST parser (JS/TS) + regex (Python)
- packages/llm: OpenAI/Anthropic provider abstraction + prompt pipeline
- packages/diagrams: Mermaid architecture & dependency graph generators
- packages/database: Prisma schema (PostgreSQL)
- Docker multi-stage build (web + worker targets)

All packages compile successfully with tsc and next build.
This commit is contained in:
Vectry
2026-02-09 15:22:50 +00:00
parent efdc282da5
commit 79dad6124f
72 changed files with 10132 additions and 136 deletions

42
apps/worker/src/index.ts Normal file
View File

@@ -0,0 +1,42 @@
import { Worker } from "bullmq";
import IORedis from "ioredis";
import { processGenerationJob } from "./processor.js";
const redisUrl = process.env.REDIS_URL ?? "redis://localhost:6379";
const connection = new IORedis(redisUrl, { maxRetriesPerRequest: null });
const worker = new Worker(
"codeboard:generate",
async (job) => {
console.log(`[worker] Processing job ${job.id}: ${job.data.repoUrl}`);
return processGenerationJob(job);
},
{
connection,
concurrency: 2,
removeOnComplete: { count: 100 },
removeOnFail: { count: 50 },
}
);
worker.on("completed", (job) => {
console.log(`[worker] Job ${job.id} completed`);
});
worker.on("failed", (job, err) => {
console.error(`[worker] Job ${job?.id} failed:`, err.message);
});
worker.on("ready", () => {
console.log("[worker] Ready and waiting for jobs on codeboard:generate");
});
async function shutdown() {
console.log("[worker] Shutting down...");
await worker.close();
await connection.quit();
process.exit(0);
}
process.on("SIGTERM", shutdown);
process.on("SIGINT", shutdown);