Files
stack/CLAUDE.md
Jarvis 7206b9411d
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
chore: remove legacy @mosaicstack/cli package
The @mosaicstack/cli package was consolidated into @mosaicstack/mosaic in
a prior refactor, and was already excluded from pnpm-workspace.yaml. This
commit deletes the now-dead packages/cli directory and updates the last
remaining docs references that still pointed at it.

- Delete packages/cli/ (48 files, ~6.6K lines of dead code)
- pnpm-workspace.yaml: drop the !packages/cli exclusion
- tools/install.sh: update install step label
- AGENTS.md, CLAUDE.md: update package map
- README.md, docs/guides/user-guide.md, packages/mosaic/framework/defaults/README.md: update install docs

Verified clean: typecheck, lint, format:check, test (38/38 tasks).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 23:34:28 -05:00

1.5 KiB

CLAUDE.md — Mosaic Stack

Project

Self-hosted, multi-user AI agent platform. TypeScript monorepo.

Stack

  • API: NestJS + Fastify adapter (apps/gateway)
  • Web: Next.js 16 + React 19 (apps/web)
  • ORM: Drizzle ORM + PostgreSQL 17 + pgvector (packages/db)
  • Auth: BetterAuth (packages/auth)
  • Agent: Pi SDK (packages/agent, packages/mosaic)
  • Queue: Valkey 8 (packages/queue)
  • Build: pnpm workspaces + Turborepo
  • CI: Woodpecker CI
  • Observability: OpenTelemetry → Jaeger

Commands

pnpm typecheck        # TypeScript check (all packages)
pnpm lint             # ESLint (all packages)
pnpm format:check     # Prettier check
pnpm test             # Vitest (all packages)
pnpm build            # Build all packages

# Database
pnpm --filter @mosaicstack/db db:push      # Push schema to PG (dev)
pnpm --filter @mosaicstack/db db:generate  # Generate migrations
pnpm --filter @mosaicstack/db db:migrate   # Run migrations

# Dev
docker compose up -d                  # Start PG, Valkey, OTEL, Jaeger
pnpm --filter @mosaicstack/gateway exec tsx src/main.ts  # Start gateway

Conventions

  • ESM everywhere ("type": "module", .js extensions in imports)
  • NodeNext module resolution
  • Explicit @Inject() decorators in NestJS (tsx/esbuild doesn't support emitDecoratorMetadata)
  • DTOs in *.dto.ts files at module boundaries
  • OTEL tracing imported before NestJS bootstrap (import './tracing.js')
  • All three gates must pass before push: typecheck, lint, format:check