[package] name = "llm-wiki" version = "0.6.6" description = "LLM Wiki - A personal knowledge base for LLM concepts" authors = [] edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] name = "llm_wiki_lib" crate-type = ["staticlib", "cdylib", "rlib"] [[bin]] name = "llm-wiki" path = "src/main.rs" [build-dependencies] tauri-build = { version = "2", features = [] } [dependencies] tauri = { version = "2", features = ["protocol-asset", "tray-icon"] } tauri-plugin-opener = "2" tauri-plugin-autostart = "2.5.1" serde = { version = "1", features = ["derive"] } serde_json = "1" chrono = { version = "0.4", features = ["clock"] } tauri-plugin-dialog = "2.7.1" pdfium-render = "0.9" tauri-plugin-store = "2.4.2" tauri-plugin-http = { version = "2", features = ["unsafe-headers"] } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } tiny_http = "0.12" zip = "2" calamine = "0.34.0" docx-rs = "0.4.20" office_oxide = "=0.1.2" lancedb = "0.27.2" # tokio provided by tauri runtime for async commands arrow-array = "57" arrow-schema = "57" futures = "0.3" # Claude Code CLI subprocess transport: spawn `claude` as a child process, # stream stdout line-by-line back to the frontend. tokio::process gives us # async io and clean cancellation; `which` locates the binary on PATH. tokio = { version = "1", features = ["process", "io-util", "sync", "macros", "rt"] } which = "7" uuid = { version = "1", features = ["v4"] } # Multimodal image extraction (Phase 1): # `image` re-encodes pdfium's raw bitmap output to PNG so the IPC # payload is self-contained (the frontend doesn't need to know # about pdfium's internal RGBA layout). # `base64` serializes binary image data for Tauri IPC, which is # JSON-only — Vec roundtrips ~1.33× larger than raw bytes but # that's acceptable for our ~MB-scale per-image payloads. # `sha2` is for the dedup cache (Phase 3) — same image hash = # same caption, no redundant VLM calls. Pulled in here so the # extraction layer can also expose the hash if a caller wants it. image = { version = "0.25", default-features = false, features = ["png"] } base64 = "0.22" sha2 = "0.10" md-5 = "0.10" notify = "8" walkdir = "2" epub = "2.1.5" mobi = "0.8" html2text = { version = "0.17.1", default-features = false, features = ["xml"] } [dev-dependencies] tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] } [profile.release] codegen-units = 1 lto = true opt-level = "s" # Unwind (not abort) so third-party parser panics can be caught at the # Tauri command boundary via panic_guard and turned into errors. Slightly # larger binary, but prevents single-file corruption from killing the app. panic = "unwind" strip = true