Adds install_sea_release() to uclaude_updater.py — dispatches by release type from releases/v<VER>/, supporting both legacy cli.js and new SEA layout. Production-hardened (after 2 rounds of dual-critic FIX): - Pre-verify source sha256 BEFORE touching install_root (fail-fast) - Atomic copy via _atomic_copy_with_fsync: write to .new, fsync, rename, then fsync parent dir (POSIX durability) - .new cleanup on any exception (no orphan files) - fcntl.flock on <install_root>/.uclaude-update.lock (concurrent run safe) - Backup existing → .bak.<TIMESTAMP> before overwrite - Post-install sha256 verify; rollback from backup on mismatch - Atomic symlink update (tmp_link + os.replace) cmd_update dispatches: - detect_release_type → "sea" / "cli_js" / None - "sea" → install_sea_release with /usr/lib/node_modules root + /usr/bin/claude symlink - "cli_js" → existing legacy install_cli_js (preserved) - None → fail with clear error Updated: - claude/uclaude_updater.py — +138 lines (install_sea_release + helpers) - claude/releases/index.json — latest=2.1.119, +v2.1.119 entry (sea_binary) Tests: 11/11 GREEN (claude/tests/test_sea_install.py — new file) Dual critic: gpt-5.4 + GLM 5.1 both APPROVE (round 3 final) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
295 lines
5.5 KiB
JSON
Executable File
295 lines
5.5 KiB
JSON
Executable File
{
|
|
"latest": "2.1.119",
|
|
"releases": [
|
|
{
|
|
"version": "2.1.119",
|
|
"date": "2026-04-24",
|
|
"patches": 9,
|
|
"status": "stable",
|
|
"install_type": "sea_binary"
|
|
},
|
|
{
|
|
"version": "2.1.112",
|
|
"date": "2026-04-17",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.111",
|
|
"date": "2026-04-16",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.110",
|
|
"date": "2026-04-16",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.109",
|
|
"date": "2026-04-15",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.108",
|
|
"date": "2026-04-15",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.107",
|
|
"date": "2026-04-14",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.105",
|
|
"date": "2026-04-14",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.104",
|
|
"date": "2026-04-13",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.101",
|
|
"date": "2026-04-12",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.100",
|
|
"date": "2026-04-10",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.98",
|
|
"date": "2026-04-10",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.97",
|
|
"date": "2026-04-09",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.96",
|
|
"date": "2026-04-08",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.94",
|
|
"date": "2026-04-08",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.92",
|
|
"date": "2026-04-07",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.91",
|
|
"date": "2026-04-04",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.90",
|
|
"date": "2026-04-02",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.89",
|
|
"date": "2026-04-01",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.87",
|
|
"date": "2026-04-01",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.88",
|
|
"date": "2026-03-31",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.86",
|
|
"date": "2026-03-29",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.85",
|
|
"date": "2026-03-27",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.84",
|
|
"date": "2026-03-26",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.83",
|
|
"date": "2026-03-26",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.81",
|
|
"date": "2026-03-25",
|
|
"patches": 28,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.80",
|
|
"date": "2026-03-20",
|
|
"patches": 28,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.79",
|
|
"date": "2026-03-19",
|
|
"patches": 28,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.78",
|
|
"date": "2026-03-18",
|
|
"patches": 28,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.77",
|
|
"date": "2026-03-17",
|
|
"patches": 28,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.76",
|
|
"date": "2026-03-14",
|
|
"patches": 26,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.75",
|
|
"date": "2026-03-13",
|
|
"patches": 25,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.74",
|
|
"date": "2026-03-13",
|
|
"patches": 25,
|
|
"status": "partial"
|
|
},
|
|
{
|
|
"version": "2.1.73",
|
|
"date": "2026-03-12",
|
|
"patches": 25,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.72",
|
|
"date": "2026-03-11",
|
|
"patches": 25,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.71",
|
|
"date": "2026-03-07",
|
|
"patches": 25,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.70",
|
|
"date": "2026-03-06",
|
|
"patches": 25,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.69",
|
|
"date": "2026-03-06",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.68",
|
|
"date": "2026-03-05",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.66",
|
|
"date": "2026-03-04",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.63",
|
|
"date": "2026-03-01",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.62",
|
|
"date": "2026-02-27",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.61",
|
|
"date": "2026-02-27",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.59",
|
|
"date": "2026-02-26",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.53",
|
|
"date": "2026-02-26",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.52",
|
|
"date": "2026-02-24",
|
|
"patches": 20,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.47",
|
|
"date": "2026-02-21",
|
|
"patches": 15,
|
|
"status": "stable"
|
|
},
|
|
{
|
|
"version": "2.1.50",
|
|
"date": "2026-02-21",
|
|
"patches": 15,
|
|
"status": "stable"
|
|
}
|
|
]
|
|
}
|