Files
WhispAssist/src-tauri/Cargo.toml
T
iamdoubz 27ba4f9b03 build(deps): swap zip for sevenz-rust2 (npu-gated) to unpack 7z runtime bundles
The NPU/DirectML runtime bundles are now LZMA2+BCJ 7z archives; zip was only used
for the old .zip bundle. sevenz-rust2 pinned to 0.7.0 (newer needs rustc>MSRV).
2026-07-06 08:23:49 -05:00

114 lines
5.4 KiB
TOML

[package]
name = "whispassist"
version = "0.1.5"
description = "Privacy-first, fully local Windows meeting assistant"
authors = ["WhispAssist contributors"]
license = "MIT OR Apache-2.0"
edition = "2021"
rust-version = "1.77"
# NOTE: versions are indicative. Pin + verify at implementation time
# (see docs/07-research-findings.md "Open items").
[lib]
name = "whispassist_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
tauri = { version = "2", features = ["tray-icon", "image-png"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "1"
async-trait = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "fs"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
uuid = { version = "1", features = ["v4"] }
# storage
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "migrate"] }
# llm + sync (HTTP/WebDAV)
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"] }
futures-util = "0.3"
sha2 = "0.10" # skip-if-unchanged hashing (sync)
# At-rest encryption vault (Phase 8, T8.8, FR-SEC-3). Pure-Rust RustCrypto — no
# C build. Argon2id derives the vault key from the password; XChaCha20-Poly1305
# (24-byte nonce → safe random nonces) is the AEAD for artifacts + key wrapping.
argon2 = "0.5"
chacha20poly1305 = "0.10"
getrandom = "0.2"
zeroize = "1" # wipe key material from memory on lock
keyring = { version = "3", optional = true } # OS credential store (sync + AI creds)
rmcp = { version = "0.16", optional = true, features = ["server"] } # MCP server (ADR-0011)
# audio / transcription / diarization / calendar are integrated per-phase and are
# feature-gated so the CPU-only build always compiles (NFR-MNT-4).
hound = { version = "3", optional = true } # WAV I/O (Phase 1)
whisper-rs = { version = "0.16", optional = true } # whisper.cpp bindings (Phase 1)
# NPU transcription (Phase 3, T3.4): ONNX Runtime + OpenVINO EP. `load-dynamic`
# dlopens the on-demand-downloaded runtime, so cargo compiles no C++/OpenVINO —
# keeps the CPU-only build untouched (NFR-MNT-4). `rustfft` powers the log-mel
# front-end (detok is hand-rolled off serde_json, no `tokenizers`/C dep).
ort = { version = "=2.0.0-rc.10", optional = true, default-features = false, features = ["load-dynamic", "openvino", "directml"] }
rustfft = { version = "6", optional = true }
sherpa-rs = { version = "0.6", optional = true, default-features = false, features = ["download-binaries"] } # sherpa-onnx bindings (Phase 4, ADR-0005)
tauri-plugin-dialog = "2" # native Save/choose-folder (Phase 2 export)
# notes export (Phase 8, FR-NOTE-4) — pure-Rust, no external binary/cloud
# conversion service, consistent with the fully-local invariant.
pulldown-cmark = "0.12"
printpdf = "0.7"
docx-rs = "0.4"
# Extracts the on-demand NPU/DirectML runtime bundles (7z, LZMA2+BCJ). Optional +
# npu-gated so the CPU-only build stays lean (NFR-MNT-4). Pinned to 0.7.0: newer
# releases raise the MSRV above the project's rust-version.
sevenz-rust2 = { version = "0.7.0", optional = true }
[target.'cfg(windows)'.dependencies]
windows = { version = "0.58", features = [
"Win32_Media_Audio", # WASAPI (Phase 1)
"Win32_Graphics_Dxgi", # GPU enumeration (Phase 3)
"Win32_Devices_DeviceAndDriverInstallation", # SetupAPI: NPU detection (Phase 3, T3.4)
"Win32_System_Com",
"Win32_UI_Shell", # SetCurrentProcessExplicitAppUserModelID (Phase 8, T8.6)
"UI_Notifications", # scheduled toast reminders (Phase 8, T8.6, FR-CAL-5) — the
"Data_Xml_Dom", # OS delivers these itself at the due time, no polling timer
"Foundation",
"Foundation_Collections", # IVectorView iteration (GetScheduledToastNotifications)
] }
wasapi = { version = "0.15", optional = true } # Phase 1
[features]
# `npu` ships in the default build: `ort` uses load-dynamic (no build-time
# linking/OpenVINO needed), and the on-demand runtime/model download only works
# if this code path is actually compiled in. NPU stays inert until an NPU is
# detected AND its runtime is downloaded, so shipping it is safe (NFR-MNT-4).
default = ["audio", "cpu-transcription", "diarization", "pst", "sync", "npu"]
# Phase 1
audio = ["dep:wasapi", "dep:hound"]
cpu-transcription = ["dep:whisper-rs"] # whisper-rs CPU build
# Phase 3 acceleration (built on capable CI runners; never required)
cuda = ["whisper-rs?/cuda"] # whisper.cpp CUDA
vulkan = ["whisper-rs?/vulkan"] # whisper.cpp Vulkan
npu = ["dep:ort", "dep:rustfft", "dep:sevenz-rust2"] # ort + OpenVINO EP NPU path (T3.4); 7z for runtime bundles
# Phase 4 / 6 (added when integrated)
diarization = ["dep:sherpa-rs"] # sherpa-onnx
pst = [] # shells out to readpst (libpst) — no crate dep, see ADR-0008 update
# Phase 9
sync = ["dep:keyring"] # remote upload (WebDAV + OAuth providers)
# Phase 10
mcp = ["dep:rmcp", "dep:keyring"] # WhispAssist as an MCP server + hosted-AI creds
[profile.release]
opt-level = "z" # optimize for size — keep the binary small (NFR-RES-1)
lto = true
codegen-units = 1
strip = true
panic = "abort"