experiments in a post-browser web
at main 213 lines 20 kB view raw
1{ 2 "name": "Peek", 3 "version": "0.0.1", 4 "description": "Peek is a web user agent for working with the web in a more agent-ish fashion than a browser.", 5 "main": "dist/backend/electron/entry.js", 6 "author": "dietrich ayala", 7 "license": "MIT", 8 "engines": { 9 "node": ">=24.0.0" 10 }, 11 "type": "module", 12 "repository": { 13 "type": "git", 14 "url": "https://github.com/autonome/peek" 15 }, 16 "build": { 17 "extends": "electron-builder.yml" 18 }, 19 "scripts": { 20 "postinstall": "electron-rebuild -f -w better-sqlite3", 21 "agent-setup": "git -C .agent-workflow pull 2>/dev/null || git clone https://tangled.sh/burrito.space/multi-agent-workflow .agent-workflow && echo 'Agent workflow updated!'", 22 "//-- Development (BACKEND=electron|tauri, defaults to electron) --//": "", 23 "dev": "[ \"${BACKEND:-}\" = \"tauri\" ] && yarn dev:tauri || yarn dev:electron", 24 "dev:electron": "./scripts/timed.sh sh -c 'yarn build && DEBUG=1 electron .'", 25 "dev:tauri": "./scripts/timed.sh sh -c 'cd backend/tauri/src-tauri && cargo run'", 26 "dev:hot": "yarn build && nodemon --exec 'yarn build && DEBUG=1 electron .'", 27 "//-- Production --//": "", 28 "check:native": "node scripts/check-native-modules.js", 29 "start": "[ \"${BACKEND:-}\" = \"tauri\" ] && yarn start:tauri || yarn start:electron", 30 "start:electron": "./scripts/timed.sh sh -c 'yarn check:native && yarn build && electron .'", 31 "start:tauri": "./scripts/timed.sh sh -c 'cd backend/tauri/src-tauri && cargo run --release'", 32 "start:tauri:log": "cd backend/tauri/src-tauri && ./target/release/peek-tauri 2>&1", 33 "start:tauri:test": "pkill -INT -f peek-tauri 2>/dev/null; sleep 1; cd backend/tauri/src-tauri && ./target/release/peek-tauri &> /tmp/tauri.log & sleep 5 && tail -50 /tmp/tauri.log && pkill -INT -f peek-tauri", 34 "//-- Build --//": "", 35 "build": "./scripts/timed.sh sh -c 'node schema/codegen.js && tsc -p backend/tsconfig.json'", 36 "build:watch": "tsc -p backend/tsconfig.json --watch", 37 "build:electron": "./scripts/timed.sh electron-builder --dir", 38 "build:electron:install": "./scripts/timed.sh sh -c 'electron-builder --dir && rm -rf /Applications/Peek.app && cp -R out/mac-arm64/Peek.app /Applications/'", 39 "build:electron:dist": "./scripts/timed.sh electron-builder", 40 "build:tauri": "./scripts/timed.sh sh -c 'cd backend/tauri/src-tauri && cargo tauri build'", 41 "build:tauri:check": "./scripts/timed.sh sh -c 'cd backend/tauri/src-tauri && cargo check'", 42 "//-- Tauri Mobile (peek-save app in backend/tauri-mobile) --//": "", 43 "mobile:build": "cd backend/tauri-mobile && npm run build", 44 "mobile:ios:assets": "cd backend/tauri-mobile && npm run build && rm -rf src-tauri/gen/apple/assets && cp -R dist src-tauri/gen/apple/assets", 45 "mobile:ios:dev": "cd backend/tauri-mobile/src-tauri && cargo tauri ios dev", 46 "mobile:ios:build": "cd backend/tauri-mobile && ./build-ios.sh", 47 "mobile:ios:build:release": "cd backend/tauri-mobile && ./build-release.sh", 48 "mobile:ios:xcode": "open backend/tauri-mobile/src-tauri/gen/apple/peek-save.xcodeproj", 49 "mobile:ios:xcodebuild:list": "xcodebuild -project backend/tauri-mobile/src-tauri/gen/apple/peek-save.xcodeproj -list", 50 "mobile:ios:xcodebuild": "rm -rf /tmp/peek-xcodebuild && cd backend/tauri-mobile/src-tauri/gen/apple && xcodebuild -scheme peek-save_iOS -configuration Debug -sdk iphonesimulator -derivedDataPath /tmp/peek-xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17 Pro' clean build", 51 "mobile:ios:xcodebuild:release": "rm -rf /tmp/peek-xcodebuild && mkdir -p backend/tauri-mobile/src-tauri/gen/apple/Externals/arm64/release && ln -sf ../Debug/libapp.a backend/tauri-mobile/src-tauri/gen/apple/Externals/arm64/release/libapp.a && cd backend/tauri-mobile/src-tauri/gen/apple && xcodebuild -scheme peek-save_iOS -configuration release -sdk iphonesimulator -derivedDataPath /tmp/peek-xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17 Pro' clean build", 52 "mobile:ios:xcodebuild:install": "xcrun simctl install booted '/tmp/peek-xcodebuild/Build/Products/debug-iphonesimulator/Peek Save.app'", 53 "mobile:ios:xcodebuild:install:release": "xcrun simctl install booted '/tmp/peek-xcodebuild/Build/Products/release-iphonesimulator/Peek Save.app'", 54 "mobile:ios:xcodebuild:full": "yarn mobile:ios:build && yarn mobile:ios:xcodebuild && yarn mobile:ios:xcodebuild:install", 55 "mobile:ios:xcodebuild:release:full": "yarn mobile:ios:build && yarn mobile:ios:xcodebuild:release && yarn mobile:ios:xcodebuild:install:release", 56 "mobile:ios:xcodebuild:device": "rm -rf /tmp/peek-xcodebuild && cd backend/tauri-mobile/src-tauri/gen/apple && xcodebuild -scheme peek-save_iOS -configuration release -sdk iphoneos -derivedDataPath /tmp/peek-xcodebuild -destination 'generic/platform=iOS' ONLY_ACTIVE_ARCH=NO clean build", 57 "mobile:ios:device:list": "xcrun devicectl list devices", 58 "mobile:ios:xcodebuild:device:install": "DEVICE_ID=$(xcrun devicectl list devices 2>/dev/null | grep 'iPhone' | awk '{for(i=1;i<=NF;i++)if($i~/^[0-9A-F-]{36}$/)print $i}' | head -1) && echo \"Installing to device: $DEVICE_ID\" && xcrun devicectl device install app --device \"$DEVICE_ID\" '/tmp/peek-xcodebuild/Build/Products/release-iphoneos/Peek Save.app'", 59 "mobile:ios:xcodebuild:device:full": "yarn mobile:ios:build:release && yarn mobile:ios:xcodebuild:device && yarn mobile:ios:xcodebuild:device:install", 60 "mobile:ios:device:launch": "DEVICE_ID=$(xcrun devicectl list devices 2>/dev/null | grep 'iPhone' | awk '{for(i=1;i<=NF;i++)if($i~/^[0-9A-F-]{36}$/)print $i}' | head -1) && xcrun devicectl device process launch --device \"$DEVICE_ID\" com.dietrich.peek-mobile", 61 "mobile:ios:device:terminate": "DEVICE_ID=$(xcrun devicectl list devices 2>/dev/null | grep 'iPhone' | awk '{for(i=1;i<=NF;i++)if($i~/^[0-9A-F-]{36}$/)print $i}' | head -1) && xcrun devicectl device process terminate --device \"$DEVICE_ID\" --bundle-id com.dietrich.peek-mobile 2>/dev/null || echo 'App not running'", 62 "mobile:ios:device:run": "yarn mobile:ios:device:terminate; yarn mobile:ios:xcodebuild:device:install && yarn mobile:ios:device:launch", 63 "mobile:ios:sim:boot": "xcrun simctl boot 'iPhone 17 Pro' 2>/dev/null || echo 'Simulator already booted or not found'", 64 "mobile:ios:sim:open": "open -a Simulator", 65 "mobile:ios:sim:launch": "xcrun simctl launch booted com.dietrich.peek-mobile", 66 "mobile:ios:sim:run": "yarn mobile:ios:sim:boot && yarn mobile:ios:sim:open && yarn mobile:ios:xcodebuild:release:full && yarn mobile:ios:sim:launch", 67 "mobile:ios:sim:db:path": "find ~/Library/Developer/CoreSimulator/Devices -name 'com.dietrich.peek-mobile' -path '*/AppGroup/*' 2>/dev/null | head -1 | xargs dirname | xargs ls -la", 68 "mobile:ios:sim:db:info": "DB=$(find ~/Library/Developer/CoreSimulator/Devices -name 'peek*.db' -path '*/AppGroup/*' 2>/dev/null | head -1) && echo \"Database: $DB\" && sqlite3 \"$DB\" 'SELECT * FROM settings; SELECT COUNT(*) as items FROM items WHERE deleted_at IS NULL; SELECT COUNT(*) as tags FROM tags; SELECT COUNT(*) as item_tags FROM item_tags;'", 69 "mobile:ios:sim:db:schema": "DB=$(find ~/Library/Developer/CoreSimulator/Devices -name 'peek*.db' -path '*/AppGroup/*' 2>/dev/null | head -1) && sqlite3 \"$DB\" '.schema tags' '.schema item_tags'", 70 "mobile:ios:sim:db:items": "DB=$(find ~/Library/Developer/CoreSimulator/Devices -name 'peek*.db' -path '*/AppGroup/*' 2>/dev/null | head -1) && sqlite3 \"$DB\" 'SELECT id, type, substr(url,1,50) as url, deleted_at FROM items LIMIT 20;'", 71 "mobile:ios:sim:db:tags": "DB=$(find ~/Library/Developer/CoreSimulator/Devices -name 'peek*.db' -path '*/AppGroup/*' 2>/dev/null | head -1) && sqlite3 \"$DB\" 'SELECT * FROM tags LIMIT 20;'", 72 "mobile:ios:sim:db:backup": "DST=/tmp/peek-sim-backup-$(date +%Y%m%d-%H%M%S) && mkdir -p $DST && APP_GROUP=$(find ~/Library/Developer/CoreSimulator/Devices -path '*/Booted/*/AppGroup/*' -name 'com.dietrich.peek-mobile' 2>/dev/null | head -1 | xargs dirname) && cp -r \"$APP_GROUP\"/* $DST/ && echo \"Backed up to: $DST\" && ls -la $DST/", 73 "mobile:ios:sim:appgroup": "DEVICE_ID=$(xcrun simctl list devices booted -j | grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -1); grep -rl peek-mobile \"$HOME/Library/Developer/CoreSimulator/Devices/$DEVICE_ID/data/Containers/Shared/AppGroup/\"*/.com.apple.mobile_container_manager.metadata.plist 2>/dev/null | head -1 | xargs dirname", 74 "mobile:ios:sim:appgroup:debug": "DEVICE_ID=$(xcrun simctl list devices booted -j | grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -1); echo \"Device: $DEVICE_ID\"; grep -rl peek-mobile \"$HOME/Library/Developer/CoreSimulator/Devices/$DEVICE_ID/data/Containers/Shared/AppGroup/\"*/.com.apple.mobile_container_manager.metadata.plist 2>/dev/null | head -3; echo 'Contents:'; ls \"$HOME/Library/Developer/CoreSimulator/Devices/$DEVICE_ID/data/Containers/Shared/AppGroup/\"*/ 2>/dev/null | head -20", 75 "mobile:ios:sim:clean": "xcrun simctl terminate booted com.dietrich.peek-mobile 2>/dev/null; DEVICE_ID=$(xcrun simctl list devices booted -j | grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -1); APP_GROUP=$(grep -rl peek-mobile \"$HOME/Library/Developer/CoreSimulator/Devices/$DEVICE_ID/data/Containers/Shared/AppGroup/\"*/.com.apple.mobile_container_manager.metadata.plist 2>/dev/null | head -1 | xargs dirname); echo \"AppGroup: $APP_GROUP\"; find \"$APP_GROUP\" -maxdepth 1 \\( -name 'profiles.json' -o -name '*.db' -o -name '*.db-shm' -o -name '*.db-wal' \\) -delete -print; echo 'Remaining:'; ls \"$APP_GROUP/\"", 76 "mobile:ios:sim:fresh": "yarn mobile:ios:sim:clean; xcrun simctl terminate booted com.dietrich.peek-mobile 2>/dev/null; xcrun simctl launch booted com.dietrich.peek-mobile; sleep 2; yarn mobile:ios:sim:status", 77 "mobile:ios:sim:status": "DEVICE_ID=$(xcrun simctl list devices booted -j | grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -1); APP_GROUP=$(grep -rl peek-mobile \"$HOME/Library/Developer/CoreSimulator/Devices/$DEVICE_ID/data/Containers/Shared/AppGroup/\"*/.com.apple.mobile_container_manager.metadata.plist 2>/dev/null | head -1 | xargs dirname); echo \"AppGroup: $APP_GROUP\"; echo '=== profiles.json ==='; cat \"$APP_GROUP/profiles.json\" 2>/dev/null || echo '(not found)'; echo ''; echo '=== Databases ==='; ls -la \"$APP_GROUP/\"*.db 2>/dev/null || echo '(none)'", 78 "mobile:ios:sim:build-fresh": "yarn mobile:ios:xcodebuild:full && yarn mobile:ios:sim:fresh", 79 "mobile:ios:test": "cd backend/tauri-mobile && ./dev-setup.sh", 80 "mobile:android:init": "cd backend/tauri-mobile/src-tauri && cargo tauri android init", 81 "mobile:android:dev": "cd backend/tauri-mobile/src-tauri && cargo tauri android dev", 82 "mobile:android:build": "cd backend/tauri-mobile/src-tauri && cargo tauri android build", 83 "//-- Server (webhook API backend in backend/server) --//": "", 84 "server:start": "cd backend/server && npm start", 85 "server:dev": "cd backend/server && npm run dev", 86 "server:dev:data": "./scripts/dev-server-with-data.sh", 87 "server:test": "cd backend/server && npm test", 88 "server:test:api": "cd backend/server && npm run test:api", 89 "server:install": "cd backend/server && npm install", 90 "server:healthcheck": "cd backend/server && npm run healthcheck", 91 "server:deploy": "./scripts/deploy-server.sh", 92 "//-- Schema Codegen --//": "", 93 "schema:codegen": "node schema/codegen.js", 94 "schema:test": "node --test schema/fidelity.test.js", 95 "schema:check": "node schema/check-freshness.js", 96 "//-- Sync Tests --//": "", 97 "test:sync": "node backend/tests/sync-integration.test.js", 98 "test:sync:verbose": "VERBOSE=1 node backend/tests/sync-integration.test.js", 99 "test:sync:e2e": "node backend/tests/sync-e2e.test.js", 100 "test:sync:e2e:verbose": "VERBOSE=1 node backend/tests/sync-e2e.test.js", 101 "test:sync:e2e:prod": "node backend/tests/sync-e2e-prod.test.js", 102 "test:sync:e2e:prod:verbose": "VERBOSE=1 node backend/tests/sync-e2e-prod.test.js", 103 "test:sync:verify-logs": "node backend/tests/verify-railway-logs.js", 104 "test:sync:desktop": "./scripts/test-sync-desktop.sh", 105 "test:sync:three-way": "node backend/tests/sync-three-way.test.js", 106 "test:sync:three-way:verbose": "VERBOSE=1 node backend/tests/sync-three-way.test.js", 107 "test:sync:ios": "./scripts/ios-sync-test.sh", 108 "test:version-compat": "node backend/tests/sync-version-compat.test.js", 109 "test:version-compat:e2e": "./scripts/version-compat-e2e.sh", 110 "test:e2e:version": "./scripts/e2e-version-test.sh", 111 "test:e2e:version:phase": "./scripts/e2e-version-test.sh --phase", 112 "test:e2e:server": "./scripts/e2e-server.sh", 113 "interactive-test:e2e:full-sync": "./scripts/e2e-full-sync-test.sh", 114 "interactive-test:e2e:full-sync:auto": "./scripts/e2e-full-sync-test.sh --headless --build", 115 "test:e2e:mobile": "LOCAL_IP=localhost ./scripts/e2e-full-sync-test.sh --headless --build", 116 "test:mobile": "cd backend/tauri-mobile && npm test", 117 "test:extension": "node --test backend/extension/tests/*.test.js", 118 "test:extension:e2e": "node --test backend/extension/tests/sync-e2e.test.js", 119 "test:extension:e2e:verbose": "VERBOSE=1 node --test backend/extension/tests/sync-e2e.test.js", 120 "test:extension:browser": "BROWSER=chrome npx playwright test tests/extension/ --project=extension-chrome", 121 "test:extension:browser:visible": "HEADLESS=0 BROWSER=chrome npx playwright test tests/extension/ --project=extension-chrome --headed", 122 "extension:chrome": "backend/extension/scripts/launch-chrome.sh", 123 "extension:firefox": "web-ext run --source-dir backend/extension --firefox-profile /tmp/peek-firefox-profile --keep-profile-changes --no-reload", 124 "//-- Packaged Electron --//": "", 125 "kill:packaged": "pkill -f 'out/mac-arm64/Peek.app' || true", 126 "kill:prod": "pkill -f '/Applications/Peek.app' || true", 127 "run:packaged": "yarn kill:packaged; open out/mac-arm64/Peek.app", 128 "run:packaged:debug": "yarn kill:packaged; DEBUG=1 out/mac-arm64/Peek.app/Contents/MacOS/Peek", 129 "run:packaged:bg": "yarn kill:packaged; out/mac-arm64/Peek.app/Contents/MacOS/Peek > /tmp/packaged-debug.log 2>&1 &", 130 "run:packaged:debug:bg": "yarn kill:packaged; DEBUG=1 out/mac-arm64/Peek.app/Contents/MacOS/Peek > /tmp/packaged-debug.log 2>&1 &", 131 "run:packaged:check": "yarn kill:packaged; out/mac-arm64/Peek.app/Contents/MacOS/Peek 2>&1 | head -5; sleep 2; yarn kill:packaged", 132 "run:prod": "yarn kill:prod; open /Applications/Peek.app", 133 "run:prod:debug": "yarn kill:prod; /Applications/Peek.app/Contents/MacOS/Peek 2>&1", 134 "run:prod:bg": "yarn kill:prod; /Applications/Peek.app/Contents/MacOS/Peek > /tmp/prod-debug.log 2>&1 &", 135 "prod:log": "tail -f /tmp/prod-debug.log", 136 "packaged:log": "tail -f /tmp/packaged-debug.log", 137 "test:packaged": "yarn kill:packaged; HEADLESS=1 PACKAGED=1 npx playwright test tests/desktop/", 138 "test:packaged:debug": "yarn kill:packaged; HEADLESS=1 PACKAGED=1 DEBUG=1 npx playwright test tests/desktop/", 139 "//-- Testing --//": "", 140 "test:unit": "./scripts/timed.sh sh -c 'yarn build && node --test dist/backend/electron/*.test.js'", 141 "test:unit:modes": "./scripts/timed.sh sh -c 'yarn build && node --test dist/backend/electron/modes.test.js'", 142 "test:unit:shortcuts": "./scripts/timed.sh sh -c 'yarn build && node --test dist/backend/electron/shortcuts.test.js'", 143 "test:unit:datastore": "./scripts/timed.sh sh -c 'yarn build && node --test dist/backend/electron/datastore.test.js'", 144 "test": "./scripts/timed.sh sh -c 'yarn build && yarn test:electron && yarn test:tauri'", 145 "test:electron": "./scripts/timed.sh sh -c 'yarn check:native && yarn build && HEADLESS=1 BACKEND=electron npx playwright test tests/desktop/'", 146 "test:electron:x": "./scripts/timed.sh sh -c 'yarn build && HEADLESS=1 BACKEND=electron npx playwright test tests/desktop/ -x'", 147 "test:tauri": "./scripts/timed.sh sh -c 'yarn test:tauri:frontend; yarn test:tauri:rust'", 148 "test:tauri:frontend": "./scripts/timed.sh sh -c 'HEADLESS=1 BACKEND=tauri npx playwright test tests/desktop/'", 149 "test:tauri:rust": "./scripts/timed.sh sh -c 'cd backend/tauri/src-tauri && cargo test --test smoke -- --nocapture'", 150 "test:visible": "./scripts/timed.sh sh -c 'yarn build && HEADLESS=0 BACKEND=electron npx playwright test tests/desktop/ --headed'", 151 "test:debug": "./scripts/timed.sh sh -c 'yarn build && HEADLESS=0 npx playwright test --debug'", 152 "test:grep": "./scripts/timed.sh sh -c 'yarn build && HEADLESS=1 npx playwright test tests/desktop/ --grep'", 153 "test:electron:bg": "nohup yarn test:electron > /tmp/test-electron.log 2>&1 & disown; echo 'Tests running in background, see: /tmp/test-electron.log'", 154 "test:log": "tail -f /tmp/test-electron.log", 155 "//-- Misc (BACKEND=electron|tauri, defaults to electron) --//": "", 156 "kill": "[ \"${BACKEND:-}\" = \"tauri\" ] && yarn kill:tauri || yarn kill:electron", 157 "kill:electron": "pkill -f '/Users/dietrich/misc/peek/node_modules/.bin/electron' || true", 158 "kill:tauri": "pkill -INT -f peek-tauri 2>/dev/null || true", 159 "debug": "[ \"${BACKEND:-}\" = \"tauri\" ] && yarn debug:tauri || yarn debug:electron", 160 "debug:headless": "./scripts/timed.sh sh -c 'yarn build && PEEK_HEADLESS=1 DEBUG=1 electron .'", 161 "debug:electron": "./scripts/timed.sh sh -c 'yarn build && DEBUG=1 electron .'", 162 "debug:electron:headless": "./scripts/timed.sh sh -c 'yarn build && PEEK_HEADLESS=1 DEBUG=1 electron .'", 163 "debug:electron:log": "yarn kill:electron; sleep 1; yarn build && DEBUG=1 electron . 2>&1 | tee /tmp/electron-debug.log", 164 "debug:electron:bg": "yarn kill:electron; sleep 1; yarn build && DEBUG=1 electron . > /tmp/electron-debug.log 2>&1 &", 165 "electron:log": "tail -f /tmp/electron-debug.log", 166 "debug:tauri": "cd backend/tauri/src-tauri && cargo run 2>&1", 167 "debug:tauri:headless": "cd backend/tauri/src-tauri && PEEK_HEADLESS=1 cargo run 2>&1", 168 "debug:tauri:log": "yarn kill:tauri; sleep 1; cd backend/tauri/src-tauri && cargo run 2>&1 | tee /tmp/tauri-debug.log", 169 "debug:tauri:bg": "yarn kill:tauri; sleep 1; cd backend/tauri/src-tauri && cargo run > /tmp/tauri-debug.log 2>&1 &", 170 "tauri:log": "tail -f /tmp/tauri-debug.log", 171 "restart": "[ \"${BACKEND:-}\" = \"tauri\" ] && yarn restart:tauri || yarn restart:electron", 172 "restart:headless": "yarn kill && yarn debug:headless", 173 "restart:electron": "yarn kill:electron && sleep 1 && yarn debug:electron", 174 "restart:tauri": "yarn kill:tauri && sleep 1 && yarn debug:tauri", 175 "lint": "echo \"No linting configured\"" 176 }, 177 "dependencies": { 178 "@cliqz/adblocker-electron": "^1.34.0", 179 "@codemirror/commands": "^6.10.1", 180 "@codemirror/lang-markdown": "^6.5.0", 181 "@codemirror/language": "^6.12.1", 182 "@codemirror/search": "^6.6.0", 183 "@codemirror/state": "^6.5.4", 184 "@codemirror/theme-one-dark": "^6.1.3", 185 "@codemirror/view": "^6.39.11", 186 "@replit/codemirror-vim": "^6.3.0", 187 "archiver": "^7.0.0", 188 "better-sqlite3": "^12.5.0", 189 "cross-fetch": "^4.1.0", 190 "electron-unhandled": "^5.0.0", 191 "lit": "^3.3.2" 192 }, 193 "devDependencies": { 194 "@electron/rebuild": "^4.0.2", 195 "@playwright/test": "^1.57.0", 196 "@types/archiver": "^6.0.0", 197 "@types/better-sqlite3": "^7.6.13", 198 "@types/node": "^25.0.3", 199 "electron": "^40.0.0", 200 "electron-builder": "26.0.12", 201 "fake-indexeddb": "^6.2.5", 202 "playwright": "^1.57.0", 203 "playwright-webextext": "^0.0.4", 204 "tslib": "^2.8.1", 205 "typescript": "^5.9.3", 206 "web-ext": "^9.2.0" 207 }, 208 "resolutions": { 209 "tmp": "^0.2.5", 210 "glob@^11.0.0": "^11.1.0" 211 }, 212 "packageManager": "yarn@4.12.0" 213}