Merge branch 'main' of github.com:cjpais/Handy

This commit is contained in:
CJ Pais 2026-03-01 20:58:27 +07:00
commit 51ef6f5755
24 changed files with 1306 additions and 967 deletions

View file

@ -6,7 +6,7 @@
"name": "handy-app",
"dependencies": {
"@tailwindcss/vite": "^4.1.16",
"@tauri-apps/api": "^2.9.0",
"@tauri-apps/api": "^2.10.0",
"@tauri-apps/plugin-autostart": "~2.5.1",
"@tauri-apps/plugin-clipboard-manager": "~2.3.2",
"@tauri-apps/plugin-dialog": "~2",
@ -17,7 +17,7 @@
"@tauri-apps/plugin-process": "~2.3.1",
"@tauri-apps/plugin-sql": "~2.3.1",
"@tauri-apps/plugin-store": "~2.4.1",
"@tauri-apps/plugin-updater": "~2.9.0",
"@tauri-apps/plugin-updater": "~2.10.0",
"i18next": "^25.7.2",
"immer": "^11.1.3",
"lucide-react": "^0.542.0",
@ -33,7 +33,7 @@
},
"devDependencies": {
"@playwright/test": "^1.58.0",
"@tauri-apps/cli": "^2.9.1",
"@tauri-apps/cli": "^2.10.0",
"@types/node": "^24.9.1",
"@types/react": "^18.3.26",
"@types/react-dom": "^18.3.7",
@ -284,31 +284,31 @@
"@tailwindcss/vite": ["@tailwindcss/vite@4.1.16", "", { "dependencies": { "@tailwindcss/node": "4.1.16", "@tailwindcss/oxide": "4.1.16", "tailwindcss": "4.1.16" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg=="],
"@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/api": ["@tauri-apps/api@2.10.1", "", {}, "sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw=="],
"@tauri-apps/cli": ["@tauri-apps/cli@2.9.1", "", { "optionalDependencies": { "@tauri-apps/cli-darwin-arm64": "2.9.1", "@tauri-apps/cli-darwin-x64": "2.9.1", "@tauri-apps/cli-linux-arm-gnueabihf": "2.9.1", "@tauri-apps/cli-linux-arm64-gnu": "2.9.1", "@tauri-apps/cli-linux-arm64-musl": "2.9.1", "@tauri-apps/cli-linux-riscv64-gnu": "2.9.1", "@tauri-apps/cli-linux-x64-gnu": "2.9.1", "@tauri-apps/cli-linux-x64-musl": "2.9.1", "@tauri-apps/cli-win32-arm64-msvc": "2.9.1", "@tauri-apps/cli-win32-ia32-msvc": "2.9.1", "@tauri-apps/cli-win32-x64-msvc": "2.9.1" }, "bin": { "tauri": "tauri.js" } }, "sha512-kKi2/WWsNXKoMdatBl4xrT7e1Ce27JvsetBVfWuIb6D3ep/Y0WO5SIr70yarXOSWam8NyDur4ipzjZkg6m7VDg=="],
"@tauri-apps/cli": ["@tauri-apps/cli@2.10.0", "", { "optionalDependencies": { "@tauri-apps/cli-darwin-arm64": "2.10.0", "@tauri-apps/cli-darwin-x64": "2.10.0", "@tauri-apps/cli-linux-arm-gnueabihf": "2.10.0", "@tauri-apps/cli-linux-arm64-gnu": "2.10.0", "@tauri-apps/cli-linux-arm64-musl": "2.10.0", "@tauri-apps/cli-linux-riscv64-gnu": "2.10.0", "@tauri-apps/cli-linux-x64-gnu": "2.10.0", "@tauri-apps/cli-linux-x64-musl": "2.10.0", "@tauri-apps/cli-win32-arm64-msvc": "2.10.0", "@tauri-apps/cli-win32-ia32-msvc": "2.10.0", "@tauri-apps/cli-win32-x64-msvc": "2.10.0" }, "bin": { "tauri": "tauri.js" } }, "sha512-ZwT0T+7bw4+DPCSWzmviwq5XbXlM0cNoleDKOYPFYqcZqeKY31KlpoMW/MOON/tOFBPgi31a2v3w9gliqwL2+Q=="],
"@tauri-apps/cli-darwin-arm64": ["@tauri-apps/cli-darwin-arm64@2.9.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sdwhtsE/6njD0AjgfYEj1JyxZH4SBmCJSXpRm6Ph5fQeuZD6MyjzjdVOrrtFguyREVQ7xn0Ujkwvbo01ULthNg=="],
"@tauri-apps/cli-darwin-arm64": ["@tauri-apps/cli-darwin-arm64@2.10.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-avqHD4HRjrMamE/7R/kzJPcAJnZs0IIS+1nkDP5b+TNBn3py7N2aIo9LIpy+VQq0AkN8G5dDpZtOOBkmWt/zjA=="],
"@tauri-apps/cli-darwin-x64": ["@tauri-apps/cli-darwin-x64@2.9.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-c86g+67wTdI4TUCD7CaSd/13+oYuLQxVST4ZNJ5C+6i1kdnU3Us1L68N9MvbDLDQGJc9eo0pvuK6sCWkee+BzA=="],
"@tauri-apps/cli-darwin-x64": ["@tauri-apps/cli-darwin-x64@2.10.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-keDmlvJRStzVFjZTd0xYkBONLtgBC9eMTpmXnBXzsHuawV2q9PvDo2x6D5mhuoMVrJ9QWjgaPKBBCFks4dK71Q=="],
"@tauri-apps/cli-linux-arm-gnueabihf": ["@tauri-apps/cli-linux-arm-gnueabihf@2.9.1", "", { "os": "linux", "cpu": "arm" }, "sha512-IrB3gFQmueQKJjjisOcMktW/Gh6gxgqYO419doA3YZ7yIV5rbE8ZW52Q3I4AO+SlFEyVYer5kpi066p0JBlLGw=="],
"@tauri-apps/cli-linux-arm-gnueabihf": ["@tauri-apps/cli-linux-arm-gnueabihf@2.10.0", "", { "os": "linux", "cpu": "arm" }, "sha512-e5u0VfLZsMAC9iHaOEANumgl6lfnJx0Dtjkd8IJpysZ8jp0tJ6wrIkto2OzQgzcYyRCKgX72aKE0PFgZputA8g=="],
"@tauri-apps/cli-linux-arm64-gnu": ["@tauri-apps/cli-linux-arm64-gnu@2.9.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Ke7TyXvu6HbWSkmVkFbbH19D3cLsd117YtXP/u9NIvSpYwKeFtnbpirrIUfPm44Q+PZFZ2Hvg8X9qoUiAK0zKw=="],
"@tauri-apps/cli-linux-arm64-gnu": ["@tauri-apps/cli-linux-arm64-gnu@2.10.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-YrYYk2dfmBs5m+OIMCrb+JH/oo+4FtlpcrTCgiFYc7vcs6m3QDd1TTyWu0u01ewsCtK2kOdluhr/zKku+KP7HA=="],
"@tauri-apps/cli-linux-arm64-musl": ["@tauri-apps/cli-linux-arm64-musl@2.9.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-sGvy75sv55oeMulR5ArwPD28DsDQxqTzLhXCrpU9/nbFg/JImmI7k994YE9fr3V0qE3Cjk5gjLldRNv7I9sjwQ=="],
"@tauri-apps/cli-linux-arm64-musl": ["@tauri-apps/cli-linux-arm64-musl@2.10.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-GUoPdVJmrJRIXFfW3Rkt+eGK9ygOdyISACZfC/bCSfOnGt8kNdQIQr5WRH9QUaTVFIwxMlQyV3m+yXYP+xhSVA=="],
"@tauri-apps/cli-linux-riscv64-gnu": ["@tauri-apps/cli-linux-riscv64-gnu@2.9.1", "", { "os": "linux", "cpu": "none" }, "sha512-tEKbJydV3BdIxpAx8aGHW6VDg1xW4LlQuRD/QeFZdZNTreHJpMbJEcdvAcI+Hg6vgQpVpaoEldR9W4F6dYSLqQ=="],
"@tauri-apps/cli-linux-riscv64-gnu": ["@tauri-apps/cli-linux-riscv64-gnu@2.10.0", "", { "os": "linux", "cpu": "none" }, "sha512-JO7s3TlSxshwsoKNCDkyvsx5gw2QAs/Y2GbR5UE2d5kkU138ATKoPOtxn8G1fFT1aDW4LH0rYAAfBpGkDyJJnw=="],
"@tauri-apps/cli-linux-x64-gnu": ["@tauri-apps/cli-linux-x64-gnu@2.9.1", "", { "os": "linux", "cpu": "x64" }, "sha512-mg5msXHagtHpyCVWgI01M26JeSrgE/otWyGdYcuTwyRYZYEJRTbcNt7hscOkdNlPBe7isScW7PVKbxmAjJJl4g=="],
"@tauri-apps/cli-linux-x64-gnu": ["@tauri-apps/cli-linux-x64-gnu@2.10.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Uvh4SUUp4A6DVRSMWjelww0GnZI3PlVy7VS+DRF5napKuIehVjGl9XD0uKoCoxwAQBLctvipyEK+pDXpJeoHng=="],
"@tauri-apps/cli-linux-x64-musl": ["@tauri-apps/cli-linux-x64-musl@2.9.1", "", { "os": "linux", "cpu": "x64" }, "sha512-lFZEXkpDreUe3zKilvnMsrnKP9gwQudaEjDnOz/GMzbzNceIuPfFZz0cR/ky1Aoq4eSvZonPKHhROq4owz4fzg=="],
"@tauri-apps/cli-linux-x64-musl": ["@tauri-apps/cli-linux-x64-musl@2.10.0", "", { "os": "linux", "cpu": "x64" }, "sha512-AP0KRK6bJuTpQ8kMNWvhIpKUkQJfcPFeba7QshOQZjJ8wOS6emwTN4K5g/d3AbCMo0RRdnZWwu67MlmtJyxC1Q=="],
"@tauri-apps/cli-win32-arm64-msvc": ["@tauri-apps/cli-win32-arm64-msvc@2.9.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-ejc5RAp/Lm1Aj0EQHaT+Wdt5PHfdgQV5hIDV00MV6HNbIb5W4ZUFxMDaRkAg65gl9MvY2fH396riePW3RoKXDw=="],
"@tauri-apps/cli-win32-arm64-msvc": ["@tauri-apps/cli-win32-arm64-msvc@2.10.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-97DXVU3dJystrq7W41IX+82JEorLNY+3+ECYxvXWqkq7DBN6FsA08x/EFGE8N/b0LTOui9X2dvpGGoeZKKV08g=="],
"@tauri-apps/cli-win32-ia32-msvc": ["@tauri-apps/cli-win32-ia32-msvc@2.9.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-fSATtJDc0fNjVB6ystyi8NbwhNFk8i8E05h6KrsC8Fio5eaJIJvPCbC9pdrPl6kkxN1X7fj25ErBbgfqgcK8Fg=="],
"@tauri-apps/cli-win32-ia32-msvc": ["@tauri-apps/cli-win32-ia32-msvc@2.10.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-EHyQ1iwrWy1CwMalEm9z2a6L5isQ121pe7FcA2xe4VWMJp+GHSDDGvbTv/OPdkt2Lyr7DAZBpZHM6nvlHXEc4A=="],
"@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.9.1", "", { "os": "win32", "cpu": "x64" }, "sha512-/JHlOzpUDhjBOO9w167bcYxfJbcMQv7ykS/Y07xjtcga8np0rzUzVGWYmLMH7orKcDMC7wjhheEW1x8cbGma/Q=="],
"@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.10.0", "", { "os": "win32", "cpu": "x64" }, "sha512-NTpyQxkpzGmU6ceWBTY2xRIEaS0ZLbVx1HE1zTA3TY/pV3+cPoPPOs+7YScr4IMzXMtOw7tLw5LEXo5oIG3qaQ=="],
"@tauri-apps/plugin-autostart": ["@tauri-apps/plugin-autostart@2.5.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-zS/xx7yzveCcotkA+8TqkI2lysmG2wvQXv2HGAVExITmnFfHAdj1arGsbbfs3o6EktRHf6l34pJxc3YGG2mg7w=="],
@ -330,7 +330,7 @@
"@tauri-apps/plugin-store": ["@tauri-apps/plugin-store@2.4.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-ckGSEzZ5Ii4Hf2D5x25Oqnm2Zf9MfDWAzR+volY0z/OOBz6aucPKEY0F649JvQ0Vupku6UJo7ugpGRDOFOunkA=="],
"@tauri-apps/plugin-updater": ["@tauri-apps/plugin-updater@2.9.0", "", { "dependencies": { "@tauri-apps/api": "^2.6.0" } }, "sha512-j++sgY8XpeDvzImTrzWA08OqqGqgkNyxczLD7FjNJJx/uXxMZFz5nDcfkyoI/rCjYuj2101Tci/r/HFmOmoxCg=="],
"@tauri-apps/plugin-updater": ["@tauri-apps/plugin-updater@2.10.0", "", { "dependencies": { "@tauri-apps/api": "^2.10.1" } }, "sha512-ljN8jPlnT0aSn8ecYhuBib84alxfMx6Hc8vJSKMJyzGbTPFZAC44T2I1QNFZssgWKrAlofvJqCC6Rr472JWfkQ=="],
"@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
@ -736,12 +736,34 @@
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"@tauri-apps/plugin-autostart/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-clipboard-manager/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-dialog/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-fs/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-global-shortcut/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-opener/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-os/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-process/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-sql/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@tauri-apps/plugin-store/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
"eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
"playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
"tauri-plugin-macos-permissions-api/@tauri-apps/api": ["@tauri-apps/api@2.9.0", "", {}, "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw=="],
"@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
}
}

