Cargo.toml 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. [package]
  2. name = "qmai"
  3. version = "3.1.2"
  4. description = "QMAI - AI writing system for long-form novels"
  5. authors = ["Mochocyang"]
  6. edition = "2021"
  7. default-run = "qmai"
  8. # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
  9. [[bin]]
  10. name = "qmai"
  11. path = "src/main.rs"
  12. [build-dependencies]
  13. tauri-build = { version = "2", features = [] }
  14. [dependencies]
  15. tauri = { version = "2", features = ["protocol-asset"] }
  16. tauri-plugin-opener = "2"
  17. serde = { version = "1", features = ["derive"] }
  18. serde_json = "1"
  19. chrono = { version = "0.4", features = ["clock"] }
  20. tauri-plugin-dialog = "2.7.2"
  21. tauri-plugin-updater = "2"
  22. pdfium-render = "0.9"
  23. tauri-plugin-store = "2.4.4"
  24. tauri-plugin-http = { version = "2", features = ["unsafe-headers"] }
  25. zip = "2"
  26. calamine = "0.34.0"
  27. docx-rs = "0.4.22"
  28. cfb = "0.7.3"
  29. encoding_rs = "0.8.35"
  30. lancedb = "0.27.2"
  31. # tokio provided by tauri runtime for async commands
  32. arrow-array = "57"
  33. arrow-schema = "57"
  34. futures = "0.3"
  35. # Claude Code CLI subprocess transport: spawn `claude` as a child process,
  36. # stream stdout line-by-line back to the frontend. tokio::process gives us
  37. # async io and clean cancellation; `which` locates the binary on PATH.
  38. tokio = { version = "1", features = ["process", "io-util", "sync", "macros", "rt"] }
  39. which = "7"
  40. uuid = { version = "1", features = ["v4"] }
  41. toml = "0.8"
  42. # Multimodal image extraction (Phase 1):
  43. # `image` re-encodes pdfium's raw bitmap output to PNG so the IPC
  44. # payload is self-contained (the frontend doesn't need to know
  45. # about pdfium's internal RGBA layout).
  46. # `base64` serializes binary image data for Tauri IPC, which is
  47. # JSON-only — Vec<u8> roundtrips ~1.33× larger than raw bytes but
  48. # that's acceptable for our ~MB-scale per-image payloads.
  49. # `sha2` is for the dedup cache (Phase 3) — same image hash =
  50. # same caption, no redundant VLM calls. Pulled in here so the
  51. # extraction layer can also expose the hash if a caller wants it.
  52. image = { version = "0.25", default-features = false, features = ["png"] }
  53. base64 = "0.22"
  54. sha2 = "0.10"
  55. md-5 = "0.10"
  56. notify = "8"
  57. walkdir = "2"
  58. tauri-plugin-single-instance = "2"
  59. keepawake = "0.6"
  60. [dev-dependencies]
  61. tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] }
  62. [profile.release]
  63. codegen-units = 1
  64. lto = true
  65. opt-level = "z"
  66. # Unwind (not abort) so third-party parser panics can be caught at the
  67. # Tauri command boundary via panic_guard and turned into errors. Slightly
  68. # larger binary, but prevents single-file corruption from killing the app.
  69. panic = "unwind"
  70. strip = true