ensure a single instance of gerbil, dep upgrades

This commit is contained in:
Egor 2025-10-01 22:41:07 -07:00
parent f657b7375a
commit fe4180de32
3 changed files with 189 additions and 48 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "gerbil", "name": "gerbil",
"productName": "Gerbil", "productName": "Gerbil",
"version": "1.6.3", "version": "1.6.4",
"description": "Run Large Language Models locally", "description": "Run Large Language Models locally",
"main": "out/main/index.js", "main": "out/main/index.js",
"homepage": "./", "homepage": "./",
@ -39,9 +39,9 @@
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.36.0", "@eslint/js": "^9.36.0",
"@types/node": "^24.6.1", "@types/node": "^24.6.2",
"@types/react": "^19.1.17", "@types/react": "^19.2.0",
"@types/react-dom": "^19.1.11", "@types/react-dom": "^19.2.0",
"@typescript-eslint/eslint-plugin": "^8.45.0", "@typescript-eslint/eslint-plugin": "^8.45.0",
"@typescript-eslint/parser": "^8.45.0", "@typescript-eslint/parser": "^8.45.0",
"@vitejs/plugin-react": "^5.0.4", "@vitejs/plugin-react": "^5.0.4",
@ -54,7 +54,7 @@
"eslint-plugin-no-comments": "^1.1.10", "eslint-plugin-no-comments": "^1.1.10",
"eslint-plugin-promise": "^7.2.1", "eslint-plugin-promise": "^7.2.1",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^6.1.0",
"eslint-plugin-sonarjs": "^3.0.5", "eslint-plugin-sonarjs": "^3.0.5",
"globals": "^16.4.0", "globals": "^16.4.0",
"jiti": "^2.6.1", "jiti": "^2.6.1",
@ -75,8 +75,8 @@
"electron-updater": "6.6.2", "electron-updater": "6.6.2",
"execa": "^9.6.0", "execa": "^9.6.0",
"lucide-react": "^0.544.0", "lucide-react": "^0.544.0",
"react": "^19.1.1", "react": "^19.2.0",
"react-dom": "^19.1.1", "react-dom": "^19.2.0",
"react-error-boundary": "^6.0.0", "react-error-boundary": "^6.0.0",
"systeminformation": "^5.27.10", "systeminformation": "^5.27.10",
"winston": "^3.18.3", "winston": "^3.18.3",

View file

