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>
46 lines
1.5 KiB
Markdown
46 lines
1.5 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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
|