diff --git a/apps/desktop/src/components/config/DriverStoreDialog.vue b/apps/desktop/src/components/config/DriverStoreDialog.vue index 254aa8379..07944992b 100644 --- a/apps/desktop/src/components/config/DriverStoreDialog.vue +++ b/apps/desktop/src/components/config/DriverStoreDialog.vue @@ -225,7 +225,6 @@ function resetInstallProgress() { lastProgressPercent.value = null; } -const updatableCount = computed(() => drivers.value.filter((d) => d.update_available).length); const downloadCacheBytes = computed(() => Number(driverStoreUsage.value?.download_cache_bytes || 0)); const usageSummary = computed(() => { const usage = driverStoreUsage.value; @@ -667,6 +666,34 @@ const filteredAgentDrivers = computed(() => { return builtinDriverRows.value.filter((driver) => [driver.label, driver.db_type, driver.version, driver.installed_version, driverRequiresJavaRuntime(driver) ? driver.jre : ""].filter(Boolean).join(" ").toLowerCase().includes(query)); }); +/** filteredAgentDrivers reordered: updatable drivers first, then the rest (installed + not-installed). */ +const orderedFilteredDrivers = computed(() => { + const updatable: AgentDriverInfo[] = []; + const stable: AgentDriverInfo[] = []; + for (const driver of filteredAgentDrivers.value) { + if (driver.update_available) { + updatable.push(driver); + } else { + stable.push(driver); + } + } + return [...updatable, ...stable]; +}); + +/** Number of updatable drivers in the currently filtered list. */ +const filteredUpdatableCount = computed(() => { + let count = 0; + for (const driver of orderedFilteredDrivers.value) { + if (driver.update_available) count++; + else break; + } + return count; +}); + +/** Filtered driver rows split: updatable-only and stable-only (no