Files
Hanzo Dev e9b4c41d2d fork: complete @hanzochat rename — agents runtime + lockfile canonicalization
- @librechat/agents -> @hanzochat/agents@^3.2.63 (published fork of
  danny-avila/agents at github.com/hanzochat/agents; upstream remote kept
  so agent-runtime fixes stay pullable)
- final sweep: zero @librechat/* package refs (chat internals + runtime)
- remove dead packages/agents residue (stale dist, no package.json)
- drop stale npm/bun lockfiles; pnpm-lock.yaml is the canonical lockfile
2026-07-14 09:31:40 -07:00

286 lines
10 KiB
Makefile

# Hanzo AI Chat - Unified Makefile
# Simple, clean commands for development and production
.PHONY: help
# Colors for output
GREEN := \033[0;32m
YELLOW := \033[0;33m
RED := \033[0;31m
BLUE := \033[0;34m
NC := \033[0m # No Color
# Default compose file
COMPOSE_FILE ?= compose.yml
# Default target
help:
@echo "$(GREEN)╔══════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(GREEN)║ Hanzo AI Chat Platform ║$(NC)"
@echo "$(GREEN)╚══════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(BLUE)Quick Start:$(NC)"
@echo " $(GREEN)make up$(NC) - Start chat with cloud API"
@echo " $(GREEN)make dev$(NC) - Start in dev mode (hot reload)"
@echo " $(GREEN)make dev-full$(NC) - Dev mode with local router"
@echo ""
@echo "$(BLUE)Core Commands:$(NC)"
@echo " $(GREEN)make down$(NC) - Stop all services"
@echo " $(GREEN)make restart$(NC) - Restart services"
@echo " $(GREEN)make logs$(NC) - View logs"
@echo " $(GREEN)make status$(NC) - Check service status"
@echo " $(GREEN)make clean$(NC) - Stop and remove data"
@echo ""
@echo "$(BLUE)Development:$(NC)"
@echo " $(GREEN)make build$(NC) - Build containers"
@echo " $(GREEN)make test$(NC) - Run tests"
@echo " $(GREEN)make lint$(NC) - Run linting"
@echo " $(GREEN)make format$(NC) - Format code"
@echo ""
@echo "$(BLUE)Production:$(NC)"
@echo " $(GREEN)make prod$(NC) - Deploy production"
@echo " $(GREEN)make backup$(NC) - Backup data"
@echo ""
@echo "Run 'make help-all' for advanced usage"
help-all:
@echo "$(GREEN)══════════════════════════════════════════════════════════════$(NC)"
@echo "$(GREEN) Advanced Usage $(NC)"
@echo "$(GREEN)══════════════════════════════════════════════════════════════$(NC)"
@echo ""
@echo "$(BLUE)Deployment Modes:$(NC)"
@echo " make up - Basic: Chat + Cloud API"
@echo " make dev - Development: Hot reload"
@echo " make dev-full - Dev + Local router"
@echo " make prod - Production with Traefik"
@echo ""
@echo "$(BLUE)Service Control:$(NC)"
@echo " make logs-chat - View chat logs"
@echo " make logs-mongo - View MongoDB logs"
@echo " make logs-router - View router logs (dev-full)"
@echo " make shell-chat - Shell into chat container"
@echo " make shell-mongo - MongoDB shell"
@echo ""
@echo "$(BLUE)Development Tools:$(NC)"
@echo " make install - Install dependencies"
@echo " make dev-frontend - Run frontend only"
@echo " make dev-backend - Run backend only"
@echo " make test-unit - Unit tests"
@echo " make test-e2e - E2E tests"
@echo " make lint-fix - Auto-fix linting"
@echo ""
@echo "$(BLUE)Database:$(NC)"
@echo " make db-seed - Seed demo data"
@echo " make db-reset - Reset database"
@echo " make db-export - Export data"
@echo " make db-import FILE= - Import data"
@echo ""
@echo "$(BLUE)Docker Compose Files:$(NC)"
@echo " compose.yml - Base configuration"
@echo " compose.dev.yml - Development overrides"
@echo " compose.prod.yml - Production overrides"
# ============================================================================
# CORE COMMANDS
# ============================================================================
up:
@echo "$(GREEN)Starting Hanzo Chat...$(NC)"
@docker compose up -d
@echo "$(GREEN)Chat available at http://localhost:3081$(NC)"
down:
@echo "$(YELLOW)Stopping services...$(NC)"
@docker compose down
restart: down up
logs:
@docker compose logs -f
status:
@echo "$(GREEN)Service Status:$(NC)"
@docker compose ps
@echo ""
@echo "$(GREEN)Health Checks:$(NC)"
@curl -s http://localhost:3081/api/health > /dev/null 2>&1 && echo " ✓ Chat API" || echo " ✗ Chat API"
@curl -s http://localhost:3081 > /dev/null 2>&1 && echo " ✓ Chat UI" || echo " ✗ Chat UI"
clean:
@echo "$(RED)Removing all data...$(NC)"
@docker compose down -v
# ============================================================================
# DEVELOPMENT
# ============================================================================
dev:
@echo "$(GREEN)Starting in development mode...$(NC)"
@docker compose -f compose.yml -f compose.dev.yml up
dev-full:
@echo "$(GREEN)Starting full dev stack with local router...$(NC)"
@docker compose -f compose.yml -f compose.dev.yml --profile with-router up
build:
@echo "$(GREEN)Building containers...$(NC)"
@docker compose build
build-prod:
@echo "$(GREEN)Building production image...$(NC)"
@docker build -f docker/Dockerfile -t hanzoai/chat:latest .
build-static-local:
@echo "$(GREEN)Building static SPA locally...$(NC)"
@cp .env.static .env
@pnpm run build:data-provider
@pnpm run --filter @hanzochat/client build
@cd client && pnpm run build
@cp .env.backup .env 2>/dev/null || true
@echo "$(GREEN)Local build complete: client/dist/$(NC)"
build-static: build-static-local
@echo "$(GREEN)Building Docker image...$(NC)"
@docker build -f Dockerfile.static -t ghcr.io/hanzoai/chat:latest .
@echo "$(GREEN)Image built: ghcr.io/hanzoai/chat:latest$(NC)"
deploy-static:
@echo "$(GREEN)Pushing and deploying static SPA...$(NC)"
@docker push ghcr.io/hanzoai/chat:latest
@kubectl apply -f k8s/deployment-static.yaml
@kubectl rollout restart deployment/chat -n hanzo
@echo "$(GREEN)Deployed. Watching rollout...$(NC)"
@kubectl rollout status deployment/chat -n hanzo --timeout=120s
# ============================================================================
# PRODUCTION
# ============================================================================
prod:
@echo "$(GREEN)Deploying production...$(NC)"
@test -n "$${JWT_SECRET}" || (echo "$(RED)JWT_SECRET required$(NC)" && exit 1)
@test -n "$${OPENAI_API_KEY}" || (echo "$(RED)OPENAI_API_KEY required$(NC)" && exit 1)
@docker compose -f compose.yml -f compose.prod.yml up -d
backup:
@echo "$(GREEN)Creating backup...$(NC)"
@mkdir -p backups
@docker compose exec -T mongodb mongodump --out /backup
@docker cp $$(docker compose ps -q mongodb):/backup backups/mongodb-$$(date +%Y%m%d-%H%M%S)
@echo "$(GREEN)Backup complete$(NC)"
# ============================================================================
# LOGS
# ============================================================================
logs-chat:
@docker compose logs -f chat
logs-mongo:
@docker compose logs -f mongodb
logs-meili:
@docker compose logs -f meilisearch
logs-router:
@docker compose -f compose.yml -f compose.dev.yml logs -f router
# ============================================================================
# SHELL ACCESS
# ============================================================================
shell-chat:
@docker compose exec chat sh
shell-mongo:
@docker compose exec mongodb mongosh -u hanzo -p hanzo123 HanzoChat
# ============================================================================
# TESTING
# ============================================================================
test:
@echo "$(GREEN)Running tests...$(NC)"
@npm test
test-unit:
@echo "$(GREEN)Running unit tests...$(NC)"
@npm run test:unit
test-e2e:
@echo "$(GREEN)Running E2E tests...$(NC)"
@npm run test:e2e
# ============================================================================
# CODE QUALITY
# ============================================================================
lint:
@echo "$(GREEN)Running linters...$(NC)"
@npm run lint
lint-fix:
@echo "$(GREEN)Auto-fixing lint issues...$(NC)"
@npm run lint:fix
format:
@echo "$(GREEN)Formatting code...$(NC)"
@npm run format
# ============================================================================
# INSTALLATION
# ============================================================================
install:
@echo "$(GREEN)Installing dependencies...$(NC)"
@npm install
@cd api && npm install
@cd client && npm install
# ============================================================================
# DATABASE
# ============================================================================
db-seed:
@echo "$(GREEN)Seeding database...$(NC)"
@docker compose exec chat npm run seed
db-seed-agents:
@echo "$(GREEN)Seeding team agents...$(NC)"
@docker compose exec chat npm run seed:agents
db-reset:
@echo "$(RED)Resetting database...$(NC)"
@docker compose exec mongodb mongosh -u hanzo -p hanzo123 HanzoChat --eval "db.dropDatabase()"
@make db-seed
db-export:
@echo "$(GREEN)Exporting database...$(NC)"
@mkdir -p exports
@docker compose exec -T mongodb mongoexport -u hanzo -p hanzo123 -d HanzoChat -c conversations > exports/conversations-$$(date +%Y%m%d).json
db-import:
@test -n "$(FILE)" || (echo "$(RED)Please specify FILE=path/to/export.json$(NC)" && exit 1)
@echo "$(GREEN)Importing $(FILE)...$(NC)"
@docker compose exec -T mongodb mongoimport -u hanzo -p hanzo123 -d HanzoChat -c conversations < $(FILE)
# ============================================================================
# UTILITIES
# ============================================================================
env-example:
@echo "$(GREEN)Creating example .env file...$(NC)"
@cp .env.example .env
@echo "$(YELLOW)Edit .env and add your API keys$(NC)"
check-env:
@echo "$(GREEN)Environment Check:$(NC)"
@test -f .env && echo "✓ .env file exists" || echo "✗ .env file missing"
@which docker > /dev/null && echo "✓ Docker installed" || echo "✗ Docker not found"
@docker compose version > /dev/null 2>&1 && echo "✓ Docker Compose v2" || echo "✗ Docker Compose v2 not found"
version:
@echo "$(GREEN)Hanzo AI Chat$(NC)"
@echo "Version: $$(cat package.json | grep version | head -1 | awk -F: '{ print $$2 }' | sed 's/[",]//g')"
.DEFAULT_GOAL := help