From 73490d331179cb640828b8625abb75208cd7ae5f Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 21 Aug 2026 17:50:08 +0200 Subject: feat: D.6 first-run wizard — detect, start, link, group, gek-init, pair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Desktop client guides new users through the full onboarding sequence without a terminal: detect local node → start daemon (systemd with direct-start fallback for dev) → link node key to hub → create group → attach directories → gek-init → operator pair. - node:detect returns configured field to distinguish missing vs stopped - node:start tries systemctl first, checks is-active, falls back to spawning the binary directly when the unit crashes (dev mode) - probeNode() extracts the shared config→token→fetch pattern - SetupWelcome on empty HomePage links to /create-group - CreateGroupWizard step 0 handles node detection and start - platform.js exposes node.installed() and node.start() - 12 setup.* i18n keys added to all 10 locales - Integration test for node:start fallback logic Co-Authored-By: Claude Opus 4.6 --- packages/meshbay-client/src/preload.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'packages/meshbay-client/src/preload.js') diff --git a/packages/meshbay-client/src/preload.js b/packages/meshbay-client/src/preload.js index e9fd375..c8553a5 100644 --- a/packages/meshbay-client/src/preload.js +++ b/packages/meshbay-client/src/preload.js @@ -86,6 +86,8 @@ contextBridge.exposeInMainWorld('meshbay', { // pattern as hub:fetch. node: { detect: () => ipcRenderer.invoke('node:detect'), + installed: () => ipcRenderer.invoke('node:installed'), + start: () => ipcRenderer.invoke('node:start'), call: (method, path, body) => ipcRenderer.invoke('node:call', method, path, body), pairingCode: () => ipcRenderer.invoke('node:pairing-code'), setPairingCode: (code) => ipcRenderer.invoke('node:set-pairing-code', code), -- cgit v1.2.3