View file

@ -20,7 +20,7 @@
},
"dependencies": {
"@tailwindcss/vite": "^4.1.16",
"@tauri-apps/api": "^2.9.0",
"@tauri-apps/api": "^2.10.0",
"@tauri-apps/plugin-autostart": "~2.5.1",
"@tauri-apps/plugin-clipboard-manager": "~2.3.2",
"@tauri-apps/plugin-dialog": "~2",
@ -31,7 +31,7 @@
"@tauri-apps/plugin-process": "~2.3.1",
"@tauri-apps/plugin-sql": "~2.3.1",
"@tauri-apps/plugin-store": "~2.4.1",
"@tauri-apps/plugin-updater": "~2.9.0",
"@tauri-apps/plugin-updater": "~2.10.0",
"i18next": "^25.7.2",
"immer": "^11.1.3",
"lucide-react": "^0.542.0",
@ -47,7 +47,7 @@
},
"devDependencies": {
"@playwright/test": "^1.58.0",
"@tauri-apps/cli": "^2.9.1",
"@tauri-apps/cli": "^2.10.0",
"@types/node": "^24.9.1",
"@types/react": "^18.3.26",
"@types/react-dom": "^18.3.7",

2077
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -30,7 +30,7 @@ serde = { version = "1", features = ["derive"] }
[dependencies]
once_cell = "1"
tauri = { version = "2.9.1", features = [
tauri = { version = "2.10.2", features = [
"protocol-asset",
"macos-private-api",
"tray-icon",
@ -68,14 +68,14 @@ chrono = "0.4"
rusqlite = { version = "0.37", features = ["bundled"] }
tar = "0.4.44"
flate2 = "1.0"
transcribe-rs = { version = "0.2.5", features = ["whisper", "parakeet", "moonshine", "sense_voice"] }
transcribe-rs = { version = "0.2.7", features = ["whisper", "parakeet", "moonshine", "sense_voice", "gigaam"] }
handy-keys = "0.2.1"
ferrous-opencc = "0.2.3"
clap = { version = "4", features = ["derive"] }
specta = "=2.0.0-rc.22"
specta-typescript = "0.0.9"
tauri-specta = { version = "=2.0.0-rc.21", features = ["derive", "typescript"] }
tauri-plugin-dialog = "2"
tauri-plugin-dialog = "~2.4"
[target.'cfg(unix)'.dependencies]
signal-hook = "0.3"
@ -84,7 +84,7 @@ signal-hook = "0.3"
tauri-plugin-autostart = "2.5.1"
tauri-plugin-global-shortcut = "2.3.1"
tauri-plugin-single-instance = "2.3.2"
tauri-plugin-updater = "2.9.0"
tauri-plugin-updater = "2.10.0"
[target.'cfg(windows)'.dependencies]
windows = { version = "0.61.3", features = [
@ -103,9 +103,9 @@ gtk-layer-shell = { version = "0.8", features = ["v0_6"] }
gtk = "0.18"
[patch.crates-io]
tauri-runtime = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.9.1" }
tauri-runtime-wry = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.9.1" }
tauri-utils = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.9.1" }
tauri-runtime = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.10.2" }
tauri-runtime-wry = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.10.2" }
tauri-utils = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.10.2" }
[dev-dependencies]
tempfile = "3"

View file

@ -23,6 +23,7 @@ pub enum EngineType {
Moonshine,
MoonshineStreaming,
SenseVoice,
GigaAM,
}
#[derive(Debug, Clone, Serialize, Deserialize, Type)]
@ -397,6 +398,32 @@ impl ModelManager {
},
);
// GigaAM v3 supported languages
let gigaam_languages: Vec<String> = vec!["ru"].into_iter().map(String::from).collect();
available_models.insert(
"gigaam-v3-e2e-ctc".to_string(),
ModelInfo {
id: "gigaam-v3-e2e-ctc".to_string(),
name: "GigaAM v3".to_string(),
description: "Russian speech recognition. Fast and accurate.".to_string(),
filename: "giga-am-v3.int8.onnx".to_string(),
url: Some("https://blob.handy.computer/giga-am-v3.int8.onnx".to_string()),
size_mb: 225,
is_downloaded: false,
is_downloading: false,
partial_size: 0,
is_directory: false,
engine_type: EngineType::GigaAM,
accuracy_score: 0.85,
speed_score: 0.75,
supports_translation: false,
is_recommended: false,
supported_languages: gigaam_languages,
is_custom: false,
},
);
// Auto-discover custom Whisper models (.bin files) in the models directory
if let Err(e) = Self::discover_custom_whisper_models(&models_dir, &mut available_models) {
warn!("Failed to discover custom models: {}", e);

View file

@ -12,6 +12,7 @@ use std::time::{Duration, SystemTime};
use tauri::{AppHandle, Emitter};
use transcribe_rs::{
engines::{
gigaam::GigaAMEngine,
moonshine::{
ModelVariant, MoonshineEngine, MoonshineModelParams, MoonshineStreamingEngine,
StreamingModelParams,
@ -42,6 +43,7 @@ enum LoadedEngine {
Moonshine(MoonshineEngine),
MoonshineStreaming(MoonshineStreamingEngine),
SenseVoice(SenseVoiceEngine),
GigaAM(GigaAMEngine),
}
#[derive(Clone)]
@ -165,6 +167,7 @@ impl TranscriptionManager {
LoadedEngine::Moonshine(ref mut e) => e.unload_model(),
LoadedEngine::MoonshineStreaming(ref mut e) => e.unload_model(),
LoadedEngine::SenseVoice(ref mut e) => e.unload_model(),
LoadedEngine::GigaAM(ref mut e) => e.unload_model(),
}
}
*engine = None; // Drop the engine to free memory
@ -346,6 +349,23 @@ impl TranscriptionManager {
})?;
LoadedEngine::SenseVoice(engine)
}
EngineType::GigaAM => {
let mut engine = GigaAMEngine::new();
engine.load_model(&model_path).map_err(|e| {
let error_msg = format!("Failed to load gigaam model {}: {}", model_id, e);
let _ = self.app_handle.emit(
"model-state-changed",
ModelStateEvent {
event_type: "loading_failed".to_string(),
model_id: Some(model_id.to_string()),
model_name: Some(model_info.name.clone()),
error: Some(error_msg.clone()),
},
);
anyhow::anyhow!(error_msg)
})?;
LoadedEngine::GigaAM(engine)
}
};
// Update the current engine and model ID
@ -526,6 +546,9 @@ impl TranscriptionManager {
anyhow::anyhow!("SenseVoice transcription failed: {}", e)
})
}
LoadedEngine::GigaAM(gigaam_engine) => gigaam_engine
.transcribe_samples(audio, None)
.map_err(|e| anyhow::anyhow!("GigaAM transcription failed: {}", e)),
}
},
));

