mirror of
https://github.com/hanzoai/desktop.git
synced 2026-10-30 14:58:42 +00:00
* chore(deps): bump Tauri to 2.11 + all deps to latest within-major
Forwards-only, within-major dependency refresh across the JS and Rust
trees. No major-version crossings.
Tauri (Rust + JS kept mutually consistent):
- tauri 2.4 -> 2.11.3, tauri-build 2.4 -> 2.6, plugins -> latest 2.x
(dialog 2.7, fs 2.5, log 2.8, updater 2.10, deep-link 2.4, ...).
- @tauri-apps/api 2.11.1, cli 2.11.3, plugin-* aligned to the same 2.x.
- gen/schemas regenerated for the new plugin ACL permissions.
JS: raised all caret ranges to highest-within-major (radix-ui, tanstack,
framer-motion 12.41, zod 3.25, vite 6.4.3, vitest 4.1.9, typescript 5.9.3,
typescript-eslint 8.62, eslint 9.39, @types/node 20.19.43, ...). pnpm
install + dedupe; package-lock.json regenerated to match (npm-ci CI path).
React pin preserved: react & react-dom stay exactly 19.0.6 (kept equal to
avoid the React reconciler mismatch / blank-app failure mode).
pnpm.overrides added (pnpm ignored the npm-style top-level `overrides`):
- @radix-ui/react-primitive pinned 2.1.4 — 2.1.5+ adds a global
`declare module 'react'` CSSProperties augmentation (`--radix-${string}`)
that breaks rjsf StyleHTMLAttributes typing; the pin keeps every radix
component bump while dropping just the breaking transitive augmentation.
Held at safe boundary (would increase the typecheck error count):
- react-error-boundary held at ~6.0.3 (6.1.x retypes FallbackProps.error
Error -> unknown, breaking the app's typed fallbacks).
Verification (baseline = origin/main):
- frontend `tsc -b`: 34 -> 33 errors (0 new; 1 pre-existing fixed by
@types/node bump). Constraint "must not increase" satisfied.
- `cargo check` (src-tauri): 0 errors / 71 warnings, unchanged from baseline.
* test(e2e): real Tauri E2E harness (tauri-driver + WebdriverIO), decomplected from frontend smoke
The existing e2e-tests/*.spec.ts (Playwright `page.goto(:1420)`) drive the Vite
frontend in Chromium with NO Tauri IPC. That's frontend smoke, not E2E. This
adds the canonical Tauri 2.x E2E: tauri-driver launches the real hanzo-desktop
binary and WebdriverIO drives the native WebKit webview over WebDriver — real
window, real `window.__TAURI_INTERNALS__`, real commands.
Decomplected — one script per intent, no duplication:
- `pnpm test:e2e` -> wdio, real native app (apps/hanzo-desktop/e2e/)
- `pnpm test:smoke` -> playwright frontend smoke (apps/hanzo-desktop/e2e-tests/)
Playwright config + e2e-tests/README relabelled "frontend smoke — NOT Tauri E2E".
Harness (DRY):
- wdio.conf.ts (app root): capability is `tauri:options.application` ->
src-tauri/target/debug/hanzo-desktop, NO browserName (tauri-driver forwards an
unknown browserName to WebKitWebDriver otherwise). Spawns/kills tauri-driver in
beforeSession/afterSession/onComplete, frees stale ports, kills the driver's
native-driver child via its process group. ESM-safe (__dirname from
import.meta.url; the repo is "type":"module"). Headless on DISPLAY=:1.
- tsconfig.e2e.json: own TS project (node + DOM + @wdio/globals) so the specs
typecheck and stay out of the app's tsconfig.app/spec.
- e2e/helpers.ts: shared waitForAppMounted / navigateTo (client-side history,
the app uses BrowserRouter) / restoreSignedInSession (seeds the REAL persisted
zustand stores for a returning cloud user — unlocks ProtectedRoutes with no
IPC/behaviour mocks).
- Specs (minimal but real, no mocks): app-load (window + #root mount +
__TAURI_INTERNALS__ + onboarding), login (Login button gates on terms
checkbox), models (local "Zen Engine" surface + chat composer), chat (real
composer round-trip), mining (mining-page, on-chain/pending balances,
4-tier privacy selector, recent-proofs).
- e2e/README.md: how to run (needs webkit2gtk-driver + tauri-driver + a debug
build), macOS-unsupported caveat.
Deps: @wdio/{cli,local-runner,mocha-framework,spec-reporter,globals,types}
^9.29.0 (devDeps, within-major). pnpm + package-lock both updated.
Verified: config + specs typecheck (tsc -p tsconfig.e2e.json = 0 errors); app
typecheck unchanged at 33 (no e2e leakage); eslint ignores the e2e suites (their
own tsconfigs) — also clears the pre-existing e2e-tests parse error; tauri-driver
+ WebKitWebDriver present, debug binary builds & launches, wdio reaches session
creation. NOT faked green: on this box's bleeding-edge WebKitGTK 2.52.3 the
tauri-driver automation handshake hangs (IncompleteMessage / HEADERS_TIMEOUT) —
an upstream WebKitGTK>=2.46 issue, documented in e2e/README.md with mitigations.
221 lines
7.1 KiB
JSON
221 lines
7.1 KiB
JSON
{
|
|
"name": "@hanzo/source",
|
|
"version": "1.1.38",
|
|
"license": "SEE LICENSE IN LICENSE",
|
|
"files": [
|
|
"LICENSE"
|
|
],
|
|
"scripts": {
|
|
"postinstall": "npx patch-package && ln -sf ../libsodium-sumo/dist/modules-sumo-esm/libsodium-sumo.mjs node_modules/libsodium-wrappers-sumo/dist/modules-sumo-esm/libsodium-sumo.mjs 2>/dev/null || true"
|
|
},
|
|
"dependencies": {
|
|
"@hookform/resolvers": "^5.4.0",
|
|
"@noble/ed25519": "^2.1.0",
|
|
"@noble/hashes": "^1.4.0",
|
|
"@radix-ui/react-accordion": "^1.2.14",
|
|
"@radix-ui/react-alert-dialog": "^1.1.17",
|
|
"@radix-ui/react-avatar": "^1.1.11",
|
|
"@radix-ui/react-checkbox": "^1.3.5",
|
|
"@radix-ui/react-collapsible": "^1.1.14",
|
|
"@radix-ui/react-context-menu": "^2.2.16",
|
|
"@radix-ui/react-dialog": "^1.1.17",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.18",
|
|
"@radix-ui/react-hover-card": "^1.1.17",
|
|
"@radix-ui/react-icons": "^1.3.2",
|
|
"@radix-ui/react-label": "^2.1.10",
|
|
"@radix-ui/react-popover": "^1.1.17",
|
|
"@radix-ui/react-progress": "^1.1.10",
|
|
"@radix-ui/react-radio-group": "^1.3.8",
|
|
"@radix-ui/react-scroll-area": "^1.2.12",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.10",
|
|
"@radix-ui/react-slider": "^1.3.6",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tabs": "^1.1.15",
|
|
"@radix-ui/react-toggle-group": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.10",
|
|
"@rjsf/core": "^5.22.4",
|
|
"@rjsf/utils": "^5.22.4",
|
|
"@rjsf/validator-ajv8": "^5.22.4",
|
|
"@streamdown/code": "^1.1.1",
|
|
"@streamdown/math": "^1.0.2",
|
|
"@streamdown/mermaid": "^1.0.2",
|
|
"@swc/helpers": "~0.5.23",
|
|
"@tailwindcss/vite": "^4.3.1",
|
|
"@tanstack/react-query": "^5.101.1",
|
|
"@tanstack/react-query-devtools": "^5.101.1",
|
|
"@tanstack/react-table": "^8.20.1",
|
|
"@tanstack/react-virtual": "^3.14.3",
|
|
"@tauri-apps/plugin-dialog": "^2.7.1",
|
|
"@tauri-apps/plugin-fs": "^2.5.1",
|
|
"@tauri-apps/plugin-http": "^2.5.9",
|
|
"@tauri-apps/plugin-log": "^2.8.0",
|
|
"@tauri-apps/plugin-notification": "^2.3.1",
|
|
"@tauri-apps/plugin-opener": "^2.5.4",
|
|
"@tauri-apps/plugin-os": "^2.3.1",
|
|
"@tauri-apps/plugin-process": "^2.3.0",
|
|
"@tauri-apps/plugin-shell": "^2.3.5",
|
|
"@uidotdev/usehooks": "^2.4.1",
|
|
"axios": "^1.18.1",
|
|
"boring-avatars": "^1.11.2",
|
|
"class-variance-authority": "^0.7.0",
|
|
"classnames": "^2.5.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"consola": "^3.2.3",
|
|
"cronstrue": "^2.52.0",
|
|
"crx": "^5.0.1",
|
|
"crypto-js": "^4.2.0",
|
|
"date-fns": "^3.6.0",
|
|
"ethers": "^6.17.0",
|
|
"fast-deep-equal": "^3.1.3",
|
|
"filesize": "^10.1.2",
|
|
"framer-motion": "^12.41.0",
|
|
"fs-extra": "^11.3.5",
|
|
"i18next": "^24.2.3",
|
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
"i18next-resources-to-backend": "^1.2.1",
|
|
"immer": "^10.1.1",
|
|
"jsbi": "^4.3.0",
|
|
"just-diff": "^6.0.2",
|
|
"libsodium-wrappers-sumo": "^0.7.13",
|
|
"lucide-react": "^0.511.0",
|
|
"mermaid": "^11.15.0",
|
|
"node-forge": ">=1.0.0",
|
|
"ollama": "^0.5.6",
|
|
"primereact": "^10.9.8",
|
|
"prism-react-editor": "^2.0.0",
|
|
"pyodide": "^0.26.2",
|
|
"react": "19.0.6",
|
|
"react-dom": "19.0.6",
|
|
"react-dropzone": "^14.3.8",
|
|
"react-error-boundary": "~6.0.3",
|
|
"react-hook-form": "^7.80.0",
|
|
"react-hotkeys-hook": "^4.5.0",
|
|
"react-i18next": "^15.5.2",
|
|
"react-intersection-observer": "^9.16.0",
|
|
"react-markdown": "^9.0.1",
|
|
"react-plotly.js": "^2.6.0",
|
|
"react-qrcode-logo": "^3.0.0",
|
|
"react-resizable-panels": "^3.0.2",
|
|
"react-router": "^7.18.0",
|
|
"react-syntax-highlighter": "^15.6.1",
|
|
"react-use-websocket": "^4.13.0",
|
|
"react-virtualized-auto-sizer": "^1.0.26",
|
|
"recharts": "^2.15.3",
|
|
"rehype-katex": "^7.0.0",
|
|
"rehype-raw": "^7.0.0",
|
|
"rehype-rewrite": "^4.0.2",
|
|
"remark-gfm": "^4.0.0",
|
|
"remark-math": "^6.0.0",
|
|
"rxjs": "^7.8.1",
|
|
"sonner": "^2.0.3",
|
|
"sql.js": "^1.14.1",
|
|
"streamdown": "^1.6.10",
|
|
"svg-pan-zoom": "^3.6.2",
|
|
"tailwind-merge": "^2.3.0",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"tiptap-markdown": "^0.8.10",
|
|
"ts-deepmerge": "^7.0.2",
|
|
"tslib": "^2.6.2",
|
|
"typescript-eslint": "^8.33.0",
|
|
"unified": "^11.0.5",
|
|
"unist-util-visit-children": "^3.0.0",
|
|
"uuid": "^9.0.1",
|
|
"vaul": "^1.1.2",
|
|
"zod": "^3.25.76",
|
|
"zustand": "^5.0.14"
|
|
},
|
|
"devDependencies": {
|
|
"@lobehub/i18n-cli": "^1.27.0",
|
|
"@peculiar/webcrypto": "^1.7.1",
|
|
"@playwright/test": "^1.61.1",
|
|
"@swc-node/register": "~1.9.1",
|
|
"@swc/cli": "^0.5.2",
|
|
"@swc/core": "^1.13.3",
|
|
"@swc/helpers": "~0.5.23",
|
|
"@tailwindcss/postcss": "^4.3.1",
|
|
"@tailwindcss/typography": "^0.5.20",
|
|
"@tauri-apps/api": "^2.11.1",
|
|
"@tauri-apps/cli": "^2.11.3",
|
|
"@tauri-apps/plugin-updater": "^2.10.1",
|
|
"@testing-library/dom": "^10.4.0",
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/fs-extra": "^11.0.4",
|
|
"@types/libsodium-wrappers-sumo": "^0.7.8",
|
|
"@types/node": "20.19.43",
|
|
"@types/react": "19.1.17",
|
|
"@types/react-dom": "19.1.11",
|
|
"@types/react-plotly.js": "^2.6.4",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/sql.js": "^1.4.11",
|
|
"@typescript-eslint/eslint-plugin": "8.62.0",
|
|
"@typescript-eslint/parser": "8.62.0",
|
|
"@vitejs/plugin-react": "~4.7.0",
|
|
"@vitest/coverage-v8": "^4.1.9",
|
|
"@vitest/eslint-plugin": "^1.6.20",
|
|
"@vitest/ui": "^4.1.9",
|
|
"@wdio/cli": "^9.29.0",
|
|
"@wdio/globals": "^9.29.0",
|
|
"@wdio/local-runner": "^9.29.0",
|
|
"@wdio/mocha-framework": "^9.29.0",
|
|
"@wdio/spec-reporter": "^9.29.0",
|
|
"@wdio/types": "^9.29.0",
|
|
"cheerio": "^1.2.0",
|
|
"curve25519-js": "^0.0.4",
|
|
"cypress": "14.5.4",
|
|
"eslint": "9.39.4",
|
|
"eslint-config-prettier": "10.1.8",
|
|
"eslint-plugin-cypress": "^3.6.0",
|
|
"eslint-plugin-import-x": "^4.17.0",
|
|
"eslint-plugin-jsx-a11y": "6.10.2",
|
|
"eslint-plugin-playwright": "^1.8.3",
|
|
"eslint-plugin-react": "^7.37.5",
|
|
"eslint-plugin-react-hooks": "5.2.0",
|
|
"eslint-plugin-testing-library": "^7.16.2",
|
|
"jsdom": "^24.1.3",
|
|
"lodash": "^4.17.21",
|
|
"patch-package": "^8.0.0",
|
|
"postcss": "^8.5.15",
|
|
"prettier": "^3.8.4",
|
|
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
"tailwindcss": "^4.3.1",
|
|
"tar": "^7.5.16",
|
|
"ts-node": "10.9.2",
|
|
"typescript": "^5.9.3",
|
|
"typescript-eslint": "^8.62.0",
|
|
"vite": "^6.4.3",
|
|
"vite-plugin-dts": "4.5.4",
|
|
"vite-plugin-top-level-await": "^1.6.0",
|
|
"vite-plugin-wasm": "^3.6.0",
|
|
"vite-tsconfig-paths": "^5.1.4",
|
|
"vitest": "^4.1.9",
|
|
"zip-lib": "^1.4.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.x.x",
|
|
"npm": "10.x.x"
|
|
},
|
|
"overrides": {
|
|
"react-reconciler": "^0.33.0",
|
|
"ink": "^6.0.0",
|
|
"@radix-ui/react-primitive": "2.1.4",
|
|
"react-syntax-highlighter": {
|
|
"refractor": {
|
|
"prismjs": "1.30.0"
|
|
}
|
|
}
|
|
},
|
|
"pnpm": {
|
|
"overrides": {
|
|
"react-reconciler": "^0.33.0",
|
|
"ink": "^6.0.0",
|
|
"@radix-ui/react-primitive": "2.1.4",
|
|
"refractor>prismjs": "1.30.0"
|
|
}
|
|
}
|
|
}
|