e972267a42
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.
137 lines
3.8 KiB
JSON
137 lines
3.8 KiB
JSON
{
|
|
"name": "agenthub",
|
|
"description": "AgentHub — the full local-first dashboard as a plugin. Installs the event hooks, boots the dashboard server, and puts the `agenthub` CLI on PATH. No checkout, no npm run setup.",
|
|
"author": {
|
|
"name": "Nguyễn Ngọc Trí Vĩ",
|
|
"url": "https://git.smartgift.io.vn/Smartgift-AI"
|
|
},
|
|
"homepage": "https://git.smartgift.io.vn/Smartgift-AI/AgentHub",
|
|
"repository": "https://git.smartgift.io.vn/Smartgift-AI/AgentHub.git",
|
|
"license": "MIT",
|
|
"keywords": ["dashboard", "monitoring", "sessions", "cost", "lanes", "claude-code"],
|
|
"commands": [
|
|
"./plugins/agenthub/commands/agenthub-doctor.md",
|
|
"./plugins/agenthub/commands/agenthub-update.md",
|
|
"./plugins/agenthub/commands/agenthub-open.md",
|
|
"./plugins/agenthub/commands/intake.md",
|
|
"./plugins/agenthub/commands/plan.md",
|
|
"./plugins/agenthub/commands/implement.md",
|
|
"./plugins/agenthub/commands/tests.md",
|
|
"./plugins/agenthub/commands/e2e.md",
|
|
"./plugins/agenthub/commands/e2e-passed.md",
|
|
"./plugins/agenthub/commands/review.md",
|
|
"./plugins/agenthub/commands/qc-plan.md",
|
|
"./plugins/agenthub/commands/qc.md",
|
|
"./plugins/agenthub/commands/gate.md",
|
|
"./plugins/agenthub/commands/publishing.md",
|
|
"./plugins/agenthub/commands/pr-open.md",
|
|
"./plugins/agenthub/commands/reported.md",
|
|
"./plugins/agenthub/commands/watching-pr.md",
|
|
"./plugins/agenthub/commands/merged.md",
|
|
"./plugins/agenthub/commands/done.md",
|
|
"./plugins/agenthub/commands/ship-full.md",
|
|
"./plugins/agenthub/commands/ship-quick.md"
|
|
],
|
|
"hooks": {
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" PreToolUse",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"PostToolUse": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" PostToolUse",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Stop": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" Stop",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"SubagentStop": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" SubagentStop",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Notification": [
|
|
{
|
|
"matcher": "*",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" Notification",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"SessionStart": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/plugin-bootstrap.js\"",
|
|
"timeout": 10,
|
|
"statusMessage": "Checking the AgentHub dashboard..."
|
|
},
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" SessionStart",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"SessionEnd": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" SessionEnd",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"UserPromptSubmit": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hook-handler.js\" UserPromptSubmit",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|