Files
desktop/package.json
zeekayandGitHub 2c4744a503 chore: bump Tauri 2.11 + deps (within-major) + real Tauri E2E harness (#22)
* 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.
2026-06-25 15:21:57 -07:00

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"
}
}
}