17d56d0e01
Clean break, no compatibility alias. Renames the product name, the CLI binary (`ccam` -> `agenthub`), the env var prefix (`CCAM_` -> `AGENTHUB_`), the Prometheus metric namespace (`ccam_*` -> `agenthub_*`), the tmux session prefix (`ccam-lane-<id>` -> `agenthub-lane-<id>`), the per-repo runtime profile directory (`.ccam/profile` -> `.agenthub/profile`), the lanes state root (`~/.claude/ccam-lanes` -> `~/.claude/agenthub-lanes`), the bundled plugins (`plugins/ccam*` -> `plugins/agenthub*`) and their slash commands (`/ccam-doctor` -> `/agenthub-doctor`, `/ccam:*` -> `/agenthub:*`). Because there is no alias, an existing install has to be updated by hand: rename its `.ccam/profile` directory and any `CCAM_*` variables, and reinstall the plugin under its new name. Two other name families are deliberately left alone here, since they are not just strings: the `Claude-Code-Monitor` repository/marketplace name, and the `agent-dashboard` npm package plus its `~/.claude/agent-dashboard` runtime directory, which holds the live database and needs a migration rather than a rename. Verified: server 1406/1406, client 459/459, `grep -i ccam` clean across tracked files, `openapi.yaml` regenerated (95 paths, unchanged count).
157 lines
6.1 KiB
Makefile
157 lines
6.1 KiB
Makefile
# ─────────────────────────────────────────────────────────────────────────────
|
|
# AgentHub — Makefile
|
|
# A collection of convenient commands for development, testing, and deployment.
|
|
# Prerequisites: GNU Make, Node.js, npm
|
|
# Author: Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
|
|
# Quickstart:
|
|
# make setup # Install all dependencies
|
|
# make dev # Start server + client in watch mode
|
|
# make build # Build the React client for production
|
|
# make start # Start the production server
|
|
# make test # Run all tests
|
|
# make format # Format all files with Prettier
|
|
# make mcp-dev # Start MCP server in watch mode
|
|
# make seed # Load deterministic demo data
|
|
# For more commands, run `make help` to see descriptions, or see below.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
.DEFAULT_GOAL := help
|
|
SHELL := /bin/bash
|
|
|
|
# ─── Setup ──────────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: setup
|
|
setup: ## Install all dependencies (root + client + MCP)
|
|
npm install
|
|
cd client && npm install
|
|
npm --prefix mcp install
|
|
|
|
.PHONY: install-hooks
|
|
install-hooks: ## Register Claude Code hooks in ~/.claude/settings.json
|
|
node scripts/install-hooks.js
|
|
|
|
# ─── Development ────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: dev
|
|
dev: ## Start server + client in watch mode (concurrent)
|
|
npx concurrently -n server,client -c blue,green "npm run dev:server" "npm run dev:client"
|
|
|
|
.PHONY: dev-server
|
|
dev-server: ## Start only the Express server in watch mode
|
|
node --watch server/index.js
|
|
|
|
.PHONY: dev-client
|
|
dev-client: ## Start only the Vite dev server
|
|
cd client && npm run dev
|
|
|
|
# ─── Production ─────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: build
|
|
build: ## Build the React client for production
|
|
cd client && npm run build
|
|
|
|
.PHONY: start
|
|
start: ## Start the production server (build first)
|
|
node server/index.js
|
|
|
|
.PHONY: prod
|
|
prod: build start ## Build client then start production server
|
|
|
|
# ─── Testing ────────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: test
|
|
test: ## Run all tests (server + client)
|
|
node --test server/__tests__/*.test.js
|
|
cd client && npm test
|
|
|
|
.PHONY: test-server
|
|
test-server: ## Run server tests only
|
|
node --test server/__tests__/*.test.js
|
|
|
|
.PHONY: test-client
|
|
test-client: ## Run client tests only
|
|
cd client && npm test
|
|
|
|
# ─── Formatting ─────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: format
|
|
format: ## Format all files with Prettier
|
|
npx prettier --write .
|
|
|
|
.PHONY: format-check
|
|
format-check: ## Check formatting without writing
|
|
npx prettier --check .
|
|
|
|
# ─── MCP Server ─────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: mcp-install
|
|
mcp-install: ## Install MCP server dependencies
|
|
npm --prefix mcp install
|
|
|
|
.PHONY: mcp-build
|
|
mcp-build: ## Compile MCP TypeScript → JavaScript
|
|
npm --prefix mcp run build
|
|
|
|
.PHONY: mcp-typecheck
|
|
mcp-typecheck: ## Type-check MCP source without emitting
|
|
npm --prefix mcp run typecheck
|
|
|
|
.PHONY: mcp-start
|
|
mcp-start: ## Start the MCP stdio server
|
|
npm --prefix mcp run start
|
|
|
|
.PHONY: mcp-dev
|
|
mcp-dev: ## Start MCP server in watch mode
|
|
npm --prefix mcp run dev
|
|
|
|
# ─── Data Management ───────────────────────────────────────────────────────
|
|
|
|
.PHONY: seed
|
|
seed: ## Load deterministic demo data
|
|
node scripts/seed.js
|
|
|
|
.PHONY: import-history
|
|
import-history: ## Import sessions from ~/.claude/ history
|
|
node scripts/import-history.js
|
|
|
|
.PHONY: clear-data
|
|
clear-data: ## Delete all data rows (preserves schema)
|
|
node scripts/clear-data.js
|
|
|
|
# ─── Docker / Podman ───────────────────────────────────────────────────────
|
|
|
|
.PHONY: docker-build
|
|
docker-build: ## Build dashboard Docker image
|
|
docker build -t claude-agent-monitor:local .
|
|
|
|
.PHONY: docker-up
|
|
docker-up: ## Start via docker-compose
|
|
docker compose up -d
|
|
|
|
.PHONY: docker-down
|
|
docker-down: ## Stop docker-compose stack
|
|
docker compose down
|
|
|
|
.PHONY: docker-logs
|
|
docker-logs: ## Tail docker-compose logs
|
|
docker compose logs -f
|
|
|
|
.PHONY: mcp-docker-build
|
|
mcp-docker-build: ## Build MCP Docker image
|
|
docker build -f mcp/Dockerfile -t agent-dashboard-mcp:local .
|
|
|
|
.PHONY: podman-build
|
|
podman-build: ## Build dashboard Podman image
|
|
podman build -t localhost/claude-agent-monitor:local .
|
|
|
|
.PHONY: mcp-podman-build
|
|
mcp-podman-build: ## Build MCP Podman image
|
|
podman build -f mcp/Dockerfile -t localhost/agent-dashboard-mcp:local .
|
|
|
|
# ─── Help ───────────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: help
|
|
help: ## Show this help
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
|
|
awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
|