- Install @tauri-apps/plugin-updater + plugin-process (npm + cargo) - Configure tauri.conf.json: updater endpoint pointing to GitHub Releases, signing pubkey, createUpdaterArtifacts enabled - Register updater + process plugins in Rust (desktop-only, #[cfg(desktop)]) - Add updater:default + process:default capabilities - Add useUpdater hook: checks for updates 3s after startup, shows native confirm dialog, downloads+installs+relaunches on accept - Silently catches errors so update failures never block the app - Add comprehensive tests for the useUpdater hook (5 test cases) Product decision: Using window.confirm() for the update dialog rather than a custom React modal. This keeps the implementation simple and the native dialog is appropriate for a system-level action like app restart. Can be upgraded to a custom UI later if desired. Private key generated at ~/.tauri/laputa.key — NOT committed. For CI: set TAURI_SIGNING_PRIVATE_KEY + TAURI_SIGNING_PRIVATE_KEY_PASSWORD as GitHub Secrets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.2 KiB
JSON
74 lines
2.2 KiB
JSON
{
|
|
"name": "laputa-app",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"lint": "eslint .",
|
|
"preview": "vite preview",
|
|
"tauri": "tauri",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:e2e": "playwright test",
|
|
"test:coverage": "vitest run --coverage"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
"@blocknote/core": "^0.46.2",
|
|
"@blocknote/mantine": "^0.46.2",
|
|
"@blocknote/react": "^0.46.2",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@mantine/core": "^8.3.14",
|
|
"@phosphor-icons/react": "^2.1.10",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.8",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@tailwindcss/vite": "^4.1.18",
|
|
"@tauri-apps/api": "^2.10.1",
|
|
"@tauri-apps/plugin-process": "^2.3.1",
|
|
"@tauri-apps/plugin-updater": "^2.10.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"katex": "^0.16.28",
|
|
"lowlight": "^3.3.0",
|
|
"lucide-react": "^0.564.0",
|
|
"radix-ui": "^1.4.3",
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"react-virtuoso": "^4.18.1",
|
|
"tailwind-merge": "^3.4.1",
|
|
"tailwindcss": "^4.1.18",
|
|
"tw-animate-css": "^1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.1",
|
|
"@playwright/test": "^1.58.2",
|
|
"@tauri-apps/cli": "^2.10.0",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/node": "^24.10.1",
|
|
"@types/react": "^19.2.7",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^5.1.1",
|
|
"@vitest/coverage-v8": "^4.0.18",
|
|
"eslint": "^9.39.1",
|
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
"eslint-plugin-react-refresh": "^0.4.24",
|
|
"globals": "^16.5.0",
|
|
"gray-matter": "^4.0.3",
|
|
"jsdom": "^28.0.0",
|
|
"typescript": "~5.9.3",
|
|
"typescript-eslint": "^8.48.0",
|
|
"vite": "^7.3.1",
|
|
"vitest": "^4.0.18"
|
|
}
|
|
}
|