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:
42
apps/worker/src/index.ts
Normal file
42
apps/worker/src/index.ts
Normal 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);
|
||||
Reference in New Issue
Block a user