* fix(app): debounce reconnect status toast Keep reconnect transport immediate while delaying the visible status toast so brief outages stay quiet. Scope the toast to the active retained panel, keep its copy and status dot consistent across locales, and add a manual real relay deployment journey that verifies streaming recovery without user action. * fix(app): isolate manual relay deployment check Keep the deployment journey out of the provider-wide real test project so it runs only when its local relay prerequisites are explicitly requested. Also keep the relay teardown active when packaged daemon startup or later cleanup fails. * fix(app): preserve reconnect toast across tabs Keep reconnect presentation timing at the host level so switching between retained panels does not restart the debounce or flash the toast. Add a browser regression covering a visible outage across retained tab switches. * fix(app): anchor reconnect debounce to host status Record host connection status transitions independently of mounted agent panels and preserve the outage start across reconnecting states. Use that host-level timestamp when a visible agent panel appears, with runtime coverage for the transition lifecycle. * fix(app): reset reconnect toast state per outage * test(app): build relay journey prerequisites
150 lines
6.4 KiB
JSON
150 lines
6.4 KiB
JSON
{
|
|
"name": "@getpaseo/app",
|
|
"version": "0.3.0-beta.2",
|
|
"private": true,
|
|
"main": "index.ts",
|
|
"scripts": {
|
|
"start": "npm run start:expo",
|
|
"start:expo": "cross-env APP_VARIANT=development expo start",
|
|
"reset-project": "node ./scripts/reset-project.js",
|
|
"eas-build-post-install": "npm --prefix ../.. run build:app-deps && npm run build:terminal-webview",
|
|
"android": "npm run android:development",
|
|
"android:development": "npm --prefix ../.. run build:client && cross-env APP_VARIANT=development expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=development expo run:android --variant=debug",
|
|
"android:production": "npm --prefix ../.. run build:client && cross-env APP_VARIANT=production expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=production expo run:android --variant=release",
|
|
"android:release": "npm run android:production",
|
|
"android:clear": "node -e \"require('node:fs').rmSync('android', { recursive: true, force: true })\"",
|
|
"ios": "npm --prefix ../.. run build:client && expo run:ios",
|
|
"ios:release": "npm --prefix ../.. run build:client && expo run:ios --configuration Release",
|
|
"web": "npm --prefix ../.. run build:client && concurrently --kill-others --names protocol,client,expo --prefix-colors yellow,blue,magenta \"npm --prefix ../.. run watch:protocol\" \"npm --prefix ../.. run watch:client\" \"npm run web:expo\"",
|
|
"web:expo": "expo start --web",
|
|
"lint": "expo lint",
|
|
"typecheck": "tsgo --noEmit",
|
|
"test": "vitest run",
|
|
"test:browser": "vitest run --project browser",
|
|
"test:e2e": "playwright test --project=browser",
|
|
"test:e2e:real": "cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=real-provider",
|
|
"test:e2e:relay-deployment": "npm --prefix ../.. run build:server && npm --prefix ../.. run build:daemon-web-ui && cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=relay-deployment e2e/browser/relay-deployment-reconnect.real.spec.ts",
|
|
"test:e2e:ui": "playwright test --ui",
|
|
"build": "npm run build:web",
|
|
"build:web": "npm --prefix ../.. run build:app-deps && expo export --platform web",
|
|
"profile:workspace-tabs": "node ./scripts/profile-workspace-tabs.mjs",
|
|
"deploy:web": "npm run build:web && wrangler pages deploy dist --project-name paseo-app --branch main",
|
|
"build:terminal-webview": "node ./scripts/build-terminal-webview-html.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@codemirror/commands": "6.10.4",
|
|
"@codemirror/language": "6.12.4",
|
|
"@codemirror/search": "6.7.1",
|
|
"@codemirror/state": "6.7.1",
|
|
"@codemirror/view": "6.43.6",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@floating-ui/react-native": "^0.10.7",
|
|
"@getpaseo/client": "*",
|
|
"@getpaseo/expo-two-way-audio": "*",
|
|
"@getpaseo/highlight": "*",
|
|
"@getpaseo/protocol": "*",
|
|
"@gorhom/bottom-sheet": "^5.2.14",
|
|
"@gorhom/portal": "^1.0.14",
|
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
"@react-native-masked-view/masked-view": "^0.3.2",
|
|
"@react-native/normalize-colors": "^0.81.5",
|
|
"@react-navigation/native": "^7.1.8",
|
|
"@replit/codemirror-vim": "6.3.0",
|
|
"@tanstack/react-query": "^5.90.11",
|
|
"@tanstack/react-virtual": "^3.13.21",
|
|
"@xterm/addon-clipboard": "^0.3.0-beta.213",
|
|
"@xterm/addon-fit": "^0.12.0-beta.213",
|
|
"@xterm/addon-image": "^0.10.0-beta.213",
|
|
"@xterm/addon-ligatures": "^0.11.0-beta.213",
|
|
"@xterm/addon-search": "^0.17.0-beta.213",
|
|
"@xterm/addon-unicode11": "^0.10.0-beta.213",
|
|
"@xterm/addon-web-links": "^0.13.0-beta.213",
|
|
"@xterm/addon-webgl": "^0.20.0-beta.212",
|
|
"@xterm/xterm": "^6.1.0-beta.213",
|
|
"buffer": "^6.0.3",
|
|
"expo": "^54.0.18",
|
|
"expo-asset": "~12.0.12",
|
|
"expo-audio": "~1.0.13",
|
|
"expo-build-properties": "^1.0.9",
|
|
"expo-camera": "~17.0.10",
|
|
"expo-clipboard": "~8.0.7",
|
|
"expo-constants": "~18.0.9",
|
|
"expo-crypto": "^15.0.8",
|
|
"expo-dev-client": "^6.0.15",
|
|
"expo-document-picker": "~14.0.8",
|
|
"expo-file-system": "~19.0.17",
|
|
"expo-haptics": "~15.0.7",
|
|
"expo-image": "~3.0.10",
|
|
"expo-image-manipulator": "~14.0.8",
|
|
"expo-image-picker": "^17.0.8",
|
|
"expo-keep-awake": "^15.0.7",
|
|
"expo-linking": "~8.0.8",
|
|
"expo-localization": "~17.0.9",
|
|
"expo-notifications": "^0.32.16",
|
|
"expo-router": "~6.0.13",
|
|
"expo-sharing": "^14.0.8",
|
|
"expo-splash-screen": "~31.0.10",
|
|
"expo-system-ui": "~6.0.7",
|
|
"fast-deep-equal": "^3.1.3",
|
|
"htmlparser2": "^12.0.0",
|
|
"i18next": "^26.3.0",
|
|
"lucide-react-native": "^0.546.0",
|
|
"markdown-it": "^10.0.0",
|
|
"mnemonic-id": "^3.2.7",
|
|
"qrcode": "^1.5.4",
|
|
"react": "19.1.0",
|
|
"react-dom": "19.1.0",
|
|
"react-i18next": "^17.0.8",
|
|
"react-native": "0.81.5",
|
|
"react-native-draggable-flatlist": "^4.0.3",
|
|
"react-native-edge-to-edge": "^1.7.0",
|
|
"react-native-gesture-handler": "~2.28.0",
|
|
"react-native-keyboard-controller": "1.21.12",
|
|
"react-native-markdown-display": "^7.0.2",
|
|
"react-native-nitro-modules": "0.35.5",
|
|
"react-native-reanimated": "~4.3.1",
|
|
"react-native-safe-area-context": "~5.6.0",
|
|
"react-native-screens": "~4.16.0",
|
|
"react-native-svg": "^15.14.0",
|
|
"react-native-uitextview": "^2.2.0",
|
|
"react-native-unistyles": "^3.2.4",
|
|
"react-native-web": "~0.21.0",
|
|
"react-native-webview": "^13.16.0",
|
|
"react-native-worklets": "~0.8.3",
|
|
"tiny-invariant": "^1.3.3",
|
|
"turndown": "^7.2.4",
|
|
"turndown-plugin-gfm": "^1.0.2",
|
|
"use-sync-external-store": "^1.6.0",
|
|
"zod": "^4.4.3",
|
|
"zustand": "^5.0.9"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.56.1",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/markdown-it": "^14.1.2",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "~19.2.0",
|
|
"@types/turndown": "^5.0.6",
|
|
"@types/ws": "^8.18.1",
|
|
"@vitest/browser": "^4.1.7",
|
|
"@vitest/browser-playwright": "^4.1.7",
|
|
"@xterm/headless": "^6.1.0-beta.213",
|
|
"dotenv": "^17.2.3",
|
|
"eas-cli": "^16.24.1",
|
|
"eslint": "^9.25.0",
|
|
"eslint-config-expo": "~10.0.0",
|
|
"expo-gradle-jvmargs": "^1.1.2",
|
|
"jsdom": "^20.0.3",
|
|
"material-icon-theme": "^5.32.0",
|
|
"playwright": "^1.56.1",
|
|
"serve-sim": "^0.1.40",
|
|
"typescript": "~5.9.2",
|
|
"vitest": "^4.1.6",
|
|
"wrangler": "^4.105.0",
|
|
"ws": "^8.20.0"
|
|
}
|
|
}
|