refactor!: rebrand CCAM to AgentHub

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).
This commit is contained in:
2026-09-07 12:09:15 +07:00
parent ae9b3dbcd5
commit 17d56d0e01
345 changed files with 2705 additions and 2727 deletions
+10 -10
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env node
/**
* @file plugin-doctor.js
* @description Reports the health of a plugin-installed CCAM: Node version,
* @description Reports the health of a plugin-installed AgentHub: Node version,
* bootstrap state, runtime dependencies, server liveness, duplicate hook
* entries (the one failure that silently doubles every token and cost figure),
* the `ccam` CLI launcher and its PATH, whether the committed MCP build still
* the `agenthub` CLI launcher and its PATH, whether the committed MCP build still
* matches `mcp/src`, and whether the slash commands the pipeline templates name
* as node drivers are actually resolvable (the `superpowers` plugin, today).
* Read-only — it diagnoses, it never repairs.
@@ -32,7 +32,7 @@ function diagnose() {
"Node",
boot.nodeVersionOk()
? `v${process.versions.node}`
: `v${process.versions.node} — CCAM needs >= ${boot.MIN_NODE.join(".")} (node:sqlite)`
: `v${process.versions.node} — AgentHub needs >= ${boot.MIN_NODE.join(".")} (node:sqlite)`
);
add("ok", "Plugin root", PLUGIN_ROOT);
@@ -51,7 +51,7 @@ function diagnose() {
moved ? "warn" : "ok",
"Bootstrap",
moved
? `recorded against a previous plugin version (${state.pluginRoot}) — run /ccam-update`
? `recorded against a previous plugin version (${state.pluginRoot}) — run /agenthub-update`
: `last run ${state.updatedAt}`
);
}
@@ -60,7 +60,7 @@ function diagnose() {
add(
deps ? "ok" : "fail",
"Runtime deps",
deps ? path.join(rt, "node_modules") : "missing — run /ccam-update"
deps ? path.join(rt, "node_modules") : "missing — run /agenthub-update"
);
const live = boot.liveServers();
@@ -96,7 +96,7 @@ function diagnose() {
add(
fs.existsSync(path.join(dist, "index.html")) ? "ok" : "warn",
"Dashboard UI",
fs.existsSync(path.join(dist, "index.html")) ? dist : "not built yet — run /ccam-open"
fs.existsSync(path.join(dist, "index.html")) ? dist : "not built yet — run /agenthub-open"
);
return out;
@@ -148,16 +148,16 @@ function countLegacyHookEntries() {
function cliStatus() {
const dir = path.join(os.homedir(), ".local", "bin");
const file = path.join(dir, process.platform === "win32" ? "ccam.cmd" : "ccam");
if (!fs.existsSync(file)) return ["warn", "ccam CLI", `no launcher at ${file}`];
const file = path.join(dir, process.platform === "win32" ? "agenthub.cmd" : "agenthub");
if (!fs.existsSync(file)) return ["warn", "agenthub CLI", `no launcher at ${file}`];
const onPath = (process.env.PATH || "")
.split(path.delimiter)
.some((p) => path.resolve(p) === path.resolve(dir));
return onPath
? ["ok", "ccam CLI", file]
? ["ok", "agenthub CLI", file]
: [
"warn",
"ccam CLI",
"agenthub CLI",
`${file} exists but ${dir} is not on PATH — add: export PATH="${dir}:$PATH"`,
];
}