fix: make every plugin in the marketplace actually installable, and repoint the repo-rename leftovers #13
Reference in New Issue
Block a user
Delete Branch "fix/plugin-install-and-repo-rename"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was broken
1. Ten of eleven plugins were listed but uninstallable. Two nested schema bugs, both present since the first commit (
57dc915, 2026-07-29) — so this is not rename fallout:"path": "plugins/<name>"instead of"source"This plugin's marketplace entry is invalid: source: Invalid inputrepositoryas npm's{type, url}object instead of a stringValidation errors: repository: Invalid inputThe existing test asserted the broken shape, which is exactly why CI stayed green for six weeks. It now asserts the working one, plus that
sourceresolves to a real directory on disk.2. The documented install command could never work. Six docs told users to run
claude plugin marketplace add Smartgift-AI/AgentHub. Theowner/reposhorthand resolves to github.com only — verified against the CLI, which rejectshost/owner/repooutright and ignoresGH_HOST,GITHUB_HOSTandCLAUDE_CODE_MARKETPLACE_URL. There is no way to point the shorthand at a self-hosted Gitea, so all six now use the fullhttps://…/AgentHub.gitclone URL.3. Push notification icons were doubly dead — a
raw.githubusercontent.comURL for a repo that is not on GitHub, pointing at afavicon.icothis repo does not ship. Grepping the callers turned up the same/favicon.icoinclient/src/hooks/useNotifications.ts; both now use the same-origin/favicon.svg.4. Retired names and stale marketplace handles —
Claude-Code-Monitor/Claude-Code-Agent-Monitor,@claude-code-agent-monitor-plugins,@smartgift-claude-code-monitor(a name that never existed in any of the four revisions ofmarketplace.json), and/Users/son/WebstormProjects/…example paths.Guards so it cannot rot again silently
Both run in
npm run test:server, so the pre-commit hook catches them:server/__tests__/repo-links.test.js— six link rules over every git-tracked text file (GitHub marketplace shorthand,github.com/Smartgift*,raw.githubusercontent.com,*smartgift*.github.io, Gitea/blob/<ref>/path syntax, retired repo names). It lints the staged index under pre-commit on purpose: noGIT_*scrub, sogit ls-fileslists what is about to land rather than the previous commit.package.json(1.4.6 vs 1.5.0).scripts/generate-openapi-yaml.jsnow exports arender()so the test and the generator share one definition of the dump options.Verification
npm run test:server1633 pass / 0 fail ·npm run test:client475 pass / 0 fail ·prettier --checkclean · file-header audit clean. The lint was proven to actually fire by injecting each violation intodocs/CLI.mdand observing the expected failure, then restoring.