v1.7.38 shipped with an OTA bug: the tar-extracted staging dir inherited 700 perms and nginx (www-data) returned 500/403 on every request after the swap. .116 hit this on rollout; had to chmod by hand to recover. - update.rs: after extraction, explicitly chmod 755 dirs + 644 files on the new staging dir before the mv into place, so nginx can stat/serve them. - main.rs: self-heal on startup — if /opt/archipelago/web-ui is not world-readable, run `sudo chmod -R u=rwX,go=rX` to repair. This is what rescues nodes upgrading from v1.7.37/v1.7.38, since their extractor (running on the old binary) doesn't have the chmod fix yet — the new binary's first boot fixes the mess before nginx serves a single request. Everything v1.7.38 shipped is still in this release: - auth.rs auto-heals is_onboarding_complete() from setup_complete + password_hash so nodes don't bounce back to /onboarding/intro after browser clear / reboot / update - useOnboarding tri-state: backend-unreachable no longer defaults to intro - login sounds gated by isFirstInstallPhase() — silent after onboarding, typing sounds unaffected - FIPS app / Nostr Relay / Nostr VPN / Routstr / Penpot removed from catalog + frontend + Rust + docker + icons; 15 image versions deleted from tx1138, .168, gitea-local - AIUI baked into release tarball via demo/aiui/ - prebuild hook syncs app-catalog/catalog.json → public/catalog.json Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
68 lines
2.4 KiB
JSON
68 lines
2.4 KiB
JSON
{
|
|
"name": "neode-ui",
|
|
"private": true,
|
|
"version": "1.7.39-alpha",
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "./start-dev.sh",
|
|
"stop": "./stop-dev.sh",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"dev": "vite",
|
|
"dev:mock": "concurrently --raw \"node mock-backend.js\" \"VITE_AIUI_URL=http://localhost:5173 vite\" \"cd ../../AIUI && perl -MPOSIX -e 'POSIX::setsid(); exec @ARGV' -- pnpm dev 2>/dev/null || echo '[AIUI] Not found at ../../AIUI — chat will show placeholder'\"",
|
|
"dev:boot": "VITE_DEV_MODE=boot concurrently --raw \"VITE_DEV_MODE=boot node mock-backend.js\" \"VITE_DEV_MODE=boot vite\"",
|
|
"dev:real": "echo 'Start backend: cd ../core && cargo run --release' && vite",
|
|
"backend:mock": "node mock-backend.js",
|
|
"backend:real": "cd ../core && cargo run --release",
|
|
"prebuild": "cp ../app-catalog/catalog.json public/catalog.json",
|
|
"build": "vue-tsc -b && vite build",
|
|
"build:docker": "vite build",
|
|
"build:production": "NODE_ENV=production vue-tsc -b && vite build --mode production",
|
|
"preview": "vite preview",
|
|
"type-check": "vue-tsc --noEmit",
|
|
"generate-pwa-icons": "pwa-assets-generator --preset minimal-2023 public/assets/icon/favico-black.svg && cp public/assets/icon/favicon.ico public/favicon.ico",
|
|
"generate-welcome-speech": "node scripts/generate-welcome-speech.js"
|
|
},
|
|
"dependencies": {
|
|
"@types/dompurify": "^3.0.5",
|
|
"@vue-leaflet/vue-leaflet": "^0.10.1",
|
|
"d3": "^7.9.0",
|
|
"dompurify": "^3.3.3",
|
|
"fast-json-patch": "^3.1.1",
|
|
"fuse.js": "^7.1.0",
|
|
"leaflet": "^1.9.4",
|
|
"pinia": "^3.0.4",
|
|
"qrcode": "^1.5.4",
|
|
"vue": "^3.5.24",
|
|
"vue-i18n": "^11.3.0",
|
|
"vue-router": "^4.6.3"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.58.2",
|
|
"@types/d3": "^7.4.3",
|
|
"@types/leaflet": "^1.9.21",
|
|
"@types/node": "^24.10.0",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@vite-pwa/assets-generator": "^1.0.2",
|
|
"@vitejs/plugin-vue": "^6.0.1",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"@vue/test-utils": "^2.4.6",
|
|
"@vue/tsconfig": "^0.8.1",
|
|
"autoprefixer": "^10.4.22",
|
|
"concurrently": "^9.1.2",
|
|
"cookie-parser": "^1.4.7",
|
|
"cors": "^2.8.5",
|
|
"dockerode": "^4.0.9",
|
|
"express": "^4.21.2",
|
|
"jsdom": "^25.0.1",
|
|
"postcss": "^8.5.6",
|
|
"tailwindcss": "^3.4.18",
|
|
"typescript": "~5.9.3",
|
|
"vite": "^7.2.2",
|
|
"vite-plugin-pwa": "^1.2.0",
|
|
"vitest": "^3.1.1",
|
|
"vue-tsc": "^3.1.3",
|
|
"ws": "^8.18.0"
|
|
}
|
|
}
|