From 4675c0cb21ccefd94fd457eed1466d2bd0d38f27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:01:55 +0000 Subject: [PATCH 1/2] Initial plan From 547ebdb000a0d3da400d57387644542a6598d02f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:05:21 +0000 Subject: [PATCH 2/2] =?UTF-8?q?Remove=20Credentials=20step=20from=20onboar?= =?UTF-8?q?ding=20wizard=20(5=20=E2=86=92=204=20steps)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/9614a2f0-7aa6-486c-a8a3-f3a599cbbad5 Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com> --- app/sovran_systemsos_web/static/onboarding.js | 165 +----------------- onboarding.html | 30 +--- 2 files changed, 11 insertions(+), 184 deletions(-) diff --git a/app/sovran_systemsos_web/static/onboarding.js b/app/sovran_systemsos_web/static/onboarding.js index b4b5b42..3b04de9 100644 --- a/app/sovran_systemsos_web/static/onboarding.js +++ b/app/sovran_systemsos_web/static/onboarding.js @@ -1,10 +1,10 @@ /* Sovran_SystemsOS Hub — First-Boot Onboarding Wizard - Drives the 5-step post-install setup flow. */ + Drives the 4-step post-install setup flow. */ "use strict"; // ── Constants ───────────────────────────────────────────────────── -const TOTAL_STEPS = 5; +const TOTAL_STEPS = 4; // Domains that may need configuration, with service unit mapping for enabled check const DOMAIN_DEFS = [ @@ -81,7 +81,6 @@ function showStep(step) { // Lazy-load step content if (step === 2) loadStep2(); if (step === 3) loadStep3(); - if (step === 4) loadStep4(); } // ── Step 1: Welcome ─────────────────────────────────────────────── @@ -302,154 +301,10 @@ async function loadStep3() { body.innerHTML = html; } -// ── Step 4: Credentials ─────────────────────────────────────────── - -async function loadStep4() { - var body = document.getElementById("step-4-body"); - if (!body) return; - body.innerHTML = '
Loading credentials…
'; - - if (!_servicesData) { - try { - _servicesData = await apiFetch("/api/services"); - } catch (err) { - body.innerHTML = '⚠ Could not load services: ' + escHtml(err.message) + '
'; - return; - } - } - - // Find services with credentials that are enabled - var credsServices = (_servicesData || []).filter(function(svc) { - return svc.has_credentials && svc.enabled; - }); - - if (credsServices.length === 0) { - body.innerHTML = 'No credentials found for your current configuration.
'; - return; - } - - body.innerHTML = 'Loading credentials…
'; - - // Fetch all credentials in parallel - var fetches = credsServices.map(function(svc) { - return apiFetch("/api/credentials/" + encodeURIComponent(svc.unit)) - .then(function(data) { return { svc: svc, data: data, error: null }; }) - .catch(function(err) { return { svc: svc, data: null, error: err.message }; }); - }); - var allCreds = await Promise.all(fetches); - - // Group by category - var CATEGORY_ORDER_LOCAL = [ - ["infrastructure", "🔧 Infrastructure"], - ["bitcoin-base", "₿ Bitcoin Base"], - ["bitcoin-apps", "₿ Bitcoin Apps"], - ["communication", "💬 Communication"], - ["apps", "📦 Self-Hosted Apps"], - ["nostr", "📡 Nostr"], - ]; - - var grouped = {}; - allCreds.forEach(function(item) { - var cat = item.svc.category || "other"; - if (!grouped[cat]) grouped[cat] = []; - grouped[cat].push(item); - }); - - var html = '⚠ ' + escHtml(item.error) + '
'; - } else if (item.data && item.data.credentials) { - item.data.credentials.forEach(function(cred) { - html += '⚠ ' + escHtml(item.error) + '
'; - } else if (item.data && item.data.credentials) { - item.data.credentials.forEach(function(cred) { - if (cred.value) { - html += '