aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/platform.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-21 17:50:08 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-21 17:50:08 +0200
commit73490d331179cb640828b8625abb75208cd7ae5f (patch)
tree5782835ae06d3f84c4a9c11c8babcec0d8126157 /packages/meshbay-hub/src/meshbay_hub/static/platform.js
parent8730281d739d9ed1d6f2d366772582eea8ba0294 (diff)
downloadmeshbay-73490d331179cb640828b8625abb75208cd7ae5f.tar.gz
feat: D.6 first-run wizard — detect, start, link, group, gek-init, pair
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 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/platform.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/platform.js7
1 files changed, 7 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/platform.js b/packages/meshbay-hub/src/meshbay_hub/static/platform.js
index d400b4e..eeffd49 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/platform.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/platform.js
@@ -224,6 +224,13 @@ export const node = {
async detect() {
return bridge && bridge.node ? bridge.node.detect() : { detected: false };
},
+ async installed() {
+ return bridge && bridge.node ? bridge.node.installed() : { installed: false };
+ },
+ async start() {
+ if (!bridge || !bridge.node) throw new Error('Node bridge not available');
+ return bridge.node.start();
+ },
async call(method, path, body) {
if (!bridge || !bridge.node) throw new Error('Node bridge not available');
return bridge.node.call(method, path, body);