@ -4,6 +4,7 @@ import { platform } from 'process';
import { import {
createMainWindow, createMainWindow,
cleanup as cleanupWindow, cleanup as cleanupWindow,
getMainWindow,
} from '@/main/modules/window'; } from '@/main/modules/window';
import { import {
initialize as initializeConfig, initialize as initializeConfig,
@ -20,6 +21,27 @@ import { ensureDir } from '@/utils/node/fs';
import { PRODUCT_NAME } from '@/constants'; import { PRODUCT_NAME } from '@/constants';
export async function initializeApp() { export async function initializeApp() {
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
return;
}
app.on('second-instance', () => {
const mainWindow = getMainWindow();
if (!mainWindow.isVisible()) {
mainWindow.show();
}
if (mainWindow.isMinimized()) {
mainWindow.restore();
}
mainWindow.focus();
});
const installDir = getInstallDir(); const installDir = getInstallDir();
await app.whenReady(); await app.whenReady();

201
yarn.lock
View file

@ -30,7 +30,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/core@npm:^7.27.7, @babel/core@npm:^7.28.4": "@babel/core@npm:^7.24.4, @babel/core@npm:^7.27.7, @babel/core@npm:^7.28.4":
version: 7.28.4 version: 7.28.4
resolution: "@babel/core@npm:7.28.4" resolution: "@babel/core@npm:7.28.4"
dependencies: dependencies:
@ -66,6 +66,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-annotate-as-pure@npm:^7.27.3":
version: 7.27.3
resolution: "@babel/helper-annotate-as-pure@npm:7.27.3"
dependencies:
"@babel/types": "npm:^7.27.3"
checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633
languageName: node
linkType: hard
"@babel/helper-compilation-targets@npm:^7.27.2": "@babel/helper-compilation-targets@npm:^7.27.2":
version: 7.27.2 version: 7.27.2
resolution: "@babel/helper-compilation-targets@npm:7.27.2" resolution: "@babel/helper-compilation-targets@npm:7.27.2"
@ -79,6 +88,23 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-create-class-features-plugin@npm:^7.18.6":
version: 7.28.3
resolution: "@babel/helper-create-class-features-plugin@npm:7.28.3"
dependencies:
"@babel/helper-annotate-as-pure": "npm:^7.27.3"
"@babel/helper-member-expression-to-functions": "npm:^7.27.1"
"@babel/helper-optimise-call-expression": "npm:^7.27.1"
"@babel/helper-replace-supers": "npm:^7.27.1"
"@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1"
"@babel/traverse": "npm:^7.28.3"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0
checksum: 10c0/f1ace9476d581929128fd4afc29783bb674663898577b2e48ed139cfd2e92dfc69654cff76cb8fd26fece6286f66a99a993186c1e0a3e17b703b352d0bcd1ca4
languageName: node
linkType: hard
"@babel/helper-globals@npm:^7.28.0": "@babel/helper-globals@npm:^7.28.0":
version: 7.28.0 version: 7.28.0
resolution: "@babel/helper-globals@npm:7.28.0" resolution: "@babel/helper-globals@npm:7.28.0"
@ -86,6 +112,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-member-expression-to-functions@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1"
dependencies:
"@babel/traverse": "npm:^7.27.1"
"@babel/types": "npm:^7.27.1"
checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53
languageName: node
linkType: hard
"@babel/helper-module-imports@npm:^7.27.1": "@babel/helper-module-imports@npm:^7.27.1":
version: 7.27.1 version: 7.27.1
resolution: "@babel/helper-module-imports@npm:7.27.1" resolution: "@babel/helper-module-imports@npm:7.27.1"
@ -109,13 +145,45 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-plugin-utils@npm:^7.27.1": "@babel/helper-optimise-call-expression@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-optimise-call-expression@npm:7.27.1"
dependencies:
"@babel/types": "npm:^7.27.1"
checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6
languageName: node
linkType: hard
"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1":
version: 7.27.1 version: 7.27.1
resolution: "@babel/helper-plugin-utils@npm:7.27.1" resolution: "@babel/helper-plugin-utils@npm:7.27.1"
checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-replace-supers@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-replace-supers@npm:7.27.1"
dependencies:
"@babel/helper-member-expression-to-functions": "npm:^7.27.1"
"@babel/helper-optimise-call-expression": "npm:^7.27.1"
"@babel/traverse": "npm:^7.27.1"
peerDependencies:
"@babel/core": ^7.0.0
checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c
languageName: node
linkType: hard
"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1"
dependencies:
"@babel/traverse": "npm:^7.27.1"
"@babel/types": "npm:^7.27.1"
checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7
languageName: node
linkType: hard
"@babel/helper-string-parser@npm:^7.27.1": "@babel/helper-string-parser@npm:^7.27.1":
version: 7.27.1 version: 7.27.1
resolution: "@babel/helper-string-parser@npm:7.27.1" resolution: "@babel/helper-string-parser@npm:7.27.1"
@ -147,7 +215,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4":
version: 7.28.4 version: 7.28.4
resolution: "@babel/parser@npm:7.28.4" resolution: "@babel/parser@npm:7.28.4"
dependencies: dependencies:
@ -158,6 +226,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/plugin-proposal-private-methods@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6"
dependencies:
"@babel/helper-create-class-features-plugin": "npm:^7.18.6"
"@babel/helper-plugin-utils": "npm:^7.18.6"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10c0/1c273d0ec3d49d0fe80bd754ec0191016e5b3ab4fb1e162ac0c014e9d3c1517a5d973afbf8b6dc9f9c98a8605c79e5f9e8b5ee158a4313fa68d1ff7b02084b6a
languageName: node
linkType: hard
"@babel/plugin-transform-arrow-functions@npm:^7.27.1": "@babel/plugin-transform-arrow-functions@npm:^7.27.1":
version: 7.27.1 version: 7.27.1
resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1"
@ -224,7 +304,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4": "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4":
version: 7.28.4 version: 7.28.4
resolution: "@babel/types@npm:7.28.4" resolution: "@babel/types@npm:7.28.4"
dependencies: dependencies:
@ -1429,12 +1509,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:*, @types/node@npm:^24.6.1": "@types/node@npm:*, @types/node@npm:^24.6.2":
version: 24.6.1 version: 24.6.2
resolution: "@types/node@npm:24.6.1" resolution: "@types/node@npm:24.6.2"
dependencies: dependencies:
undici-types: "npm:~7.13.0" undici-types: "npm:~7.13.0"
checksum: 10c0/f2f8aea441d72139345cfa2e392af51bc27d12eb5f74b9b4d202046a2e82ab70d6da89c46a2ac7feea98854c2919e53070869d4af9d448e173a77249fcb7bca3 checksum: 10c0/d029757711be85ec468686f66cd8eca78f5996d7e2b1a5b818436e0299b19925b0fb4f7509a6b62750abdc72d66f5750ce22fb8b55559baca86df89a9c44722e
languageName: node languageName: node
linkType: hard linkType: hard
@ -1457,21 +1537,21 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/react-dom@npm:^19.1.11": "@types/react-dom@npm:^19.2.0":
version: 19.1.11 version: 19.2.0
resolution: "@types/react-dom@npm:19.1.11" resolution: "@types/react-dom@npm:19.2.0"
peerDependencies: peerDependencies:
"@types/react": ^19.0.0 "@types/react": ^19.2.0
checksum: 10c0/417da6414f43ea2e416ab19666f78f8a29b349f4273ee6d8d468516606c65ee0e6f31939cd3255dfaf466a50a5cdf16b6fd988cf7e9aaf678c61d1fff81e5c20 checksum: 10c0/73ba326c8bc53e7bb597aa8e66ce4aabd79e501f744e1386278f0c63f1be6d78cca71a8269af3565206f296675116109a3ccbed4038409614fabf8405e54c6ef
languageName: node languageName: node
linkType: hard linkType: hard
"@types/react@npm:^19.1.17": "@types/react@npm:^19.2.0":
version: 19.1.17 version: 19.2.0
resolution: "@types/react@npm:19.1.17" resolution: "@types/react@npm:19.2.0"
dependencies: dependencies:
csstype: "npm:^3.0.2" csstype: "npm:^3.0.2"
checksum: 10c0/8a8369ea00fc961f0884be4d1da4a039b2b6445de9c8b690ed0ebe15acfb0b1f27005278fef1fe39a1722a30f4415778b790d0089e2b30019371c61355ea316f checksum: 10c0/a280e146df2abd3b06eaa2f5332dade9f7ebe916334a40699ee11139c5f22aeb49b5b78b6de8c55b53ef2fa94285e1bc2feaf4fbce6fe259a7de92dc1bf67b17
languageName: node languageName: node
linkType: hard linkType: hard
@ -3315,12 +3395,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"eslint-plugin-react-hooks@npm:^5.2.0": "eslint-plugin-react-hooks@npm:^6.1.0":
version: 5.2.0 version: 6.1.0
resolution: "eslint-plugin-react-hooks@npm:5.2.0" resolution: "eslint-plugin-react-hooks@npm:6.1.0"
dependencies:
"@babel/core": "npm:^7.24.4"
"@babel/parser": "npm:^7.24.4"
"@babel/plugin-proposal-private-methods": "npm:^7.18.6"
hermes-parser: "npm:^0.25.1"
zod: "npm:^3.22.4"
zod-validation-error: "npm:^3.0.3"
peerDependencies: peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
checksum: 10c0/1c8d50fa5984c6dea32470651807d2922cc3934cf3425e78f84a24c2dfd972e7f019bee84aefb27e0cf2c13fea0ac1d4473267727408feeb1c56333ca1489385 checksum: 10c0/57f6618298253e7c940bd1a8ecc43076a872cc4a1141f0fd3f10175a660706274c93cecc8657947befbf4302a3e8956d98f21019d4a364b227266470b515ba5e
languageName: node languageName: node
linkType: hard linkType: hard
@ -3864,9 +3951,9 @@ __metadata:
"@fontsource/inter": "npm:^5.2.8" "@fontsource/inter": "npm:^5.2.8"
"@mantine/core": "npm:8.3.1" "@mantine/core": "npm:8.3.1"
"@mantine/hooks": "npm:8.3.1" "@mantine/hooks": "npm:8.3.1"
"@types/node": "npm:^24.6.1" "@types/node": "npm:^24.6.2"
"@types/react": "npm:^19.1.17" "@types/react": "npm:^19.2.0"
"@types/react-dom": "npm:^19.1.11" "@types/react-dom": "npm:^19.2.0"
"@types/yauzl": "npm:^2.10.3" "@types/yauzl": "npm:^2.10.3"
"@typescript-eslint/eslint-plugin": "npm:^8.45.0" "@typescript-eslint/eslint-plugin": "npm:^8.45.0"
"@typescript-eslint/parser": "npm:^8.45.0" "@typescript-eslint/parser": "npm:^8.45.0"
@ -3882,15 +3969,15 @@ __metadata:
eslint-plugin-no-comments: "npm:^1.1.10" eslint-plugin-no-comments: "npm:^1.1.10"
eslint-plugin-promise: "npm:^7.2.1" eslint-plugin-promise: "npm:^7.2.1"
eslint-plugin-react: "npm:^7.37.5" eslint-plugin-react: "npm:^7.37.5"
eslint-plugin-react-hooks: "npm:^5.2.0" eslint-plugin-react-hooks: "npm:^6.1.0"
eslint-plugin-sonarjs: "npm:^3.0.5" eslint-plugin-sonarjs: "npm:^3.0.5"
execa: "npm:^9.6.0" execa: "npm:^9.6.0"
globals: "npm:^16.4.0" globals: "npm:^16.4.0"
jiti: "npm:^2.6.1" jiti: "npm:^2.6.1"
lucide-react: "npm:^0.544.0" lucide-react: "npm:^0.544.0"
prettier: "npm:^3.6.2" prettier: "npm:^3.6.2"
react: "npm:^19.1.1" react: "npm:^19.2.0"
react-dom: "npm:^19.1.1" react-dom: "npm:^19.2.0"
react-error-boundary: "npm:^6.0.0" react-error-boundary: "npm:^6.0.0"
rollup-plugin-visualizer: "npm:^6.0.3" rollup-plugin-visualizer: "npm:^6.0.3"
systeminformation: "npm:^5.27.10" systeminformation: "npm:^5.27.10"
@ -4171,6 +4258,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"hermes-estree@npm:0.25.1":
version: 0.25.1
resolution: "hermes-estree@npm:0.25.1"
checksum: 10c0/48be3b2fa37a0cbc77a112a89096fa212f25d06de92781b163d67853d210a8a5c3784fac23d7d48335058f7ed283115c87b4332c2a2abaaccc76d0ead1a282ac
languageName: node
linkType: hard
"hermes-parser@npm:^0.25.1":
version: 0.25.1
resolution: "hermes-parser@npm:0.25.1"
dependencies:
hermes-estree: "npm:0.25.1"
checksum: 10c0/3abaa4c6f1bcc25273f267297a89a4904963ea29af19b8e4f6eabe04f1c2c7e9abd7bfc4730ddb1d58f2ea04b6fee74053d8bddb5656ec6ebf6c79cc8d14202c
languageName: node
linkType: hard
"hosted-git-info@npm:^4.1.0": "hosted-git-info@npm:^4.1.0":
version: 4.1.0 version: 4.1.0
resolution: "hosted-git-info@npm:4.1.0" resolution: "hosted-git-info@npm:4.1.0"
@ -5906,14 +6009,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-dom@npm:^19.1.1": "react-dom@npm:^19.2.0":
version: 19.1.1 version: 19.2.0
resolution: "react-dom@npm:19.1.1" resolution: "react-dom@npm:19.2.0"
dependencies: dependencies:
scheduler: "npm:^0.26.0" scheduler: "npm:^0.27.0"
peerDependencies: peerDependencies:
react: ^19.1.1 react: ^19.2.0
checksum: 10c0/8c91198510521299c56e4e8d5e3a4508b2734fb5e52f29eeac33811de64e76fe586ad32c32182e2e84e070d98df67125da346c3360013357228172dbcd20bcdd checksum: 10c0/fa2cae05248d01288e91523b590ce4e7635b1e13f1344e225f850d722a8da037bf0782f63b1c1d46353334e0c696909b82e582f8cad607948fde6f7646cc18d9
languageName: node languageName: node
linkType: hard linkType: hard
@ -6016,10 +6119,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react@npm:^19.1.1": "react@npm:^19.2.0":
version: 19.1.1 version: 19.2.0
resolution: "react@npm:19.1.1" resolution: "react@npm:19.2.0"
checksum: 10c0/8c9769a2dfd02e603af6445058325e6c8a24b47b185d0e461f66a6454765ddcaecb3f0a90184836c68bb509f3c38248359edbc42f0d07c23eb500a5c30c87b4e checksum: 10c0/1b6d64eacb9324725bfe1e7860cb7a6b8a34bc89a482920765ebff5c10578eb487e6b46b2f0df263bd27a25edbdae2c45e5ea5d81ae61404301c1a7192c38330
languageName: node languageName: node
linkType: hard linkType: hard
@ -6417,10 +6520,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"scheduler@npm:^0.26.0": "scheduler@npm:^0.27.0":
version: 0.26.0 version: 0.27.0
resolution: "scheduler@npm:0.26.0" resolution: "scheduler@npm:0.27.0"
checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356 checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452
languageName: node languageName: node
linkType: hard linkType: hard
@ -7680,6 +7783,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"zod-validation-error@npm:^3.0.3":
version: 3.5.3
resolution: "zod-validation-error@npm:3.5.3"
peerDependencies:
zod: ^3.25.0 || ^4.0.0
checksum: 10c0/4a1054f49049a5414857a4a85ae7b853d59be83dedb89942d4966345a58bd26d939beb574f0f5592fe4cc9963b26ac306d5b0950f6905651569059ef3517c803
languageName: node
linkType: hard
"zod@npm:^3.22.4":
version: 3.25.76
resolution: "zod@npm:3.25.76"
checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c
languageName: node
linkType: hard
"zustand@npm:^5.0.8": "zustand@npm:^5.0.8":
version: 5.0.8 version: 5.0.8
resolution: "zustand@npm:5.0.8" resolution: "zustand@npm:5.0.8"