create-release.sh builds the frontend at step 4 and validates the curated changelog at step 5, then requires the freshly built bundle to contain the new version. The version reaches the bundle only through the hand-written What's New list, so on a fresh release that check can only pass if the changelog and What's New entries are written BEFORE the script runs. Writing them after is what aborted the first attempt. Leads with the downgrade bug, since that is the one users saw: an Update button offering the release withdrawn for an actively exploited 2FA bypass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
73 lines
2.6 KiB
JSON
73 lines
2.6 KiB
JSON
{
|
|
"name": "neode-ui",
|
|
"private": true,
|
|
"version": "1.7.126-alpha",
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "./start-dev.sh",
|
|
"stop": "./stop-dev.sh",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:mock-parity": "node scripts/mock-rpc-parity.mjs",
|
|
"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": {
|
|
"@scure/bip39": "^2.2.0",
|
|
"@types/dompurify": "^3.0.5",
|
|
"@vue-leaflet/vue-leaflet": "^0.10.1",
|
|
"buffer": "^6.0.3",
|
|
"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",
|
|
"qr-scanner": "^1.4.2",
|
|
"qrcode": "^1.5.4",
|
|
"qrloop": "^1.4.1",
|
|
"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"
|
|
}
|
|
}
|