project-nomad/admin/app/services
Ken Eucker 8c91436aa4 fix(easy-setup): let the wizard run offline instead of 500ing and blocking Next
An air-gapped host installed from an artifact bundle could not use Easy
Setup at all, which defeated the point: the bundle had already put the app
images on disk.

Two independent faults.

The Wikipedia catalog was the only one of the page's four catalogs that
threw on a failed fetch rather than degrading, so GET /api/zim/wikipedia
returned 500 offline and the UI showed "An internal error occurred". It now
reads the manifest through CollectionManifestService like the curated
categories, maps and creator packs already do — refresh when reachable,
cached copy when not, empty list when neither. The second, laxer schema for
the same remote file is deleted; having two is what let the offline path
diverge in the first place.

Navigation and completion were gated on a blanket !isOnline check. Stepping
through the wizard needs nothing from the network, and installing an app
whose image is already in the local Docker daemon works air-gapped because
the install path skips the registry pull. The gate is now per-selection:

- The page reports which services have a local image, so offline the
  capability cards offer exactly those and badge the rest "Needs internet"
  rather than queuing an install that would fail mid-pull.
- Map regions, content tiers, creator packs, AI models and Wikipedia are
  genuinely remote, so those steps stay unselectable — but they now say why
  instead of leaving dead cards.
- Complete Setup is blocked offline only when a selection actually needs a
  download, and names which ones.

The offline decision logic is a pure module with unit tests.

Two gaps found and documented rather than changed here: an AMD host still
can't install Ollama offline (the install swaps to ollama/ollama:rocm, which
--with-apps doesn't bundle), and remote Ollama can't be configured from the
wizard offline since its checkbox lives behind the AI capability card.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 19:40:37 -07:00
..
app_auto_update_service.ts feat(supply-depot): opt-in automatic updates for installed apps 2026-06-23 04:46:52 +00:00
auto_update_service.ts feat(supply-depot): opt-in automatic updates for installed apps 2026-06-23 04:46:52 +00:00
benchmark_service.ts fix(benchmark): don't submit unresolved PCI ids as the GPU model (#1165) 2026-08-04 03:39:58 +00:00
benchmark_telemetry.ts feat(benchmark): end-of-run score reveal + NVIDIA GPU-util overlay (#1087) 2026-08-04 03:37:40 +00:00
chat_service.ts fix(chat): prefer selected model for suggestions, fall back to smallest 2026-06-23 04:47:00 +00:00
collection_manifest_service.ts feat: support gated downloads for self-hosted curated content (#1172) 2026-08-04 03:39:55 +00:00
collection_update_service.ts fix(downloads): let interrupted content downloads resume (#1202) 2026-08-04 03:40:01 +00:00
condition_service.ts Add offline FDA drug reference (labels, interaction view, conditions, remedies) (#1040) 2026-08-04 03:38:33 +00:00
container_registry_service.ts fix(updates): resolve relative registry pagination URL so tag listing doesn't crash (#945) 2026-06-23 04:46:59 +00:00
content_auto_update_service.ts Add offline FDA drug reference (labels, interaction view, conditions, remedies) (#1040) 2026-08-04 03:38:33 +00:00
countries_service.ts feat(Maps): regional map downloads via go-pmtiles extract (#780) 2026-05-20 10:16:00 -07:00
creator_pack_service.ts fix(downloads): let interrupted content downloads resume (#1202) 2026-08-04 03:40:01 +00:00
custom_app_guard.ts feat: supply depot 2026-06-23 04:46:45 +00:00
docker_service.ts fix(easy-setup): let the wizard run offline instead of 500ing and blocking Next 2026-08-15 19:40:37 -07:00
docs_service.ts docs: add an in-app Drug Reference guide (#1161) 2026-08-04 03:39:58 +00:00
download_service.ts fix(downloads): don't 500 the jobs endpoint on an orphaned BullMQ job (#1191) 2026-08-04 03:39:56 +00:00
drug_reference_service.ts Add offline FDA drug reference (labels, interaction view, conditions, remedies) (#1040) 2026-08-04 03:38:33 +00:00
kiwix_catalog_service.ts feat(content): opt-in automatic updates for installed ZIM & map content 2026-06-23 04:47:01 +00:00
kiwix_library_service.ts fix(kiwix): self-heal a missing or corrupt library XML on startup 2026-06-23 04:46:56 +00:00
map_service.ts fix(maps): warn when world basemap missing instead of silent grey map (#1104) 2026-08-04 03:38:29 +00:00
nomad_md_service.ts feat(AI): nomad.md for custom instructions (#1127) 2026-08-04 03:38:33 +00:00
ollama_service.ts feat(AI): per-model thinking toggle with global default (off) (#1079) 2026-08-04 03:38:29 +00:00
queue_service.ts fix(queue): share one ioredis connection across BullMQ queues and workers (#1009) 2026-06-23 04:47:08 +00:00
rag_service.ts fix(kb): keep the collection when a file is indexed after assignment (#1200) 2026-08-04 03:40:01 +00:00
system_service.ts feat(debug-info): add storage, docker, GPU health, and auto-update diagnostics (#1102) 2026-08-04 03:37:36 +00:00
system_update_service.ts feat(system): add opt-in automatic updates for the core NOMAD app 2026-06-23 04:46:51 +00:00
zim_extraction_service.ts chore(KB): filter non-content sections + render tables in ZIM extraction (#1044) 2026-08-04 03:37:30 +00:00
zim_service.ts fix(easy-setup): let the wizard run offline instead of 500ing and blocking Next 2026-08-15 19:40:37 -07:00