From 208bb608f32ba475de1989bfe993b2ebd26f496b Mon Sep 17 00:00:00 2001 From: Dorian Date: Wed, 18 Mar 2026 15:18:43 +0000 Subject: [PATCH] fix: container state mapping + marketplace install aliases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Created containers now show as "stopped" not "starting" (fixes ollama/tailscale perpetual "starting" state) - Comprehensive INSTALLED_ALIASES map: fedimint, electrumx, grafana, jellyfin, vaultwarden, searxng, homeassistant, photoprism, lnd, filebrowser, tailscale, ollama — prevents marketplace showing "Install" for already-installed containers Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/container/docker_packages.rs | 2 +- neode-ui/src/views/Marketplace.vue | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/archipelago/src/container/docker_packages.rs b/core/archipelago/src/container/docker_packages.rs index 1952233e..73cd0e54 100644 --- a/core/archipelago/src/container/docker_packages.rs +++ b/core/archipelago/src/container/docker_packages.rs @@ -621,7 +621,7 @@ fn convert_state(container_state: &ContainerState) -> (PackageState, ServiceStat ContainerState::Stopped | ContainerState::Exited => { (PackageState::Stopped, ServiceStatus::Stopped) } - ContainerState::Created => (PackageState::Starting, ServiceStatus::Starting), + ContainerState::Created => (PackageState::Stopped, ServiceStatus::Stopped), ContainerState::Paused => (PackageState::Stopped, ServiceStatus::Stopped), ContainerState::Unknown(_) => (PackageState::Stopped, ServiceStatus::Stopped), } diff --git a/neode-ui/src/views/Marketplace.vue b/neode-ui/src/views/Marketplace.vue index d849884b..a680afd9 100644 --- a/neode-ui/src/views/Marketplace.vue +++ b/neode-ui/src/views/Marketplace.vue @@ -658,11 +658,23 @@ const filteredApps = computed(() => { /** Marketplace app ID -> backend package keys (for "Already Installed" when first-boot/deploy created them) */ const INSTALLED_ALIASES: Record = { - mempool: ['mempool-web'], + mempool: ['mempool-web', 'mempool-api', 'archy-mempool-web', 'archy-mempool-db'], bitcoin: ['bitcoin-knots'], - btcpay: ['btcpay-server'], - immich: ['immich-server', 'immich-app', 'immich_server'], + btcpay: ['btcpay-server', 'archy-btcpay-db', 'archy-nbxplorer'], + immich: ['immich-server', 'immich-app', 'immich_server', 'immich_postgres', 'immich_redis'], nextcloud: ['nextcloud-aio', 'nextcloud-server'], + fedimint: ['fedimint-gateway'], + electrumx: ['electrumx', 'archy-electrs-ui'], + grafana: ['grafana'], + jellyfin: ['jellyfin'], + vaultwarden: ['vaultwarden'], + searxng: ['searxng'], + homeassistant: ['homeassistant'], + photoprism: ['photoprism'], + lnd: ['lnd', 'archy-lnd-ui'], + filebrowser: ['filebrowser'], + tailscale: ['tailscale'], + ollama: ['ollama'], } function isInstalled(appId: string): boolean { if (appId in installedPackages.value) return true