New self-contained feature in features/updater/ (mirrors the backup feature):
- index.js + feature.json (auto-discovered; routes /updater + sub-tabs).
- updater-page.js: 5 tabs — Overview (update/CVE/recovery counts), Updates
(per-app current->available + Update/Update-all), Security (CVEs by severity,
links to NVD), Recovery (per-app rollback points; snapshot-before-update),
History. Reads /data/updater/generated/{updates,cves,history}.json; falls
back to the installed-apps list so it's useful before the first scan. All
actions route through services.tasks (updater_check/apply/apply_all/rollback)
— no new mutating API.
- updater.css (self-contained, teal --page-updater hue) + updater-content.html.
- New topbar 'Updates' nav button (nav-updater) + active-highlighting in
topbar.js + spa.js. Kernel: setupRoutesFromManifest now allows module-only
features (no legacy handler) — this is the first such feature.
Backend generator + 'libreportal updater' task land next.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
50 lines
2.2 KiB
HTML
50 lines
2.2 KiB
HTML
<!-- App Updater page shell. Panels are filled by features/updater/updater-page.js.
|
|
Page identity hue: --page-updater (teal), set on the root below. -->
|
|
<div id="updater-page" class="updater-page admin-page" style="--page: var(--page-updater); --page-rgb: var(--page-updater-rgb);">
|
|
<div class="updater-layout">
|
|
<aside class="sidebar updater-sidebar">
|
|
<div class="sidebar-heading">App Updater</div>
|
|
<button class="category active" data-updater-tab="overview">
|
|
<span class="cat-ico">▦</span> Overview
|
|
</button>
|
|
<button class="category" data-updater-tab="updates">
|
|
<span class="cat-ico">⬆</span> Updates
|
|
</button>
|
|
<button class="category" data-updater-tab="security">
|
|
<span class="cat-ico">🛡</span> Security
|
|
</button>
|
|
<button class="category" data-updater-tab="recovery">
|
|
<span class="cat-ico">⟲</span> Recovery
|
|
</button>
|
|
<button class="category" data-updater-tab="history">
|
|
<span class="cat-ico">🗒</span> History
|
|
</button>
|
|
</aside>
|
|
|
|
<section class="updater-content">
|
|
<header class="updater-header">
|
|
<div class="updater-header-icon" aria-hidden="true">
|
|
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M21 2v6h-6"></path>
|
|
<path d="M3 12a9 9 0 0 1 15-6.7L21 8"></path>
|
|
<path d="M3 22v-6h6"></path>
|
|
<path d="M21 12a9 9 0 0 1-15 6.7L3 16"></path>
|
|
</svg>
|
|
</div>
|
|
<div>
|
|
<h1 id="updater-section-title">Overview</h1>
|
|
<p id="updater-section-subtitle">Update health, security posture, and recovery readiness at a glance.</p>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="updater-panels">
|
|
<div class="updater-tabpanel active" id="updater-panel-overview"></div>
|
|
<div class="updater-tabpanel" id="updater-panel-updates"></div>
|
|
<div class="updater-tabpanel" id="updater-panel-security"></div>
|
|
<div class="updater-tabpanel" id="updater-panel-recovery"></div>
|
|
<div class="updater-tabpanel" id="updater-panel-history"></div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|