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>
1.5 KiB
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",.jsextensions in imports) - NodeNext module resolution
- Explicit
@Inject()decorators in NestJS (tsx/esbuild doesn't support emitDecoratorMetadata) - DTOs in
*.dto.tsfiles at module boundaries - OTEL tracing imported before NestJS bootstrap (
import './tracing.js') - All three gates must pass before push: typecheck, lint, format:check