J.A.R.V.I.S-rust/crates/jarvis-app/Cargo.toml

37 lines
902 B
TOML
Raw Normal View History

[package]
name = "jarvis-app"
version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
edition.workspace = true
[dependencies]
2026-01-05 03:38:04 +05:00
jarvis-core = { path = "../jarvis-core", features = ["intent"] }
once_cell.workspace = true
log.workspace = true
simple-log = "2.4"
feat: 5 new packs + dotenvy + regen icon.ico + shortcuts redo Iron Man icon regenerated from resources/icons/icon.png at sizes 16/24/32/48/64/128/256 via Pillow (make_ico.py committed alongside); icon.ico is now a clean 83 KB multi-res for sharp display at any scale instead of whatever placeholder Tauri originally emitted. dotenvy added to workspace deps. jarvis-app/main.rs and jarvis-gui/ main.rs both walk up from current_exe() looking for dev.env (up to 5 parent levels), so the Desktop shortcut can launch the exe directly without a wrapper .bat to pre-set GROQ_TOKEN. Falls back to dotenvy::dotenv() (cwd lookup) if nothing found near the binary. 5 new portable Lua command packs. Bumps total from 21 to 26. cargo test -p jarvis-core --lib commands::tests still passes 3/3. reminders/ — set_reminder. Parses "напомни через N (секунд|минут| часов) <body>" or English equivalents; understands one Russian word numerals (один, две, пять, десять, пятнадцать, ...) for the count when speech recognition returns words instead of digits. Defaults to 5 minutes if number/unit missing. Spawns a detached PowerShell that Start-Sleeps then fires: BurntToast if installed, System.Speech SAPI (ru-RU voice preference), and a WScript.Shell.Popup as the guaranteed-visible last resort. date_query/ — today / tomorrow / yesterday. Single answer.lua keyed by command_id, computes the offset via PowerShell Get-Date.AddDays() in ru-RU culture so the weekday/month come out in Russian, then speaks via SAPI. voice_type/ — type_text. Strips the trigger, drops the remainder to clipboard via jarvis.system.clipboard.set, then synthesises Ctrl+V through user32!keybd_event so it lands in whatever window currently has focus. Works in any text field (note app, browser, IDE, Telegram, etc.). dice/ — coin_flip / roll_dice / random_number. Single roll.lua, seeds math.random with os.time + jitter, speaks the result. "1-6" for dice, "1-100" for random. stopwatch/ — start / check / stop. Uses jarvis.state.get/set (persisted via jarvis-core's settings DB) to remember the start timestamp, computes elapsed via jarvis.context.time.timestamp, formats as "X сек" / "X мин Y сек" / "X ч Y мин Z сек". All new packs follow the established patterns (sandbox=full, PS-via- exec helper where needed, USERPROFILE/SystemDrive everywhere, no hardcoded paths).
2026-05-15 12:28:44 +03:00
dotenvy.workspace = true
tray-icon = "0.21"
winit = "0.30"
image.workspace = true
platform-dirs.workspace = true
rand.workspace = true
parking_lot.workspace = true
tokio = { version = "1", features = ["rt-multi-thread"] }
[target.'cfg(windows)'.dependencies.winit]
version = "0.30"
features = []
[target.'cfg(target_os = "windows")'.dependencies]
winapi = { version = "0.3", features = ["winuser"] }
fix(app): show toast + open Sound settings when mic enumeration returns nothing Before: clicking "Запустить" in jarvis-gui spawned jarvis-app, which silently exited with code 1 (or in release builds, looked like the console window flashed and closed). The pv_recorder library returns INVALID_ARGUMENT from pv_recorder_init when Windows Core Audio reports zero capture endpoints (some other app holding the mic exclusively, or all input devices disabled in mmsys.cpl). User saw no actionable feedback. Now: on recorder::init failure jarvis-app calls notify_mic_problem() which (Windows-only): - Fires a long-duration Windows toast titled "J.A.R.V.I.S.: микрофон не найден" with a hint pointing at mmsys.cpl / Recording. - Spawns "start ms-settings:sound" so the Sound settings page opens automatically — user can re-enable the mic in two clicks. Then the original app::close(1, ...) path runs to keep the same exit behaviour the GUI's get_jarvis_app_stats poller expects. Cargo.toml: jarvis-app now pulls winrt-notification (already in workspace.dependencies via jarvis-core) for the toast. Also incidentally fixed: the release-build C0000139 (entrypoint not found) loader crash that was showing up before this change. It went away after the workspace dep was added and the release relink ran. Most likely the previous release exe had a stale import table from an earlier partial rebuild; the clean relink resolves it. Non-Windows builds get a no-op eprintln so the binary still compiles for Linux/macOS.
2026-05-15 11:58:47 +03:00
winrt-notification.workspace = true
[target.'cfg(target_os = "linux")'.dependencies]
gtk = "0.18"
fix(app): embed Common-Controls v6 manifest so TaskDialogIndirect resolves Symptom: jarvis-app.exe failed to start with a MessageBox saying "Точка входа в процедуру TaskDialogIndirect не найдена в библиотеке DLL ... jarvis-app.exe". Loader phase, no log lines ever written. Cause: tray-icon 0.21 / winit 0.30 transitive Win32 imports include TaskDialogIndirect from comctl32.dll, which is a Common-Controls v6 API. Without a side-by-side manifest declaring a dependency on Microsoft.Windows.Common-Controls v6.0.0.0, Windows loads the legacy v5 comctl32 (which does not export TaskDialogIndirect) and the loader rejects the exe before main(). jarvis-gui does not hit this because tauri-build embeds its own manifest as part of the Tauri compile step. jarvis-app had no manifest at all. Fix: - app.manifest: Common-Controls v6 dependency, supportedOS for Win7..Win11, PerMonitorV2 DPI awareness, UTF-8 active code page, asInvoker execution level. - app.manifest.rc: 3-line .rc that embeds the manifest with CREATEPROCESS_MANIFEST_RESOURCE_ID (1) and RT_MANIFEST (24). - build.rs: on cfg(windows), embed_resource::compile() compiles the .rc and links the resulting .res into the exe. rerun-if-changed on the manifest sources. - Cargo.toml: target-windows build-dependency on embed-resource 3. Verified: jarvis-app.exe now runs cleanly through all init steps: commands parsed, audio init, recorder init found "Микрофон (5- Fifine Microphone)", IPC server up on ws://127.0.0.1:9712, VAD already flushing frames. UTF-8 active code page in the manifest also helps russian-character fidelity when win32 APIs are invoked from PowerShell helpers.
2026-05-15 13:26:00 +03:00
glib = "0.21.5"
[target.'cfg(target_os = "windows")'.build-dependencies]
embed-resource = "3"