{ "name": "neode-ui", "private": true, "version": "1.1.0", "type": "module", "scripts": { "start": "./start-dev.sh", "stop": "./stop-dev.sh", "test": "vitest run", "test:watch": "vitest", "dev": "vite", "dev:mock": "concurrently \"node mock-backend.js\" \"VITE_AIUI_URL=http://localhost:5173 vite\" \"cd ../../AIUI && pnpm dev 2>/dev/null || echo '[AIUI] Not found at ../../AIUI — chat will show placeholder'\"", "dev:real": "echo 'Start backend: cd ../core && cargo run --release' && vite", "backend:mock": "node mock-backend.js", "backend:real": "cd ../core && cargo run --release", "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", "prebuild": "cp ../../loop-start.mp3 public/assets/audio/ 2>/dev/null || true", "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": { "d3": "^7.9.0", "fast-json-patch": "^3.1.1", "fuse.js": "^7.1.0", "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/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" } }