fix(plugins): make the 10 focused plugins installable, finish the AgentHub rename
The ten `agenthub-*` plugins were listed by the marketplace but could never be
installed — two schema mistakes present since the entries were first authored
(57dc915), both invisible until you actually run `claude plugin install`:
- marketplace entries used `"path": "plugins/<name>"`; the CLI only accepts
`"source"`, so every one failed with
`This plugin's marketplace entry is invalid: source: Invalid input`
- each `plugin.json` carried npm's `"repository": { "type", "url" }` object;
the schema wants a plain string, so the next attempt failed with
`Validation errors: repository: Invalid input`
Verified by installing all 11 entries into a throwaway CLAUDE_CONFIG_DIR:
1/11 before, 11/11 after. `plugins-marketplace.test.js` was asserting the
broken shape, which is why CI stayed green — it now asserts `source` and
rejects `path`.
Marketplace renamed `claude-code-agent-monitor-plugins` -> `agenthub`, so the
install line is `agenthub@agenthub`. ARCHITECTURE.md documented a marketplace
name (`smartgift-claude-code-monitor`) that never existed in any revision.
The documented `/plugin marketplace add Smartgift-AI/Claude-Code-Monitor` also
never worked: the `owner/repo` shorthand resolves to github.com only, and this
repo is self-hosted on Gitea. Confirmed the CLI rejects `host/owner/repo` and
ignores GH_HOST / GITHUB_HOST / CLAUDE_CODE_MARKETPLACE_URL, so the full
https:// clone URL is the only supported form. Same GitHub-habit class fixed
elsewhere: raw.githubusercontent.com icon URLs (404, and the repo ships
favicon.svg not favicon.ico — the client had the same dead /favicon.ico),
a smartgift.github.io docs link (404), and Gitea `/blob/<ref>/` paths that
must be `/src/branch/<ref>/`.
Repository renamed to Smartgift-AI/AgentHub throughout. Gitea 301-redirects
the old name, so these were stale rather than broken; `docs/superpowers/`
keeps the old name because those are dated decision records.
Adds `repo-links.test.js` to guard both classes (it runs under the existing
pre-commit gate) plus an openapi.yaml drift check — the committed spec had
silently fallen a minor version behind package.json. `generate-openapi-yaml.js`
now exports `render()` so the test compares against one definition of the dump
options instead of a second copy.
This commit is contained in:
@@ -40,10 +40,7 @@ const schemas = {
|
||||
description:
|
||||
"Distinct, non-empty session working directories (the `cwd` column), sorted ascending. Powers the cwd filter dropdown.",
|
||||
items: { type: "string" },
|
||||
example: [
|
||||
"/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
"/Users/son/code/another-project",
|
||||
],
|
||||
example: ["/Users/dev/AgentHub", "/Users/son/code/another-project"],
|
||||
},
|
||||
sources: {
|
||||
type: "array",
|
||||
@@ -527,10 +524,7 @@ const paths = {
|
||||
"application/json": {
|
||||
schema: { $ref: "#/components/schemas/SessionsFacetsResponse" },
|
||||
example: {
|
||||
cwds: [
|
||||
"/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
"/Users/son/code/another-project",
|
||||
],
|
||||
cwds: ["/Users/dev/AgentHub", "/Users/son/code/another-project"],
|
||||
sources: ["local", "4d1f0e2a-7b9c-4c33-8a21-9e0f7b6d4c11"],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -97,7 +97,7 @@ const GENERIC_WEBHOOK_TARGET_EXAMPLE = {
|
||||
|
||||
const SETTINGS_INFO_EXAMPLE = {
|
||||
db: {
|
||||
path: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor/server/data/agent-monitor.db",
|
||||
path: "/Users/dev/AgentHub/server/data/agent-monitor.db",
|
||||
size: 48922624,
|
||||
counts: {
|
||||
sessions: 412,
|
||||
@@ -351,7 +351,7 @@ const IMPORT_UPLOAD_EXAMPLE = {
|
||||
|
||||
const UPDATE_STATUS_AVAILABLE_EXAMPLE = {
|
||||
git_repo: true,
|
||||
repo_root: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
repo_root: "/Users/dev/AgentHub",
|
||||
update_available: true,
|
||||
commits_behind: 4,
|
||||
remote_ref: "origin/master",
|
||||
@@ -363,7 +363,7 @@ const UPDATE_STATUS_AVAILABLE_EXAMPLE = {
|
||||
|
||||
const UPDATE_STATUS_UP_TO_DATE_EXAMPLE = {
|
||||
git_repo: true,
|
||||
repo_root: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
repo_root: "/Users/dev/AgentHub",
|
||||
update_available: false,
|
||||
commits_behind: 0,
|
||||
remote_ref: "origin/master",
|
||||
|
||||
@@ -43,7 +43,7 @@ const exampleSession = {
|
||||
id: "b7f3a2c1-4e5d-4a8b-9c2f-1d6e8a0b3c4d",
|
||||
name: "Refactor pricing route + add cost endpoint",
|
||||
status: "active",
|
||||
cwd: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
cwd: "/Users/dev/AgentHub",
|
||||
model: "claude-opus-4-20250514",
|
||||
started_at: "2026-06-25T14:02:11.004Z",
|
||||
ended_at: null,
|
||||
@@ -60,7 +60,7 @@ const exampleCompletedSession = {
|
||||
id: "1a2b3c4d-5e6f-4071-8293-a4b5c6d7e8f9",
|
||||
name: "Fix flaky transcript pagination test",
|
||||
status: "completed",
|
||||
cwd: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
cwd: "/Users/dev/AgentHub",
|
||||
model: "claude-sonnet-4-20250514",
|
||||
started_at: "2026-06-24T09:12:00.000Z",
|
||||
ended_at: "2026-06-24T09:48:32.501Z",
|
||||
@@ -176,7 +176,7 @@ const paths = {
|
||||
example: {
|
||||
id: "b7f3a2c1-4e5d-4a8b-9c2f-1d6e8a0b3c4d",
|
||||
name: "Refactor pricing route + add cost endpoint",
|
||||
cwd: "/Users/son/WebstormProjects/Claude-Code-Agent-Monitor",
|
||||
cwd: "/Users/dev/AgentHub",
|
||||
model: "claude-opus-4-20250514",
|
||||
metadata: { source: "hook", git_branch: "feat/spend-budgets" },
|
||||
},
|
||||
|
||||
@@ -875,7 +875,7 @@ const paths = {
|
||||
items: [
|
||||
{
|
||||
kind: "dashboard",
|
||||
path: "/Users/dev/Claude-Code-Agent-Monitor",
|
||||
path: "/Users/dev/AgentHub",
|
||||
label: "Dashboard server",
|
||||
},
|
||||
{ kind: "home", path: "/Users/dev", label: "Home" },
|
||||
|
||||
Reference in New Issue
Block a user