-
v1.5.2 Stable
released this
2026-09-10 09:48:25 +00:00 | 239 commits to main since this releaseFixed
Update detection was blind on a plugin-cache install that isn't a git clone.
A marketplace entry with
"source": "url"— this project's own — makes Claude Code unpack an archive instead of cloning, so~/.claude/plugins/cache/sg/agenthub/<sha>has no.git.getUpdatesStatusprobed for.gitfirst and returned "Install directory is not a git clone; check for updates manually", skipping the whole release layer added in 1.5.0:update_availablestayedfalsehowever many releases were published,plugin_marketplace/plugin_namewere never set, soPOST /api/updates/apply's plugin branch could never fire — it answered 409, wrongly claiming nothing newer was published.
Because the symptom reads as "up to date", the bug was invisible for as long as the install happened to be current.
The fix: the plugin branch now runs before the
.gitprobe and answers without git at all. The repository URL comes from the marketplace manifest on disk (known_marketplaces.json→.claude-plugin/marketplace.json→source.url; agithubowner/reposhorthand yieldsnullrather than a guessed host), andpackage.jsonis the only local comparison signal. A failed release lookup is reported asrelease_checkand never as "nothing newer".UI/CLI: the "not a git clone" note is gated on
install_kind !== "plugin", so Update now is offered wherever the dashboard can actually check and apply.An already-open Claude Code session still needs
/reload-pluginsfor new skills/commands — that is REPL-scoped and no server can trigger it.Verification
- New regression suite
server/__tests__/update-check-plugin-nogit.test.js(20 tests) pins the git-free path. npm run test:server1703 passing ·npm run test:client487 passing ·npm run buildclean.
Downloads