View file

@ -744,7 +744,7 @@ export type AutoSubmitKey = "enter" | "ctrl_enter" | "cmd_enter"
export type BindingResponse = { success: boolean; binding: ShortcutBinding | null; error: string | null }
export type ClipboardHandling = "dont_modify" | "copy_to_clipboard"
export type CustomSounds = { start: boolean; stop: boolean }
export type EngineType = "Whisper" | "Parakeet" | "Moonshine" | "MoonshineStreaming" | "SenseVoice"
export type EngineType = "Whisper" | "Parakeet" | "Moonshine" | "MoonshineStreaming" | "SenseVoice" | "GigaAM"
export type HistoryEntry = { id: number; file_name: string; timestamp: number; saved: boolean; title: string; transcription_text: string; post_processed_text: string | null; post_process_prompt: string | null }
/**
* Result of changing keyboard implementation

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "سريع جداً. الصينية، الإنجليزية، اليابانية، الكورية، الكانتونية."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "التعرف على الكلام الروسي. سريع ودقيق."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Velmi rychlý. Čínština, angličtina, japonština, korejština, kantonština."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Rozpoznávání ruské řeči. Rychlé a přesné."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Sehr schnell. Chinesisch, Englisch, Japanisch, Koreanisch, Kantonesisch."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Russische Spracherkennung. Schnell und präzise."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Very fast. Chinese, English, Japanese, Korean, Cantonese."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Russian speech recognition. Fast and accurate."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Muy rápido. Chino, inglés, japonés, coreano, cantonés."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Reconocimiento de voz en ruso. Rápido y preciso."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Très rapide. Chinois, anglais, japonais, coréen, cantonais."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Reconnaissance vocale en russe. Rapide et précis."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Molto veloce. Cinese, inglese, giapponese, coreano, cantonese."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Riconoscimento vocale in russo. Veloce e preciso."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "非常に高速。中国語、英語、日本語、韓国語、広東語。"
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "ロシア語音声認識。高速かつ高精度。"
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "매우 빠름. 중국어, 영어, 일본어, 한국어, 광둥어."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "러시아어 음성 인식. 빠르고 정확함."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Bardzo szybki. Chiński, angielski, japoński, koreański, kantoński."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Rozpoznawanie mowy rosyjskiej. Szybkie i dokładne."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Muito rápido. Chinês, inglês, japonês, coreano, cantonês."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Reconhecimento de voz em russo. Rápido e preciso."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Очень быстрый. Китайский, английский, японский, корейский, кантонский."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Распознавание русской речи. Быстро и точно."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Çok hızlı. Çince, İngilizce, Japonca, Korece, Kantonca."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Rusça konuşma tanıma. Hızlı ve doğru."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Дуже швидкий. Китайська, англійська, японська, корейська, кантонська."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Розпізнавання російського мовлення. Швидко і точно."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "Rất nhanh. Tiếng Trung, tiếng Anh, tiếng Nhật, tiếng Hàn, tiếng Quảng Đông."
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "Nhận dạng giọng nói tiếng Nga. Nhanh và chính xác."
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "速度極快。支援中文、英語、日語、韓語、粵語。"
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "俄語語音辨識。快速且準確。"
}
},
"errors": {

View file

@ -75,6 +75,10 @@
"sense-voice-int8": {
"name": "SenseVoice",
"description": "非常快速。支持中文、英语、日语、韩语、粤语。"
},
"gigaam-v3-e2e-ctc": {
"name": "GigaAM v3",
"description": "俄语语音识别。快速且准确。"
}
},
"errors": {