experiments in a post-browser web
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}