Prebuilt runtime ships only dashboard/dist (no package.json) so npm run
preview ENOENT-crash-loops (254). console is a local-only static backend on
127.0.0.1:17000 (dashboard is a routerless SPA); serve it with python3
-m http.server on both Linux (console.service) and macOS (console.plist) —
no second caddy (avoids clashing with the system caddy on :80; console is
local-only and not proxied by default). Gate the apt caddy install on
caddy_enabled (true on public-IP Linux VPS for the bridge ingress; macOS
installs no caddy).
Verified: debian13 + ubuntu26.04 console.service active serving 17000=200;
macOS python3 serves the same dist locally.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The online runtime download used releases/latest/download, which GitHub
resolves to whichever release holds the 'Latest' flag. The console repo also
publishes offline-ai-workspace-* build releases that take that flag and carry
no console runtime asset -> HTTP 404 on the online/Debian path. Point at the
stable latest-runtime release (published by the console-runtime workflow) and
add a bounded download retry. The env-provided archive path still wins via the
existing when-guard, so offline/bundled installs are unaffected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* xworkspace-portal.service: use dashboard on port 17000
- Change portal service from python http.server:7000 to npm dev server:17000
- Update chrome app launcher to use port 17000
- Add dashboard source sync and npm install tasks
- Update portal URL and port variables
* production: build dashboard on target with npm run build, serve with npm run preview
- Add xworkspace_console_dashboard_local_src variable for local dashboard path
- Sync dashboard source from controller to target via rsync
- Build dashboard with npm install && npm run build on target
- Serve production build with npm run preview instead of dev
- Copy dist/ and package.json to portal directory for preview server
---------
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>