update-check: 4-part release tag (v0.1.8.0) breaks version comparison, no...
Apra Fleet is an open-source MCP server
Brought to you by:
apralabs
Originally created by: kumaakh
parseVersion() in src/services/update-check.ts only handles 3-part versions (X.Y.Z). The GitHub release tags use a 4-part format (v0.1.8.0 or v0.1.8.1), which causes parseVersion to return null and isNewer() to silently return false. No update notice is ever shown.
// parseVersion("v0.1.8.0") → clean = "0.1.8.0" → parts.length === 4 → returns null
const parts = clean.split('.').map(Number);
if (parts.length !== 3 || ...) return null;
Update parseVersion to accept both 3-part and 4-part versions, comparing all available parts in order:
function parseVersion(v: string): number[] | null {
const clean = v.replace(/^v/, '').split('_')[0];
const parts = clean.split('.').map(Number);
if (parts.length < 3 || parts.some(n => isNaN(n))) return null;
return parts;
}
function isNewer(candidate: string, current: string): boolean {
const c = parseVersion(candidate);
const i = parseVersion(current);
if (!c || !i) return false;
const len = Math.max(c.length, i.length);
for (let k = 0; k < len; k++) {
const cv = c[k] ?? 0;
const iv = i[k] ?? 0;
if (cv !== iv) return cv > iv;
}
return false;
}
This handles v0.1.8 vs v0.1.8.0 (equal), v0.1.8.1 vs v0.1.8 (newer), and remains backward-compatible with 3-part tags.