=== Source tree structure === ./src/cli/contacts.rs ./src/cli/daemon_cmd.rs ./src/cli/export.rs ./src/cli/favorites.rs ./src/cli/history.rs ./src/cli/init.rs ./src/cli/members.rs ./src/cli/mod.rs ./src/cli/new_messages.rs ./src/cli/output.rs ./src/cli/search.rs ./src/cli/sessions.rs ./src/cli/sns_feed.rs ./src/cli/sns_notifications.rs ./src/cli/sns_search.rs ./src/cli/stats.rs ./src/cli/transport.rs ./src/cli/unread.rs ./src/config.rs ./src/crypto/mod.rs ./src/crypto/wal.rs ./src/daemon/cache.rs ./src/daemon/mod.rs ./src/daemon/query.rs ./src/daemon/server.rs ./src/ipc.rs ./src/main.rs ./src/scanner/linux.rs ./src/scanner/macos.rs ./src/scanner/mod.rs ./src/scanner/windows.rs ./src/transport/mod.rs === Cargo.toml === [package] name = "wx-cli" version = "0.1.10" edition = "2021" description = "WeChat 4.x (macOS/Linux) local data CLI — decrypt SQLCipher DBs, query chat history, watch new messages" license = "Apache-2.0" repository = "https://github.com/jackwener/wx-cli" keywords = ["wechat", "sqlcipher", "decrypt", "cli"] categories = ["command-line-utilities"] readme = "README.md" [[bin]] name = "wx" path = "src/main.rs" [dependencies] # CLI clap = { version = "4", features = ["derive"] } # 异步 tokio = { version = "1", features = ["full"] } # 序列化 serde = { version = "1", features = ["derive"] } serde_json = "=1.0.140" serde_yaml = "0.9" # SQLite rusqlite = { version = "0.31", features = ["bundled"] } # 加密 aes = "0.8" cbc = { version = "0.1", features = ["alloc"] } hmac = "0.12" sha2 = "0.10" pbkdf2 = "0.12" # 解压 zstd = "0.13" # 错误处理 anyhow = "1" # 时间 chrono = { version = "0.4", features = ["serde"] } # 跨平台路径 dirs = "5" # MD5 (联系人表名 Msg_) md5 = "0.7" # 正则表达式 regex = "1" roxmltree = "0.20" # IPC Windows named pipe(Unix 直接用 tokio::net::UnixListener) [target.'cfg(windows)'.dependencies] interprocess = { version = "2", features = ["tokio"] } [target.'cfg(unix)'.dependencies] libc = "0.2" [target.'cfg(target_os = "windows")'.dependencies] windows = { version = "0.58", features = [ "Win32_System_Diagnostics_Debug", "Win32_System_Diagnostics_ToolHelp", "Win32_System_Threading", "Win32_Foundation", "Win32_System_Memory", ] } [profile.release] opt-level = 3 lto = true codegen-units = 1 strip = true === src/main.rs - CLI structure === mod config; mod ipc; mod crypto; mod scanner; mod daemon; mod cli; pub mod transport; fn main() { if std::env::var("WX_DAEMON_MODE").is_ok() { daemon::run(); } else { cli::run(); } } === src/daemon/ - all files === total 112 drwxrwxrwx 1 david david 4096 May 13 13:32 . drwxrwxrwx 1 david david 4096 May 13 13:44 .. -rwxrwxrwx 1 david david 7309 May 13 13:32 cache.rs -rwxrwxrwx 1 david david 6034 May 13 13:55 mod.rs -rwxrwxrwx 1 david david 91997 May 13 13:32 query.rs -rwxrwxrwx 1 david david 3820 May 13 13:55 server.rs === src/transport/ - all files === total 12 drwxrwxrwx 1 david david 4096 May 13 13:44 . drwxrwxrwx 1 david david 4096 May 13 13:44 .. -rwxrwxrwx 1 david david 9555 May 13 13:45 mod.rs === src/lib.rs ===