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:
+10
-10
@@ -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"`,
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user