Bring the skill-router MCP's self-update UX in line with the manifest-based update mechanism used by stuffbucket/maximal, so users on the primary npm/npx distribution actually learn about and can apply new releases.
Current state (what already works vs. what's broken)
The mechanism to mirror (maximal)
maximal's detector (src/lib/update/update-check.ts) is the reference:
- Source of truth is a small JSON fetched over plain HTTP (a CDN-served, channel-keyed manifest), chosen over the GitHub REST API because anonymous REST is 60/h/IP and fails behind shared NAT (
docs/decisions/site-runtime-version-manifest.md).
- The check is total / never-throws: offline, non-200, timeout, and malformed all resolve to a coherent status with a diagnostic
last_error, preserving last-known.
- In-process TTL cache, fetch timeout, UA header, no auth; hand-rolled semver-precedence compare, zero deps.
- Surfaced notify-only (no auto-install).
For the MCP, the portable adaptation is: read the current version from the package package.json, take "latest" from the npm registry (works for every install type), and keep maximal's cache + never-throws + semver-compare shape.
Work items
Suggested order
#27 (the engine) → #28 (the surface, depends on #27) → #29 (the apply step). #28 and #29 can proceed in parallel once #27 lands.
Bring the skill-router MCP's self-update UX in line with the manifest-based update mechanism used by
stuffbucket/maximal, so users on the primary npm/npx distribution actually learn about and can apply new releases.Current state (what already works vs. what's broken)
mainauto-patch-bumps and publishes to npm via OIDC (.github/workflows/publish.yml); a manualworkflow_dispatchcuts a minor/major bump + GitHub Release with notes (.github/workflows/bump-version.yml);scripts/check-versions.jsguards manifest-version drift. No release-automation work is needed for this epic.git ls-remote --tags originagainst an install root that, fornpx -p @stuffbucket/skills, has no.git— so npx users get no signal. It also compares against git tags, not the npm dist-tag. → fix(mcp): upgrade detection is broken for npm/npx installs — adopt a distribution-correct "latest" source #27serverInfo.versionis hardcoded"1.0.0"; detection is only a side effect oflist_skills; there is no explicit "check for updates" tool. → feat(mcp): expose current version + an explicit update-check tool; fix hardcoded serverInfo.version #28update-skillstells users to run... --update, but no--updateflag is handled anywhere; it is a no-op. → feat(mcp): implement the advertised in-place update (--update is a no-op today) #29The mechanism to mirror (maximal)
maximal's detector (
src/lib/update/update-check.ts) is the reference:docs/decisions/site-runtime-version-manifest.md).last_error, preserving last-known.For the MCP, the portable adaptation is: read the current version from the package
package.json, take "latest" from the npm registry (works for every install type), and keep maximal's cache + never-throws + semver-compare shape.Work items
check_updatesMCP tool; fix hardcodedserverInfo.version.--updateupgrade.Suggested order
#27 (the engine) → #28 (the surface, depends on #27) → #29 (the apply step). #28 and #29 can proceed in parallel once #27 lands.