Files
AgentHub/Makefile
T
nntrivi2001 c7dbaf2d9f refactor: finish the AgentHub rename and drop the MCP server
Two leftovers from the rebrand, done together because they touch the same
docs and manifests.

**Data directory.** `agent-dashboard` could not simply be renamed in the
source: it names a real directory holding the live SQLite database. Startup
now moves it once, via `migrateLegacyDataDir()` in `server/lib/claude-home.js`
— a same-filesystem rename, so it is instant even at multiple gigabytes and
cannot leave two divergent copies. `getDataDir()` stays PURE and resolves to
the legacy path until the move happens; the first version of this put the
rename inside the getter, which meant `npm run test:server` relocated the
developer's real database as a side effect. The call sits behind
`require.main === module` and ahead of the router requires, because those pull
in db.js, which opens SQLite at module load. A failed rename is silent and the
old directory keeps being used: an unfashionable directory name beats a blank
database beside an unreachable one. Same treatment for the port-discovery file
(`.agent-dashboard.json` → `.agenthub.json`, old one dropped on write).

Not renamed on purpose: the Sagi localStorage keys (renaming silently resets
everyone's prefs) and the PWA manifest `id` (changing it orphans an installed
app).

**MCP server.** 4 tool calls in 46 days across 577,132 events, against 4,556
lines of TypeScript, a 2 MB committed build artifact, and a pre-commit guard
that had already blocked commits twice. Deleted: `mcp/`, the maintainer skills
and `mcp-reviewer` agent, the build check, `plugins/agenthub/.mcp.json`,
`docs/MCP.md`, 12 npm scripts, 5 Makefile targets, and every doc section
describing it.

Kept, because they are unrelated things sharing the name: the Config
Explorer's MCP tab and its API, per-lane Playwright MCP, the agenthub-config
plugin's MCP audit, and the historical `mcp__plugin_agenthub_*` events that
analytics must keep attributing.

Verified: server 1432/1432, client 459/459, tsc clean, prettier clean. Both
directions of the migration proven — a sandbox-HOME test run leaves the legacy
directory untouched, and a real boot moves it with its contents intact.
2026-09-08 09:48:40 +07:00

127 lines
5.0 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 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)
npm install
cd client && npm 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 .
# ─── 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: podman-build
podman-build: ## Build dashboard Podman image
podman build -t localhost/claude-agent-monitor: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}'