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.
This commit is contained in:
@@ -77,7 +77,7 @@ podman build -t agent-monitor .
|
||||
podman run -d --name agent-monitor \
|
||||
-p 127.0.0.1:4820:4820 \
|
||||
-v "$HOME/.claude:/root/.claude:ro" \
|
||||
-v "$HOME/.claude/agent-dashboard:/app/data" \
|
||||
-v "$HOME/.claude/agenthub:/app/data" \
|
||||
agent-monitor
|
||||
```
|
||||
|
||||
@@ -87,7 +87,7 @@ Container-specific behavior:
|
||||
- The image sets `DASHBOARD_HOST=0.0.0.0` (bind inside the container — its loopback is a separate namespace the published port cannot reach) and `DASHBOARD_DATA_DIR=/app/data` internally; both are baked into the `Dockerfile`
|
||||
- The examples publish on `127.0.0.1` only, so the dashboard is local-only. To expose it on a LAN, publish on `0.0.0.0` (`-p 4820:4820`) **and** set `DASHBOARD_TOKEN`
|
||||
- `~/.claude:/root/.claude:ro` is used for history import only
|
||||
- `~/.claude/agent-dashboard:/app/data` is the **canonical** SQLite database (shared with native installs)
|
||||
- `~/.claude/agenthub:/app/data` is the **canonical** SQLite database (shared with native installs)
|
||||
- Claude Code hooks still execute on the host, so install them from the host with `npm run install-hooks`
|
||||
|
||||
### Environment variables
|
||||
@@ -102,12 +102,6 @@ Container-specific behavior:
|
||||
| `AGENTHUB_IMPORT_MAX_BYTES` | `1073741824` (1 GB) | Maximum size per uploaded file on `/api/import/upload` |
|
||||
| `AGENTHUB_IMPORT_MAX_FILES` | `2000` | Maximum number of files per upload request |
|
||||
| `AGENTHUB_IMPORT_MAX_EXTRACT_BYTES` | `4294967296` (4 GB) | Maximum uncompressed bytes any single archive is allowed to expand to (zip-bomb defense) |
|
||||
| `MCP_DASHBOARD_BASE_URL` | `http://127.0.0.1:4820` | Base URL used by the local MCP server to call dashboard APIs |
|
||||
| `MCP_DASHBOARD_ALLOW_MUTATIONS` | `false` | Enables mutating MCP tools |
|
||||
| `MCP_DASHBOARD_ALLOW_DESTRUCTIVE` | `false` | Enables destructive MCP tools (in addition to mutations) |
|
||||
| `MCP_TRANSPORT` | `stdio` | MCP transport mode: `stdio`, `http`, `repl` |
|
||||
| `MCP_HTTP_PORT` | `8819` | Port for the MCP HTTP+SSE server (only when `MCP_TRANSPORT=http`) |
|
||||
| `MCP_HTTP_HOST` | `127.0.0.1` | Bind address for the MCP HTTP server |
|
||||
|
||||
Example with a custom port:
|
||||
|
||||
@@ -116,7 +110,7 @@ DASHBOARD_PORT=9000 npm run dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> You usually do **not** need to set `DASHBOARD_PORT` manually. `npm run dev` is wrapped by `scripts/dev.js`, which probes both `127.0.0.1` and `::1` (so an SSH `LocalForward` bound to one loopback can't slip past) and picks the first free port in `4820–4859` automatically. The chosen port is propagated to the Vite dev proxy via `DASHBOARD_PORT`, and the Express server writes it to `~/.claude/.agent-dashboard.json` so the Claude Code hook handler discovers it without any env var.
|
||||
> You usually do **not** need to set `DASHBOARD_PORT` manually. `npm run dev` is wrapped by `scripts/dev.js`, which probes both `127.0.0.1` and `::1` (so an SSH `LocalForward` bound to one loopback can't slip past) and picks the first free port in `4820–4859` automatically. The chosen port is propagated to the Vite dev proxy via `DASHBOARD_PORT`, and the Express server writes it to `~/.claude/.agenthub.json` so the Claude Code hook handler discovers it without any env var.
|
||||
>
|
||||
> Multiple dashboards can run side by side — for example two `npm run dev` checkouts, or `npm run dev` alongside `npm start`. Each one appends its `{port, pid, startedAt}` entry to the discovery file, and `scripts/hook-handler.js` fan-outs every hook event to every live entry, so both UIs keep their real-time stream.
|
||||
>
|
||||
@@ -124,43 +118,6 @@ DASHBOARD_PORT=9000 npm run dev
|
||||
>
|
||||
> If you bypass the picker (e.g. `npm run dev:raw`, container builds, or anything else that calls `node server/index.js` directly), make sure your client is built / proxied against the port the server actually bound.
|
||||
|
||||
### MCP server (optional)
|
||||
|
||||
The project includes a local MCP server under `mcp/` so AI agents can call dashboard operations through standardized tools. It supports three transport modes: stdio for MCP host integration, HTTP+SSE for networked clients, and an interactive REPL for operator debugging.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "MCP Transport Modes"
|
||||
STDIO["stdio\n(default)"]
|
||||
HTTP["HTTP + SSE\n(:8819)"]
|
||||
REPL["Interactive REPL"]
|
||||
end
|
||||
|
||||
HOST["MCP Host"] -->|"stdin/stdout"| STDIO
|
||||
RC["Remote Client"] -->|"POST /mcp · GET /sse"| HTTP
|
||||
OP["Operator"] -->|"interactive CLI"| REPL
|
||||
|
||||
STDIO --> API["Dashboard API<br/>http://127.0.0.1:4820/api/*"]
|
||||
HTTP --> API
|
||||
REPL --> API
|
||||
|
||||
style STDIO fill:#6366f1,stroke:#818cf8,color:#fff
|
||||
style HTTP fill:#f59e0b,stroke:#fbbf24,color:#000
|
||||
style REPL fill:#a855f7,stroke:#c084fc,color:#fff
|
||||
```
|
||||
|
||||
Quick start:
|
||||
|
||||
```bash
|
||||
npm run mcp:install
|
||||
npm run mcp:build
|
||||
npm run mcp:start # stdio (for Claude Code / Claude Desktop)
|
||||
npm run mcp:start:http # HTTP + SSE server on port 8819
|
||||
npm run mcp:start:repl # interactive CLI with tab completion
|
||||
```
|
||||
|
||||
For full host config and tool catalog, see [mcp/README.md](./mcp/README.md).
|
||||
|
||||
### Agent extension setup (Claude Code + Codex)
|
||||
|
||||
This repository ships extension files for both agent ecosystems:
|
||||
@@ -359,18 +316,6 @@ node scripts/import-history.js --project my-project
|
||||
| `clear-data` | `npm run clear-data` | Delete all data from the database |
|
||||
| `seed` | `npm run seed` | Insert demo sessions/agents/events |
|
||||
| `import-history` | `npm run import-history` | Import legacy sessions from `~/.claude/` (also runs on startup) |
|
||||
| `mcp:install` | `npm run mcp:install` | Install MCP package dependencies |
|
||||
| `mcp:build` | `npm run mcp:build` | Build MCP server into `mcp/build/` |
|
||||
| `mcp:start` | `npm run mcp:start` | Start MCP server (stdio, for MCP hosts) |
|
||||
| `mcp:start:http` | `npm run mcp:start:http` | Start MCP HTTP+SSE server on port 8819 |
|
||||
| `mcp:start:repl` | `npm run mcp:start:repl` | Start interactive MCP REPL |
|
||||
| `mcp:dev` | `npm run mcp:dev` | Start MCP server in dev mode (stdio) |
|
||||
| `mcp:dev:http` | `npm run mcp:dev:http` | Start MCP HTTP server in dev mode |
|
||||
| `mcp:dev:repl` | `npm run mcp:dev:repl` | Start MCP REPL in dev mode |
|
||||
| `mcp:typecheck` | `npm run mcp:typecheck` | Type-check MCP source |
|
||||
| `mcp:docker:build` | `npm run mcp:docker:build` | Build MCP container image with Docker |
|
||||
| `mcp:podman:build` | `npm run mcp:podman:build` | Build MCP container image with Podman |
|
||||
| `test:mcp` | `npm run test:mcp` | Run MCP server unit tests |
|
||||
| `claude` | Claude CLI | Uses `CLAUDE.md`, `.claude/rules`, and `.claude/skills` automatically |
|
||||
| `test` | `npm test` | Run all server and client tests |
|
||||
| `test:server` | `npm run test:server` | Run server integration tests only |
|
||||
@@ -392,7 +337,7 @@ Commonly used targets:
|
||||
|
||||
| Make target | Equivalent npm command | Description |
|
||||
|---|---|---|
|
||||
| `make setup` | `npm run setup` + MCP install | Install all dependencies (root + client + MCP) |
|
||||
| `make setup` | `npm run setup` | Install all dependencies (root + client) |
|
||||
| `make dev` | `npm run dev` | Start server + client in watch mode |
|
||||
| `make build` | `npm run build` | Build the React client for production |
|
||||
| `make start` | `npm start` | Start the production server |
|
||||
@@ -402,8 +347,6 @@ Commonly used targets:
|
||||
| `make test-client` | `npm run test:client` | Run client tests only |
|
||||
| `make format` | `npm run format` | Format all files with Prettier |
|
||||
| `make format-check` | `npm run format:check` | Check formatting without writing |
|
||||
| `make mcp-build` | `npm run mcp:build` | Compile MCP TypeScript |
|
||||
| `make mcp-typecheck` | `npm run mcp:typecheck` | Type-check MCP source |
|
||||
| `make seed` | `npm run seed` | Load demo data |
|
||||
| `make clear-data` | `npm run clear-data` | Delete all data rows |
|
||||
| `make docker-up` | `docker compose up -d` | Start via docker-compose |
|
||||
|
||||
Reference in New Issue
Block a user