* fix(android): use app filesDir for persistence and SAF log export Honor devices reject writes under /data/local/tmp, which caused PreferencesStore to fall back to openless_prefs_fallback.json and settings saves to fail. Initialize JNI storage roots before Coordinator and file logging, route logs to files/logs/openless.log, and export via ContentResolver for SAF content:// URIs. * fix(android): guard StylePack empty asset_root and Android-only coord logs Reject persisting style pack icons when asset_root is empty to avoid writing under cwd; no-op cleanup on empty root. Limit Coordinator persistence degrade log suffix to Android only. Add unit test. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
2.9 KiB
JSON
73 lines
2.9 KiB
JSON
{
|
|
"name": "openless-app",
|
|
"private": true,
|
|
"version": "1.3.15-Beta.2",
|
|
"type": "module",
|
|
"scripts": {
|
|
"pretest": "npm run build",
|
|
"test": "node scripts/frontend-test-runner.mjs",
|
|
"dev": "vite",
|
|
"prebuild": "node scripts/android-ipc-import-boundary.test.mjs",
|
|
"build": "tsc && vite build",
|
|
"preview": "vite preview",
|
|
"tauri": "tauri",
|
|
"tauri:android:init": "tauri android init",
|
|
"tauri:android:dev": "tauri android dev",
|
|
"tauri:android:build": "tauri android build --apk --debug --target aarch64 armv7 i686 x86_64 --split-per-abi",
|
|
"tauri:android:build:debug": "tauri android build --apk --debug --target aarch64 armv7 i686 x86_64 --split-per-abi",
|
|
"tauri:android:build:release": "tauri android build --apk --target aarch64 armv7 i686 x86_64 --split-per-abi",
|
|
"merge:android-v1-manifest": "node scripts/merge-android-v1-manifest.mjs",
|
|
"merge:android-overlay-manifest": "node scripts/merge-android-overlay-manifest.mjs",
|
|
"copy:android-scaffolding": "node scripts/copy-android-scaffolding.mjs",
|
|
"check:macos-capsule-spaces": "node scripts/macos-capsule-spaces-contract.test.mjs",
|
|
"check:macos-speech-usage-description": "node scripts/macos-speech-usage-description-contract.test.mjs",
|
|
"check:hotkey-injection": "node scripts/check-hotkey-injection.mjs",
|
|
"check:hotkey-side-modifiers": "tsx src/lib/hotkeySideModifiers.test.ts",
|
|
"check:windows-startup-lifecycle": "node scripts/windows-startup-lifecycle-contract.test.mjs",
|
|
"check:windows-ui-config": "node scripts/windows-ui-config.test.mjs",
|
|
"check:pin-persistence-security": "node scripts/pin-persistence-security-contract.test.mjs",
|
|
"check:android-updater-pubkey": "node scripts/check-android-updater-pubkey.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@base-ui/react": "^1.6.0",
|
|
"@formkit/auto-animate": "^0.9.0",
|
|
"@shadcn/react": "^0.2.0",
|
|
"@tailwindcss/vite": "^4.3.2",
|
|
"@tauri-apps/api": "^2.1.1",
|
|
"@tauri-apps/plugin-autostart": "^2.5.1",
|
|
"@tauri-apps/plugin-dialog": "^2.7.2",
|
|
"@tauri-apps/plugin-shell": "^2.3.5",
|
|
"@tauri-apps/plugin-updater": "^2.10.1",
|
|
"@types/dompurify": "^3.0.5",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"dompurify": "^3.4.8",
|
|
"framer-motion": "^12.39.0",
|
|
"i18next": "^26.0.8",
|
|
"lucide-react": "^1.23.0",
|
|
"marked": "^11.2.0",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-i18next": "^17.0.6",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tailwindcss": "^4.3.2"
|
|
},
|
|
"devDependencies": {
|
|
"@tauri-apps/cli": "^2.1.0",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.3",
|
|
"shadcn": "^4.13.0",
|
|
"tsx": "4.23.1",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5.6.3",
|
|
"vite": "^6.4.3"
|
|
},
|
|
"overrides": {
|
|
"@shadcn/react": {
|
|
"react": "$react",
|
|
"@types/react": "$@types/react"
|
|
}
|
|
}
|
|
}
|