Add pwa & stuff #75

Merged
alois merged 48 commits from dev into main 2026-08-18 22:32:16 +03:00
27 changed files with 1950 additions and 793 deletions
Showing only changes of commit c182f2e9ac - Show all commits

Merge branch 'dev' of ssh://git.methanium.net/Tensamin/Client into dev

Alex 2026-08-07 23:09:03 +02:00
Signed by: alex
SSH key fingerprint: SHA256:D1+Ub8o0v4K5y1JNivW8IxEOelqLSvPmUzBbDIoZkRQ

View file

@ -33,7 +33,7 @@
"@types/node": "^25.9.1",
"electron": "^39.2.7",
"electron-builder": "^26.0.12",
"esbuild": "^0.25.11",
"esbuild": "^0.28.0",
"typescript": "~6.0.3"
},
"build": {

View file

@ -560,6 +560,17 @@ dependencies = [
"uuid",
]
[[package]]
name = "cfb"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3"
dependencies = [
"fnv",
"uuid",
"web-time",
]
[[package]]
name = "cfg-expr"
version = "0.15.8"
@ -832,7 +843,20 @@ version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2"
dependencies = [
"cssparser-macros",
"cssparser-macros 0.6.1",
"dtoa-short",
"itoa",
"phf",
"smallvec",
]
[[package]]
name = "cssparser"
version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98"
dependencies = [
"cssparser-macros 0.7.0",
"dtoa-short",
"itoa",
"phf",
@ -849,6 +873,16 @@ dependencies = [
"syn 2.0.119",
]
[[package]]
name = "cssparser-macros"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10a2a99df6e410a8ff4245aa2006499ea662245f967cc7c0a38c83ef8eb44dbf"
dependencies = [
"quote",
"syn 2.0.119",
]
[[package]]
name = "ctor"
version = "0.8.0"
@ -1128,11 +1162,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89"
dependencies = [
"bit-set",
"cssparser",
"cssparser 0.36.0",
"foldhash",
"html5ever",
"html5ever 0.38.0",
"precomputed-hash",
"selectors",
"selectors 0.36.1",
"tendril",
]
[[package]]
name = "dom_query"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fac5fca71e65e94cc718a6e2af65d6e0f9c6027751c2aa562fbb5087fda639bc"
dependencies = [
"bit-set",
"cssparser 0.37.0",
"foldhash",
"html5ever 0.39.0",
"precomputed-hash",
"selectors 0.38.0",
"tendril",
]
@ -1976,7 +2025,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2"
dependencies = [
"log",
"markup5ever",
"markup5ever 0.38.0",
]
[[package]]
name = "html5ever"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8"
dependencies = [
"log",
"markup5ever 0.39.0",
]
[[package]]
@ -2273,7 +2332,16 @@ version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7"
dependencies = [
"cfb",
"cfb 0.7.3",
]
[[package]]
name = "infer"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4"
dependencies = [
"cfb 0.14.0",
]
[[package]]
@ -2636,6 +2704,17 @@ dependencies = [
"web_atoms",
]
[[package]]
name = "markup5ever"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de"
dependencies = [
"log",
"tendril",
"web_atoms",
]
[[package]]
name = "memchr"
version = "2.8.3"
@ -4234,7 +4313,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c"
dependencies = [
"bitflags 2.13.1",
"cssparser",
"cssparser 0.36.0",
"derive_more",
"log",
"new_debug_unreachable",
"phf",
"phf_codegen",
"precomputed-hash",
"rustc-hash",
"servo_arc",
"smallvec",
]
[[package]]
name = "selectors"
version = "0.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d"
dependencies = [
"bitflags 2.13.1",
"cssparser 0.37.0",
"derive_more",
"log",
"new_debug_unreachable",
@ -4863,7 +4961,7 @@ dependencies = [
"serde_repr",
"serialize-to-javascript",
"swift-rs",
"tauri-build",
"tauri-build 2.6.3 (git+https://github.com/tauri-apps/tauri?rev=4af26a3f7f8b692d62cca549bbacd93f5ce90b41)",
"tauri-macros",
"tauri-runtime",
"tauri-runtime-wry",
@ -4898,6 +4996,26 @@ dependencies = [
"walkdir",
]
[[package]]
name = "tauri-build"
version = "2.6.3"
source = "git+https://github.com/tauri-apps/tauri?rev=c0bd0d5a61eedba5c4783add24455c5028c6f390#c0bd0d5a61eedba5c4783add24455c5028c6f390"
dependencies = [
"anyhow",
"cargo_toml",
"dirs",
"glob",
"heck 0.5.0",
"json-patch 4.2.0",
"schemars 0.8.22",
"semver",
"serde",
"serde_json",
"tauri-utils 2.9.3 (git+https://github.com/tauri-apps/tauri?rev=c0bd0d5a61eedba5c4783add24455c5028c6f390)",
"tauri-winres",
"walkdir",
]
[[package]]
name = "tauri-codegen"
version = "2.6.3"
@ -5106,11 +5224,11 @@ dependencies = [
"anyhow",
"cargo_metadata",
"ctor 0.8.0",
"dom_query",
"dom_query 0.27.0",
"dunce",
"glob",
"http",
"infer",
"infer 0.19.0",
"json-patch 3.0.1",
"log",
"memchr",
@ -5142,11 +5260,11 @@ dependencies = [
"brotli",
"cargo_metadata",
"ctor 1.0.12",
"dom_query",
"dom_query 0.27.0",
"dunce",
"glob",
"http",
"infer",
"infer 0.19.0",
"json-patch 4.2.0",
"log",
"memchr",
@ -5170,6 +5288,42 @@ dependencies = [
"walkdir",
]
[[package]]
name = "tauri-utils"
version = "2.9.3"
source = "git+https://github.com/tauri-apps/tauri?rev=c0bd0d5a61eedba5c4783add24455c5028c6f390#c0bd0d5a61eedba5c4783add24455c5028c6f390"
dependencies = [
"anyhow",
"cargo_metadata",
"ctor 1.0.12",
"dom_query 0.28.0",
"dunce",
"glob",
"http",
"infer 0.22.0",
"json-patch 4.2.0",
"log",
"memchr",
"phf",
"plist",
"proc-macro2",
"quote",
"regex",
"schemars 0.8.22",
"semver",
"serde",
"serde-untagged",
"serde_json",
"serde_with",
"swift-rs",
"thiserror 2.0.19",
"toml 1.1.4+spec-1.1.0",
"url",
"urlpattern 0.6.0",
"uuid",
"walkdir",
]
[[package]]
name = "tauri-winres"
version = "0.3.6"
@ -5216,17 +5370,17 @@ dependencies = [
[[package]]
name = "tensamin"
version = "0.0.0"
version = "0.0.11"
dependencies = [
"base64 0.22.1",
"jni 0.21.1",
"jni 0.22.4",
"mtp",
"mtp-transport",
"reqwest 0.12.28",
"serde",
"serde_json",
"tauri",
"tauri-build",
"tauri-build 2.6.3 (git+https://github.com/tauri-apps/tauri?rev=c0bd0d5a61eedba5c4783add24455c5028c6f390)",
"tauri-plugin-barcode-scanner",
"tauri-plugin-deep-link",
"tauri-plugin-log",
@ -6451,7 +6605,7 @@ dependencies = [
"cookie",
"crossbeam-channel",
"dirs",
"dom_query",
"dom_query 0.27.0",
"dpi",
"dunce",
"gdkx11",

View file

@ -15,7 +15,7 @@ name = "mobile_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { git = "https://github.com/tauri-apps/tauri", rev = "4af26a3f7f8b692d62cca549bbacd93f5ce90b41", features = [] }
tauri-build = { git = "https://github.com/tauri-apps/tauri", rev = "c0bd0d5a61eedba5c4783add24455c5028c6f390", features = [] }
[dependencies]
tauri-plugin-opener = "2"
@ -37,7 +37,7 @@ features = []
default-features = true
[target.'cfg(target_os = "android")'.dependencies]
jni = "0.21"
jni = "0.22"
[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies]
tauri-plugin-barcode-scanner = "2"

View file

@ -74,13 +74,13 @@ rust {
}
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
implementation("androidx.webkit:webkit:1.16.0")
implementation("androidx.appcompat:appcompat:1.7.1")
implementation("androidx.activity:activity-ktx:1.10.1")
implementation("com.google.android.material:material:1.12.0")
implementation("androidx.activity:activity-ktx:1.13.0")
implementation("com.google.android.material:material:1.14.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.4")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
androidTestImplementation("androidx.test.ext:junit:1.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
}
apply(from = "tauri.build.gradle.kts")

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

View file

@ -8,15 +8,30 @@ import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.pm.ServiceInfo
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.os.Build
import android.os.IBinder
import androidx.core.app.NotificationCompat
class MtpForegroundService : Service() {
private var started = false
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) = refreshNotification()
override fun onLost(network: Network) = refreshNotification()
override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) =
refreshNotification()
}
override fun onBind(intent: Intent?): IBinder? = null
override fun onCreate() {
super.onCreate()
getSystemService(ConnectivityManager::class.java)
.registerDefaultNetworkCallback(networkCallback)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
if (intent?.action == ACTION_STOP) {
MtpSecureStore.setEnabled(this, false)
@ -28,7 +43,8 @@ class MtpForegroundService : Service() {
if (started) return START_STICKY
createChannel(this)
val notification = buildNotification(this, "Connecting")
connectionStatus = "Connecting"
val notification = buildNotification(this, displayedStatus(this))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startForeground(
NOTIFICATION_ID,
@ -65,20 +81,37 @@ class MtpForegroundService : Service() {
}
override fun onDestroy() {
getSystemService(ConnectivityManager::class.java).unregisterNetworkCallback(networkCallback)
if (!MtpSecureStore.isEnabled(this)) NativeMtpBridge.nativeStop()
super.onDestroy()
}
private fun refreshNotification() {
updateNotification(this, connectionStatus)
}
companion object {
private const val CHANNEL_ID = "tensamin-connection"
private const val NOTIFICATION_ID = 2201
private const val ACTION_STOP = "net.tensamin.client.STOP_MTP"
@Volatile private var connectionStatus = "Connecting"
fun updateNotification(context: Context, status: String) {
if (!MtpSecureStore.isEnabled(context)) return
connectionStatus = status
createChannel(context)
context.getSystemService(NotificationManager::class.java)
.notify(NOTIFICATION_ID, buildNotification(context, status))
.notify(NOTIFICATION_ID, buildNotification(context, displayedStatus(context)))
}
private fun displayedStatus(context: Context): String {
val connectivity = context.getSystemService(ConnectivityManager::class.java)
val network = connectivity.activeNetwork ?: return "No network"
val capabilities = connectivity.getNetworkCapabilities(network) ?: return "No network"
return if (
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
) connectionStatus else "No network"
}
private fun createChannel(context: Context) {

View file

@ -6,8 +6,8 @@ buildscript {
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:8.11.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25")
classpath("com.android.tools.build:gradle:8.13.2")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.20")
}
}

View file

@ -18,6 +18,6 @@ repositories {
dependencies {
compileOnly(gradleApi())
implementation("com.android.tools.build:gradle:8.11.0")
implementation("com.android.tools.build:gradle:8.13.2")
}

View file

@ -108,10 +108,10 @@
"react-remove-scroll-bar": "^2.3.7",
"react-resizable-panels": "^4.11.2",
"react-style-singleton": "^2.2.3",
"recharts": "3.8.1",
"recharts": "3.10.1",
"redux": "^5.0.0",
"redux-thunk": "^3.1.0",
"reselect": "5.1.1",
"reselect": "5.2.0",
"scheduler": "^0.27.0",
"seroval": "^1.5.4",
"seroval-plugins": "^1.5.4",
@ -136,7 +136,7 @@
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^6.0.1",
"esbuild": "^0.25.11",
"esbuild": "^0.28.0",
"eslint": "^10.0.3",
"globals": "^17.4.0",
"typescript": "~6.0.3",

View file

@ -16,8 +16,8 @@
let
systems = [ "x86_64-linux" ];
forAllSystems = nixpkgs.lib.genAttrs systems;
version = "0.0.10";
x86_64DebHash = "sha256-R7ufXBPL2+jsgtbcIjPg55RU6m39odaC5IeLI1nYU48=";
version = "0.0.11";
x86_64DebHash = "sha256-E4FGMpCt2ByaN6d+YzglqeA6LbhMOQmPf3UzAj7uZXE=";
forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}";
in
{

View file

@ -0,0 +1,15 @@
Copyright (c) 2025 Methanium
All rights reserved.
No part of this software, source code, documentation, or
associated materials may be copied, reproduced, modified,
distributed, published, sublicensed, sold, or used to create
derivative works without prior written permission from the
copyright holder.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY
OF ANY KIND, EXPRESS OR IMPLIED. TO THE MAXIMUM
EXTENT PERMITTED BY LAW, THE COPYRIGHT HOLDER SHALL
NOT BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
LIABILITY ARISING FROM THE SOFTWARE OR ITS USE.

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 简静凡
Copyright (c) 2026 Tanner Linsley
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -22,13 +22,13 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@base-ui_react@1.6.0`
- Source package dir: `apps/web/node_modules/@base-ui/react`
## @base-ui/utils@0.3.1
## @base-ui/utils@0.3.2
- License: MIT
- Repository: git+https://github.com/mui/base-ui.git
- Description: A collection of React utility functions for Base UI.
- Included files: LICENSE
- Folder: `licenses/@base-ui_utils@0.3.1`
- Folder: `licenses/@base-ui_utils@0.3.2`
- Source package dir: `apps/web/node_modules/@base-ui/utils`
## @codemirror/autocomplete@6.20.3
@ -163,6 +163,13 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@livekit_components-react@2.9.21`
- Source package dir: `packages/call/node_modules/@livekit/components-react`
## @methanium/ui@0.0.22
- License: UNKNOWN
- Included files: LICENSE
- Folder: `licenses/@methanium_ui@0.0.22`
- Source package dir: `apps/tauri/node_modules/@methanium/ui`
## @radix-ui/primitive@1.1.4
- License: MIT
@ -289,13 +296,13 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@radix-ui_react-use-controllable-state@1.2.3`
- Source package dir: `apps/web/node_modules/@radix-ui/react-use-controllable-state`
## @radix-ui/react-use-effect-event@0.0.2
## @radix-ui/react-use-effect-event@0.0.5
- License: MIT
- Homepage: https://radix-ui.com/primitives
- Repository: git+https://github.com/radix-ui/primitives.git
- Included files: LICENSE
- Folder: `licenses/@radix-ui_react-use-effect-event@0.0.2`
- Folder: `licenses/@radix-ui_react-use-effect-event@0.0.5`
- Source package dir: `apps/web/node_modules/@radix-ui/react-use-effect-event`
## @radix-ui/react-use-layout-effect@1.1.2
@ -327,14 +334,14 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@tailwindcss_vite@4.3.2`
- Source package dir: `apps/web/node_modules/@tailwindcss/vite`
## @tanstack/devtools-event-client@0.3.5
## @tanstack/devtools-event-client@0.5.0
- License: MIT
- Homepage: https://tanstack.com/devtools
- Repository: https://github.com/TanStack/devtools.git
- Repository: git+https://github.com/TanStack/devtools.git
- Description: TanStack Event Client is a lightweight event client for TanStack Devtools event bus.
- Included files: LICENSE
- Folder: `licenses/@tanstack_devtools-event-client@0.3.5`
- Folder: `licenses/@tanstack_devtools-event-client@0.5.0`
- Source package dir: `apps/web/node_modules/@tanstack/devtools-event-client`
## @tanstack/history@1.162.0
@ -367,6 +374,16 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@tanstack_query-core@5.101.2`
- Source package dir: `apps/web/node_modules/@tanstack/query-core`
## @tanstack/react-hotkeys@0.10.0
- License: MIT
- Homepage: https://tanstack.com/hotkeys
- Repository: git+https://github.com/TanStack/hotkeys.git
- Description: React adapter for TanStack Hotkeys
- Included files: LICENSE
- Folder: `licenses/@tanstack_react-hotkeys@0.10.0`
- Source package dir: `packages/hotkeys/node_modules/@tanstack/react-hotkeys`
## @tanstack/react-query@5.101.2
- License: MIT
@ -387,14 +404,14 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@tanstack_react-router@1.170.17`
- Source package dir: `apps/web/node_modules/@tanstack/react-router`
## @tanstack/react-store@0.9.3
## @tanstack/react-store@0.11.0
- License: MIT
- Homepage: https://tanstack.com/store
- Repository: https://github.com/TanStack/store.git
- Description: Framework agnostic type-safe store w/ reactive framework adapters
- Included files: LICENSE
- Folder: `licenses/@tanstack_react-store@0.9.3`
- Folder: `licenses/@tanstack_react-store@0.11.0`
- Source package dir: `apps/web/node_modules/@tanstack/react-store`
## @tanstack/react-virtual@3.14.5
@ -417,14 +434,14 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@tanstack_router-core@1.171.14`
- Source package dir: `apps/web/node_modules/@tanstack/router-core`
## @tanstack/store@0.9.3
## @tanstack/store@0.11.0
- License: MIT
- Homepage: https://tanstack.com/store
- Repository: git+https://github.com/TanStack/store.git
- Description: Framework agnostic type-safe store w/ reactive framework adapters
- Included files: LICENSE
- Folder: `licenses/@tanstack_store@0.9.3`
- Folder: `licenses/@tanstack_store@0.11.0`
- Source package dir: `apps/web/node_modules/@tanstack/store`
## @tanstack/virtual-core@3.17.3
@ -492,13 +509,6 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/@tauri-apps_plugin-notification@2.3.3`
- Source package dir: `apps/tauri/node_modules/@tauri-apps/plugin-notification`
## @tensamin/ui@0.0.41
- License: UNKNOWN
- Included files: none found
- Folder: `licenses/@tensamin_ui@0.0.41`
- Source package dir: `apps/tauri/node_modules/@tensamin/ui`
## @twemoji/api@17.0.3
- License: MIT AND CC-BY-4.0
@ -743,14 +753,14 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/decimal.js-light@2.5.1`
- Source package dir: `apps/web/node_modules/decimal.js-light`
## deepfilternet3-noise-filter@1.2.1
## deepfilternet3-noise-filter@1.3.0
- License: (Apache-2.0 OR MIT)
- Homepage: https://github.com/mezonai/mezon-noise-suppression#readme
- Repository: git+https://github.com/mezonai/mezon-noise-suppression.git
- Description: Custom audio processor with DeepFilterNet3 noise filtering integrated with LiveKit client
- Included files: LICENSE-APACHE, LICENSE-MIT
- Folder: `licenses/deepfilternet3-noise-filter@1.2.1`
- Folder: `licenses/deepfilternet3-noise-filter@1.3.0`
- Source package dir: `packages/call/node_modules/deepfilternet3-noise-filter`
## detect-node-es@1.1.0
@ -841,13 +851,13 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/es-toolkit@1.49.0`
- Source package dir: `apps/web/node_modules/es-toolkit`
## esbuild@0.25.12
## esbuild@0.28.1
- License: MIT
- Repository: git+https://github.com/evanw/esbuild.git
- Description: An extremely fast JavaScript and CSS bundler and minifier.
- Included files: LICENSE.md
- Folder: `licenses/esbuild@0.25.12`
- Folder: `licenses/esbuild@0.28.1`
- Source package dir: `apps/electron/node_modules/esbuild`
## eslint@10.6.0
@ -1108,14 +1118,14 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/react-style-singleton@2.2.3`
- Source package dir: `apps/web/node_modules/react-style-singleton`
## recharts@3.8.1
## recharts@3.10.1
- License: MIT
- Homepage: https://github.com/recharts/recharts
- Repository: git+https://github.com/recharts/recharts.git
- Description: React charts
- Included files: LICENSE
- Folder: `licenses/recharts@3.8.1`
- Folder: `licenses/recharts@3.10.1`
- Source package dir: `apps/web/node_modules/recharts`
## redux@5.0.1
@ -1226,16 +1236,6 @@ Generated from pnpm-lock.yaml and installed packages in workspace node_modules f
- Folder: `licenses/tailwindcss@4.3.2`
- Source package dir: `apps/web/node_modules/tailwindcss`
## tauri-plugin-app-events-api@0.2.0
- License: MIT
- Homepage: https://github.com/wtto00/tauri-plugin-app-events#readme
- Repository: git+https://github.com/wtto00/tauri-plugin-app-events.git
- Description: A plugin for tauri@v2 to listen some events on iOS and Android.
- Included files: LICENSE
- Folder: `licenses/tauri-plugin-app-events-api@0.2.0`
- Source package dir: `packages/mtp/node_modules/tauri-plugin-app-events-api`
## tiny-invariant@1.3.3
- License: MIT

View file

@ -3,7 +3,7 @@
"specVersion": "1.5",
"version": 1,
"metadata": {
"timestamp": "2026-07-24T10:43:11.914Z",
"timestamp": "2026-08-06T09:49:26.512Z",
"tools": [
{
"vendor": "OpenAI",
@ -88,10 +88,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/%40base-ui/utils@0.3.1",
"bomRef": "pkg:npm/%40base-ui/utils@0.3.2",
"name": "@base-ui/utils",
"version": "0.3.1",
"purl": "pkg:npm/%40base-ui/utils@0.3.1",
"version": "0.3.2",
"purl": "pkg:npm/%40base-ui/utils@0.3.2",
"description": "A collection of React utility functions for Base UI.",
"licenses": [
{
@ -109,7 +109,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@base-ui_utils@0.3.1"
"value": "licenses/@base-ui_utils@0.3.2"
},
{
"name": "local:sourcePackageDir",
@ -578,6 +578,24 @@
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40methanium/ui@0.0.22",
"name": "@methanium/ui",
"version": "0.0.22",
"purl": "pkg:npm/%40methanium/ui@0.0.22",
"externalReferences": [],
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@methanium_ui@0.0.22"
},
{
"name": "local:sourcePackageDir",
"value": "apps/tauri/node_modules/@methanium/ui"
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40radix-ui/primitive@1.1.4",
@ -1056,10 +1074,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/%40radix-ui/react-use-effect-event@0.0.2",
"bomRef": "pkg:npm/%40radix-ui/react-use-effect-event@0.0.5",
"name": "@radix-ui/react-use-effect-event",
"version": "0.0.2",
"purl": "pkg:npm/%40radix-ui/react-use-effect-event@0.0.2",
"version": "0.0.5",
"purl": "pkg:npm/%40radix-ui/react-use-effect-event@0.0.5",
"licenses": [
{
"license": {
@ -1080,7 +1098,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@radix-ui_react-use-effect-event@0.0.2"
"value": "licenses/@radix-ui_react-use-effect-event@0.0.5"
},
{
"name": "local:sourcePackageDir",
@ -1194,10 +1212,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/%40tanstack/devtools-event-client@0.3.5",
"bomRef": "pkg:npm/%40tanstack/devtools-event-client@0.5.0",
"name": "@tanstack/devtools-event-client",
"version": "0.3.5",
"purl": "pkg:npm/%40tanstack/devtools-event-client@0.3.5",
"version": "0.5.0",
"purl": "pkg:npm/%40tanstack/devtools-event-client@0.5.0",
"description": "TanStack Event Client is a lightweight event client for TanStack Devtools event bus.",
"licenses": [
{
@ -1213,13 +1231,13 @@
},
{
"type": "vcs",
"url": "https://github.com/TanStack/devtools.git"
"url": "git+https://github.com/TanStack/devtools.git"
}
],
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@tanstack_devtools-event-client@0.3.5"
"value": "licenses/@tanstack_devtools-event-client@0.5.0"
},
{
"name": "local:sourcePackageDir",
@ -1332,6 +1350,41 @@
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40tanstack/react-hotkeys@0.10.0",
"name": "@tanstack/react-hotkeys",
"version": "0.10.0",
"purl": "pkg:npm/%40tanstack/react-hotkeys@0.10.0",
"description": "React adapter for TanStack Hotkeys",
"licenses": [
{
"license": {
"id": "MIT"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://tanstack.com/hotkeys"
},
{
"type": "vcs",
"url": "git+https://github.com/TanStack/hotkeys.git"
}
],
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@tanstack_react-hotkeys@0.10.0"
},
{
"name": "local:sourcePackageDir",
"value": "packages/hotkeys/node_modules/@tanstack/react-hotkeys"
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40tanstack/react-query@5.101.2",
@ -1404,10 +1457,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/%40tanstack/react-store@0.9.3",
"bomRef": "pkg:npm/%40tanstack/react-store@0.11.0",
"name": "@tanstack/react-store",
"version": "0.9.3",
"purl": "pkg:npm/%40tanstack/react-store@0.9.3",
"version": "0.11.0",
"purl": "pkg:npm/%40tanstack/react-store@0.11.0",
"description": "Framework agnostic type-safe store w/ reactive framework adapters",
"licenses": [
{
@ -1429,7 +1482,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@tanstack_react-store@0.9.3"
"value": "licenses/@tanstack_react-store@0.11.0"
},
{
"name": "local:sourcePackageDir",
@ -1509,10 +1562,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/%40tanstack/store@0.9.3",
"bomRef": "pkg:npm/%40tanstack/store@0.11.0",
"name": "@tanstack/store",
"version": "0.9.3",
"purl": "pkg:npm/%40tanstack/store@0.9.3",
"version": "0.11.0",
"purl": "pkg:npm/%40tanstack/store@0.11.0",
"description": "Framework agnostic type-safe store w/ reactive framework adapters",
"licenses": [
{
@ -1534,7 +1587,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@tanstack_store@0.9.3"
"value": "licenses/@tanstack_store@0.11.0"
},
{
"name": "local:sourcePackageDir",
@ -1770,24 +1823,6 @@
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40tensamin/ui@0.0.41",
"name": "@tensamin/ui",
"version": "0.0.41",
"purl": "pkg:npm/%40tensamin/ui@0.0.41",
"externalReferences": [],
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/@tensamin_ui@0.0.41"
},
{
"name": "local:sourcePackageDir",
"value": "apps/tauri/node_modules/@tensamin/ui"
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/%40twemoji/api@17.0.3",
@ -2647,10 +2682,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/deepfilternet3-noise-filter@1.2.1",
"bomRef": "pkg:npm/deepfilternet3-noise-filter@1.3.0",
"name": "deepfilternet3-noise-filter",
"version": "1.2.1",
"purl": "pkg:npm/deepfilternet3-noise-filter@1.2.1",
"version": "1.3.0",
"purl": "pkg:npm/deepfilternet3-noise-filter@1.3.0",
"description": "Custom audio processor with DeepFilterNet3 noise filtering integrated with LiveKit client",
"licenses": [
{
@ -2672,7 +2707,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/deepfilternet3-noise-filter@1.2.1"
"value": "licenses/deepfilternet3-noise-filter@1.3.0"
},
{
"name": "local:sourcePackageDir",
@ -2989,10 +3024,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/esbuild@0.25.12",
"bomRef": "pkg:npm/esbuild@0.28.1",
"name": "esbuild",
"version": "0.25.12",
"purl": "pkg:npm/esbuild@0.25.12",
"version": "0.28.1",
"purl": "pkg:npm/esbuild@0.28.1",
"description": "An extremely fast JavaScript and CSS bundler and minifier.",
"licenses": [
{
@ -3010,7 +3045,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/esbuild@0.25.12"
"value": "licenses/esbuild@0.28.1"
},
{
"name": "local:sourcePackageDir",
@ -3915,10 +3950,10 @@
},
{
"type": "library",
"bomRef": "pkg:npm/recharts@3.8.1",
"bomRef": "pkg:npm/recharts@3.10.1",
"name": "recharts",
"version": "3.8.1",
"purl": "pkg:npm/recharts@3.8.1",
"version": "3.10.1",
"purl": "pkg:npm/recharts@3.10.1",
"description": "React charts",
"licenses": [
{
@ -3940,7 +3975,7 @@
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/recharts@3.8.1"
"value": "licenses/recharts@3.10.1"
},
{
"name": "local:sourcePackageDir",
@ -4325,41 +4360,6 @@
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/tauri-plugin-app-events-api@0.2.0",
"name": "tauri-plugin-app-events-api",
"version": "0.2.0",
"purl": "pkg:npm/tauri-plugin-app-events-api@0.2.0",
"description": "A plugin for tauri@v2 to listen some events on iOS and Android.",
"licenses": [
{
"license": {
"id": "MIT"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/wtto00/tauri-plugin-app-events#readme"
},
{
"type": "vcs",
"url": "git+https://github.com/wtto00/tauri-plugin-app-events.git"
}
],
"properties": [
{
"name": "local:licenseFolder",
"value": "licenses/tauri-plugin-app-events-api@0.2.0"
},
{
"name": "local:sourcePackageDir",
"value": "packages/mtp/node_modules/tauri-plugin-app-events-api"
}
]
},
{
"type": "library",
"bomRef": "pkg:npm/tiny-invariant@1.3.3",

View file

@ -1,5 +1,5 @@
{
"generatedAt": "2026-07-24T10:43:11.913Z",
"generatedAt": "2026-08-06T09:49:26.511Z",
"packageCount": 145,
"packages": [
{
@ -30,7 +30,7 @@
},
{
"name": "@base-ui/utils",
"version": "0.3.1",
"version": "0.3.2",
"license": "MIT",
"homepage": null,
"repository": "git+https://github.com/mui/base-ui.git",
@ -38,7 +38,7 @@
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@base-ui_utils@0.3.1",
"licenseFolder": "licenses/@base-ui_utils@0.3.2",
"sourcePackageDir": "apps/web/node_modules/@base-ui/utils"
},
{
@ -223,6 +223,19 @@
"licenseFolder": "licenses/@livekit_components-react@2.9.21",
"sourcePackageDir": "packages/call/node_modules/@livekit/components-react"
},
{
"name": "@methanium/ui",
"version": "0.0.22",
"license": "UNKNOWN",
"homepage": null,
"repository": null,
"description": null,
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@methanium_ui@0.0.22",
"sourcePackageDir": "apps/tauri/node_modules/@methanium/ui"
},
{
"name": "@radix-ui/primitive",
"version": "1.1.4",
@ -407,7 +420,7 @@
},
{
"name": "@radix-ui/react-use-effect-event",
"version": "0.0.2",
"version": "0.0.5",
"license": "MIT",
"homepage": "https://radix-ui.com/primitives",
"repository": "git+https://github.com/radix-ui/primitives.git",
@ -415,7 +428,7 @@
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@radix-ui_react-use-effect-event@0.0.2",
"licenseFolder": "licenses/@radix-ui_react-use-effect-event@0.0.5",
"sourcePackageDir": "apps/web/node_modules/@radix-ui/react-use-effect-event"
},
{
@ -459,15 +472,15 @@
},
{
"name": "@tanstack/devtools-event-client",
"version": "0.3.5",
"version": "0.5.0",
"license": "MIT",
"homepage": "https://tanstack.com/devtools",
"repository": "https://github.com/TanStack/devtools.git",
"repository": "git+https://github.com/TanStack/devtools.git",
"description": "TanStack Event Client is a lightweight event client for TanStack Devtools event bus.",
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@tanstack_devtools-event-client@0.3.5",
"licenseFolder": "licenses/@tanstack_devtools-event-client@0.5.0",
"sourcePackageDir": "apps/web/node_modules/@tanstack/devtools-event-client"
},
{
@ -509,6 +522,19 @@
"licenseFolder": "licenses/@tanstack_query-core@5.101.2",
"sourcePackageDir": "apps/web/node_modules/@tanstack/query-core"
},
{
"name": "@tanstack/react-hotkeys",
"version": "0.10.0",
"license": "MIT",
"homepage": "https://tanstack.com/hotkeys",
"repository": "git+https://github.com/TanStack/hotkeys.git",
"description": "React adapter for TanStack Hotkeys",
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@tanstack_react-hotkeys@0.10.0",
"sourcePackageDir": "packages/hotkeys/node_modules/@tanstack/react-hotkeys"
},
{
"name": "@tanstack/react-query",
"version": "5.101.2",
@ -537,7 +563,7 @@
},
{
"name": "@tanstack/react-store",
"version": "0.9.3",
"version": "0.11.0",
"license": "MIT",
"homepage": "https://tanstack.com/store",
"repository": "https://github.com/TanStack/store.git",
@ -545,7 +571,7 @@
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@tanstack_react-store@0.9.3",
"licenseFolder": "licenses/@tanstack_react-store@0.11.0",
"sourcePackageDir": "apps/web/node_modules/@tanstack/react-store"
},
{
@ -576,7 +602,7 @@
},
{
"name": "@tanstack/store",
"version": "0.9.3",
"version": "0.11.0",
"license": "MIT",
"homepage": "https://tanstack.com/store",
"repository": "git+https://github.com/TanStack/store.git",
@ -584,7 +610,7 @@
"files": [
"LICENSE"
],
"licenseFolder": "licenses/@tanstack_store@0.9.3",
"licenseFolder": "licenses/@tanstack_store@0.11.0",
"sourcePackageDir": "apps/web/node_modules/@tanstack/store"
},
{
@ -680,17 +706,6 @@
"licenseFolder": "licenses/@tauri-apps_plugin-notification@2.3.3",
"sourcePackageDir": "apps/tauri/node_modules/@tauri-apps/plugin-notification"
},
{
"name": "@tensamin/ui",
"version": "0.0.41",
"license": "UNKNOWN",
"homepage": null,
"repository": null,
"description": null,
"files": [],
"licenseFolder": "licenses/@tensamin_ui@0.0.41",
"sourcePackageDir": "apps/tauri/node_modules/@tensamin/ui"
},
{
"name": "@twemoji/api",
"version": "17.0.3",
@ -1018,7 +1033,7 @@
},
{
"name": "deepfilternet3-noise-filter",
"version": "1.2.1",
"version": "1.3.0",
"license": "(Apache-2.0 OR MIT)",
"homepage": "https://github.com/mezonai/mezon-noise-suppression#readme",
"repository": "git+https://github.com/mezonai/mezon-noise-suppression.git",
@ -1027,7 +1042,7 @@
"LICENSE-APACHE",
"LICENSE-MIT"
],
"licenseFolder": "licenses/deepfilternet3-noise-filter@1.2.1",
"licenseFolder": "licenses/deepfilternet3-noise-filter@1.3.0",
"sourcePackageDir": "packages/call/node_modules/deepfilternet3-noise-filter"
},
{
@ -1143,7 +1158,7 @@
},
{
"name": "esbuild",
"version": "0.25.12",
"version": "0.28.1",
"license": "MIT",
"homepage": null,
"repository": "git+https://github.com/evanw/esbuild.git",
@ -1151,7 +1166,7 @@
"files": [
"LICENSE.md"
],
"licenseFolder": "licenses/esbuild@0.25.12",
"licenseFolder": "licenses/esbuild@0.28.1",
"sourcePackageDir": "apps/electron/node_modules/esbuild"
},
{
@ -1499,7 +1514,7 @@
},
{
"name": "recharts",
"version": "3.8.1",
"version": "3.10.1",
"license": "MIT",
"homepage": "https://github.com/recharts/recharts",
"repository": "git+https://github.com/recharts/recharts.git",
@ -1507,7 +1522,7 @@
"files": [
"LICENSE"
],
"licenseFolder": "licenses/recharts@3.8.1",
"licenseFolder": "licenses/recharts@3.10.1",
"sourcePackageDir": "apps/web/node_modules/recharts"
},
{
@ -1653,19 +1668,6 @@
"licenseFolder": "licenses/tailwindcss@4.3.2",
"sourcePackageDir": "apps/web/node_modules/tailwindcss"
},
{
"name": "tauri-plugin-app-events-api",
"version": "0.2.0",
"license": "MIT",
"homepage": "https://github.com/wtto00/tauri-plugin-app-events#readme",
"repository": "git+https://github.com/wtto00/tauri-plugin-app-events.git",
"description": "A plugin for tauri@v2 to listen some events on iOS and Android.",
"files": [
"LICENSE"
],
"licenseFolder": "licenses/tauri-plugin-app-events-api@0.2.0",
"sourcePackageDir": "packages/mtp/node_modules/tauri-plugin-app-events-api"
},
{
"name": "tiny-invariant",
"version": "1.3.3",

View file

@ -1,8 +1,7 @@
{
"name": "tensamin",
"version": "0.0.12",
"version": "0.0.11",
"private": true,
"packageManager": "pnpm@11.8.0",
"workspaces": [
"packages/*",
"apps/*"
@ -30,19 +29,19 @@
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@types/node": "^26.1.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@typescript-eslint/parser": "^8.59.1",
"eslint": "^10.2.1",
"@types/node": "^26.1.2",
"@types/react": "^19.2.18",
"@types/react-dom": "^19.2.4",
"@typescript-eslint/parser": "^8.66.0",
"eslint": "^10.8.0",
"eslint-plugin-react-hooks": "^7.1.1",
"fallow": "^2.86.0",
"globals": "^17.5.0",
"fallow": "^3.14.0",
"globals": "^17.9.0",
"jsonc-parser": "^3.3.1",
"prettier": "^3.8.3",
"typescript": "^6.0.3",
"typescript-eslint": "^8.59.1",
"vitest": "^4.0.8",
"prettier": "^3.9.6",
"typescript": "^7.0.2",
"typescript-eslint": "^8.66.0",
"vitest": "^4.1.10",
"yaml": "^2.8.2"
},
"dependencies": {

View file

@ -25,7 +25,7 @@
"@tensamin/mtp": "workspace:*",
"@methanium/ui": "*",
"@tensamin/user": "workspace:*",
"deepfilternet3-noise-filter": "1.2.1",
"deepfilternet3-noise-filter": "1.3.0",
"livekit-client": "^2.18.8",
"lucide-react": "^1.14.0",
"react": "^19.2.0",

2083
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff