EasySkills 2.1.0 - Link-Health Diagnostics
EasySkills 2.1.0
Link-Health Diagnostics (new)
A broken (dangling) symlink in the central skill library — its target removed
by the user — used to be invisible to EasySkills and, worse, could be forwarded
into every agent's skills directory. Some agents (e.g. older Run builds) abort
their entire skill scan the moment they stat a dead link, silently dropping
every skill sorted after it. This release makes that whole failure mode visible
and self-healing.
- Auto-prune dangling links on sync.
deploy.sh/deploy.ps1now scan the
central directory before mapping and automatically remove any symlink whose
target no longer exists, with a clear log line per pruned link and a summary
count. Dangling links are dead data (their target is gone), so pruning is
loss-free and stops the broken link from ever reaching an agent. - Flag external-link skills as fragile. A skill that is itself a valid
external symlink is still forwarded (backward compatible) but is now flagged
with a warning and surfaced in the sync summary, nudging you to convert it to
a real directory so a single target deletion can't cascade across agents. --statuslink-health snapshot. The status command now reports a read-only
Link health: N dangling (run sync to prune), M externalline, so problems
can be previewed without running a sync.
WebUI
- Skills that are external symlinks now show a
⚠ External Linkwarning badge
(amber accent) on the Skills tab, with the card border and icon recoloured. - The dashboard shows a link-health advisory banner whenever the central library
has dangling or external-link skills, with a one-line summary and a pointer to
the Skills tab.
API
GET /api/statusnow includesdangling_countandexternal_link_count
(both macOS/Linux and Windows backends).GET /api/skillsnow includes anis_external_linkboolean per skill
(both backends). The frontend degrades gracefully if an older backend omits it.
Validation
- Add 5 new regression tests covering link-health semantics: external-link
detection and dangling exclusion inget_skills(), dangling/external counting
inget_central_dir_warnings(), missing-central-dir handling, cross-backend
field-name contracts, and that the sync logic prunes dangling symlinks.