Created the mosaic-stitcher module - the workflow orchestration layer that wraps OpenClaw. Responsibilities: - Receive webhooks from @mosaic bot - Apply Guard Rails (capability permissions) - Apply Quality Rails (mandatory gates) - Track all job steps and events - Dispatch work to OpenClaw with constraints Implementation: - StitcherModule: Module definition with PrismaModule and BullMqModule - StitcherService: Core orchestration logic - handleWebhook(): Process webhooks from @mosaic bot - dispatchJob(): Create RunnerJob and dispatch to BullMQ queue - applyGuardRails(): Check capability permissions for agent profiles - applyQualityRails(): Determine mandatory gates for job types - trackJobEvent(): Log events to database for audit trail - StitcherController: HTTP endpoints - POST /stitcher/webhook: Webhook receiver - POST /stitcher/dispatch: Manual job dispatch - DTOs and interfaces for type safety TDD Process: 1. RED: Created failing tests (12 tests) 2. GREEN: Implemented minimal code to pass tests 3. REFACTOR: Fixed TypeScript strict mode issues Quality Gates: ALL PASS - Typecheck: PASS - Lint: PASS - Build: PASS - Tests: PASS (12/12) Token estimate: ~56,000 tokens Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import { Module } from "@nestjs/common";
|
|
import { APP_INTERCEPTOR } from "@nestjs/core";
|
|
import { AppController } from "./app.controller";
|
|
import { AppService } from "./app.service";
|
|
import { PrismaModule } from "./prisma/prisma.module";
|
|
import { DatabaseModule } from "./database/database.module";
|
|
import { AuthModule } from "./auth/auth.module";
|
|
import { ActivityModule } from "./activity/activity.module";
|
|
import { TasksModule } from "./tasks/tasks.module";
|
|
import { EventsModule } from "./events/events.module";
|
|
import { ProjectsModule } from "./projects/projects.module";
|
|
import { DomainsModule } from "./domains/domains.module";
|
|
import { IdeasModule } from "./ideas/ideas.module";
|
|
import { WidgetsModule } from "./widgets/widgets.module";
|
|
import { LayoutsModule } from "./layouts/layouts.module";
|
|
import { KnowledgeModule } from "./knowledge/knowledge.module";
|
|
import { UsersModule } from "./users/users.module";
|
|
import { WebSocketModule } from "./websocket/websocket.module";
|
|
import { LlmModule } from "./llm/llm.module";
|
|
import { BrainModule } from "./brain/brain.module";
|
|
import { CronModule } from "./cron/cron.module";
|
|
import { AgentTasksModule } from "./agent-tasks/agent-tasks.module";
|
|
import { ValkeyModule } from "./valkey/valkey.module";
|
|
import { BullMqModule } from "./bullmq/bullmq.module";
|
|
import { StitcherModule } from "./stitcher/stitcher.module";
|
|
import { TelemetryModule, TelemetryInterceptor } from "./telemetry";
|
|
|
|
@Module({
|
|
imports: [
|
|
TelemetryModule,
|
|
PrismaModule,
|
|
DatabaseModule,
|
|
ValkeyModule,
|
|
BullMqModule,
|
|
StitcherModule,
|
|
AuthModule,
|
|
ActivityModule,
|
|
TasksModule,
|
|
EventsModule,
|
|
ProjectsModule,
|
|
DomainsModule,
|
|
IdeasModule,
|
|
WidgetsModule,
|
|
LayoutsModule,
|
|
KnowledgeModule,
|
|
UsersModule,
|
|
WebSocketModule,
|
|
LlmModule,
|
|
BrainModule,
|
|
CronModule,
|
|
AgentTasksModule,
|
|
],
|
|
controllers: [AppController],
|
|
providers: [
|
|
AppService,
|
|
{
|
|
provide: APP_INTERCEPTOR,
|
|
useClass: TelemetryInterceptor,
|
|
},
|
|
],
|
|
})
|
|
export class AppModule {}
|