Cargo.toml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. [package]
  2. name = "qmai"
  3. version = "3.2.7"
  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. tauri-plugin-store = "2.4.4"
  23. tauri-plugin-http = { version = "2", features = ["unsafe-headers"] }
  24. zip = "2"
  25. calamine = "0.34.0"
  26. docx-rs = "0.4.22"
  27. cfb = "0.7.3"
  28. encoding_rs = "0.8.35"
  29. # Local vector store only. lancedb 0.27.2 already has empty default features;
  30. # keep them off so aws/gcs/azure/remote/openai never sneak in. DataFusion is a
  31. # hard dependency of this crate and cannot be feature-gated away.
  32. lancedb = { version = "0.27.2", default-features = false }
  33. # tokio provided by tauri runtime for async commands
  34. arrow-array = "57"
  35. arrow-schema = "57"
  36. futures = "0.3"
  37. # Claude Code CLI subprocess transport: spawn `claude` as a child process,
  38. # stream stdout line-by-line back to the frontend. tokio::process gives us
  39. # async io and clean cancellation; `which` locates the binary on PATH.
  40. tokio = { version = "1", features = ["process", "io-util", "sync", "macros", "rt"] }
  41. which = "7"
  42. uuid = { version = "1", features = ["v4"] }
  43. toml = "0.8"
  44. # Multimodal image extraction (Office docs):
  45. # `image` decodes embedded PPTX/DOCX raster bytes so we can apply
  46. # the size filter before writing them to disk.
  47. # `base64` serializes binary image data for Tauri IPC, which is
  48. # JSON-only — Vec<u8> roundtrips ~1.33× larger than raw bytes but
  49. # that's acceptable for our ~MB-scale per-image payloads.
  50. # `sha2` is for the dedup cache (Phase 3) — same image hash =
  51. # same caption, no redundant VLM calls. Pulled in here so the
  52. # extraction layer can also expose the hash if a caller wants it.
  53. image = { version = "0.25", default-features = false, features = ["png"] }
  54. base64 = "0.22"
  55. sha2 = "0.10"
  56. md-5 = "0.10"
  57. notify = "8"
  58. walkdir = "2"
  59. tauri-plugin-single-instance = "2"
  60. keepawake = "0.6"
  61. [target.'cfg(target_os = "macos")'.dependencies]
  62. objc2 = "0.6.4"
  63. objc2-foundation = { version = "0.3.2", default-features = false, features = ["std", "NSString", "NSProcessInfo"] }
  64. [dev-dependencies]
  65. tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] }
  66. [profile.release]
  67. codegen-units = 1
  68. lto = true
  69. opt-level = "z"
  70. # Unwind (not abort) so third-party parser panics can be caught at the
  71. # Tauri command boundary via panic_guard and turned into errors. Slightly
  72. # larger binary, but prevents single-file corruption from killing the app.
  73. panic = "unwind"
  74. strip = true