diff --git a/Cargo.lock b/Cargo.lock index 4351a54..359f974 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -201,7 +201,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -212,7 +212,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -333,7 +333,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.1.4", + "rustix", "slab", "windows-sys 0.61.2", ] @@ -364,7 +364,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.1.4", + "rustix", ] [[package]] @@ -390,7 +390,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.4", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -722,7 +722,7 @@ dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex 2.0.1", + "shlex", ] [[package]] @@ -884,10 +884,10 @@ dependencies = [ "clap_complete", "clx-core", "colored", - "crossterm 0.28.1", - "dirs 5.0.1", + "crossterm", + "dirs", "fastembed", - "indicatif 0.17.11", + "indicatif", "insta", "predicates", "proptest", @@ -898,7 +898,7 @@ dependencies = [ "serde_json", "serde_yaml_ng", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.19", "tokio", "toml 1.1.4+spec-1.1.0", "tracing", @@ -914,9 +914,9 @@ dependencies = [ "anyhow", "async-trait", "chrono", - "core-foundation 0.9.4", + "core-foundation 0.10.1", "criterion", - "dirs 5.0.1", + "dirs", "fastembed", "figment", "fs4", @@ -930,16 +930,16 @@ dependencies = [ "rstest", "rusqlite", "secrecy", - "security-framework 2.11.1", + "security-framework 3.7.0", "serde", "serde_json", "serde_yaml_ng", "serial_test", "sha2 0.11.0", - "shlex 1.3.0", + "shlex", "sqlite-vec", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.19", "tokio", "toml 1.1.4+spec-1.1.0", "tracing", @@ -956,7 +956,7 @@ dependencies = [ "anyhow", "chrono", "clx-core", - "dirs 5.0.1", + "dirs", "hex", "insta", "regex", @@ -966,7 +966,7 @@ dependencies = [ "serial_test", "sha2 0.11.0", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.19", "tokio", "toml 1.1.4+spec-1.1.0", "tracing", @@ -981,11 +981,11 @@ dependencies = [ "anyhow", "chrono", "clx-core", - "dirs 5.0.1", + "dirs", "serde", "serde_json", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.19", "tokio", "tracing", "tracing-subscriber", @@ -1014,12 +1014,11 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "colored" -version = "2.2.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1056,19 +1055,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width", - "windows-sys 0.59.0", -] - [[package]] name = "console" version = "0.16.4" @@ -1259,22 +1245,6 @@ version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" -[[package]] -name = "crossterm" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" -dependencies = [ - "bitflags 2.13.1", - "crossterm_winapi", - "mio", - "parking_lot", - "rustix 0.38.44", - "signal-hook", - "signal-hook-mio", - "winapi", -] - [[package]] name = "crossterm" version = "0.29.0" @@ -1287,7 +1257,7 @@ dependencies = [ "document-features", "mio", "parking_lot", - "rustix 1.1.4", + "rustix", "signal-hook", "signal-hook-mio", "winapi", @@ -1623,34 +1593,13 @@ dependencies = [ "crypto-common 0.2.2", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ - "dirs-sys 0.5.0", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.4.6", - "windows-sys 0.48.0", + "dirs-sys", ] [[package]] @@ -1661,8 +1610,8 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users 0.5.2", - "windows-sys 0.61.2", + "redox_users", + "windows-sys 0.59.0", ] [[package]] @@ -1791,7 +1740,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2086,7 +2035,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e72ed92b67c146290f88e9c89d60ca163ea417a446f61ffd7b72df3e7f1dfd5" dependencies = [ - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] @@ -2377,9 +2326,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef3982638978efa195ff11b305f51f1f22f4f0a6cabee7af79b383ebee6a213" dependencies = [ - "dirs 6.0.0", + "dirs", "http", - "indicatif 0.18.6", + "indicatif", "libc", "log", "native-tls", @@ -2826,26 +2775,13 @@ dependencies = [ "hashbrown 0.17.1", ] -[[package]] -name = "indicatif" -version = "0.17.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" -dependencies = [ - "console 0.15.11", - "number_prefix", - "portable-atomic", - "unicode-width", - "web-time", -] - [[package]] name = "indicatif" version = "0.18.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9433806cd6b4ec1aba79c021c7e4c58fb4c3b9977c085062e611ac929998fb0c" dependencies = [ - "console 0.16.4", + "console", "portable-atomic", "unicode-width", "unit-prefix", @@ -2883,7 +2819,7 @@ version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f0f8fee8c926415c58d6ae43a08523a26faccb2323f5e6b644fe7dd4ef6b82" dependencies = [ - "console 0.16.4", + "console", "once_cell", "pest", "pest_derive", @@ -3184,12 +3120,6 @@ dependencies = [ "libc", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -3514,7 +3444,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3626,12 +3556,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "once_cell" version = "1.21.4" @@ -4097,7 +4021,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] @@ -4397,7 +4321,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4560,7 +4484,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567584a3b0e6a8203c23de40b4861497266725eb5363dbfd18a1edd603cca9f0" dependencies = [ "cfg-if", - "crossterm 0.29.0", + "crossterm", "instability", "ratatui-core", ] @@ -4727,17 +4651,6 @@ dependencies = [ "bitflags 2.13.1", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 1.0.69", -] - [[package]] name = "redox_users" version = "0.5.2" @@ -5012,19 +4925,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.13.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.4" @@ -5034,8 +4934,8 @@ dependencies = [ "bitflags 2.13.1", "errno", "libc", - "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] @@ -5094,7 +4994,7 @@ dependencies = [ "security-framework 3.7.0", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5464,12 +5364,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "shlex" version = "2.0.1" @@ -5569,7 +5463,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -5753,8 +5647,8 @@ dependencies = [ "fastrand", "getrandom 0.4.3", "once_cell", - "rustix 1.1.4", - "windows-sys 0.61.2", + "rustix", + "windows-sys 0.52.0", ] [[package]] @@ -5765,9 +5659,9 @@ checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e" dependencies = [ "bitflags 2.13.1", "parking_lot", - "rustix 1.1.4", + "rustix", "signal-hook", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6277,7 +6171,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6766,7 +6660,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6845,15 +6739,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -6890,21 +6775,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -6938,12 +6808,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6956,12 +6820,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6974,12 +6832,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7004,12 +6856,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7022,12 +6868,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7040,12 +6880,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7058,12 +6892,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/Cargo.toml b/Cargo.toml index ea33d30..90b48da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,10 +39,10 @@ clap = { version = "4", features = ["derive"] } clap_complete = "4" # Progress indicators -indicatif = "0.17" +indicatif = "0.18.6" # Error handling -thiserror = "1.0" +thiserror = "2.0.19" anyhow = "1.0" # Logging/Tracing @@ -53,9 +53,9 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } reqwest = { version = "0.13", features = ["json"] } # Utilities -dirs = "5.0" +dirs = "6.0.0" chrono = { version = "0.4", features = ["serde"] } -colored = "2" +colored = "3.1.1" # Secure storage. # keyring 3.x made the OS-native stores opt-in (2.x enabled them by default); @@ -91,7 +91,7 @@ regex = "1" # Shell-aware tokenizer for read-only command classification. We use ONLY # `shlex::split` (RUSTSEC-2024-0006 affects `quote`/`join`, fixed at 1.3.0). -shlex = "1.3" +shlex = "2.0.1" # Password input rpassword = "7" diff --git a/crates/clx-core/Cargo.toml b/crates/clx-core/Cargo.toml index e8e0d2f..8416b10 100644 --- a/crates/clx-core/Cargo.toml +++ b/crates/clx-core/Cargo.toml @@ -60,12 +60,13 @@ fastembed = "5" # unstable identity, so macOS re-prompts on every launch. We use the # maintained `security-framework` crate to (re)apply a permissive # "any application" SecAccess on the CLX credential items so reads never -# prompt. Pinned at the 2.x line that `keyring v2` already locks (single -# dependency tree, no duplicate Security.framework binding). macOS-gated so -# non-macOS builds never pull these. +# prompt. Aligned with keyring 3.x on security-framework 3.x + +# core-foundation 0.10 (single dependency tree, no duplicate +# Security.framework binding). macOS-gated so non-macOS builds never pull +# these. [target.'cfg(target_os = "macos")'.dependencies] -security-framework = "2.11" -core-foundation = "0.9" +security-framework = "3.7.0" +core-foundation = "0.10.1" # `bounded_read` opens untrusted-path files with O_NONBLOCK on Unix so the # open() call itself cannot hang on a FIFO with no writer attached (a plain diff --git a/crates/clx-core/src/credentials/keychain_acl.rs b/crates/clx-core/src/credentials/keychain_acl.rs index bf29e2e..8b7c204 100644 --- a/crates/clx-core/src/credentials/keychain_acl.rs +++ b/crates/clx-core/src/credentials/keychain_acl.rs @@ -388,7 +388,13 @@ mod imp { match keychain.find_generic_password(service, account) { Ok((_pw, item)) => { debug_assert_eq!(decide_access(true), AccessDecision::Relax); - let raw = item.as_CFTypeRef().cast_mut(); + // core-foundation 0.10 / security-framework 3.x: use the + // typed `as_concrete_TypeRef()` (returns `SecKeychainItemRef`) + // instead of the untyped `as_CFTypeRef().cast_mut()` path that + // broke when TCFType's CFTypeRef conversion was reorganized, + // then `.cast()` back to the `*mut c_void` that the FFI helper + // `apply_any_app_access` expects. + let raw = item.as_concrete_TypeRef().cast(); apply_any_app_access(raw, service)?; Ok(AccessDecision::Relax) } diff --git a/crates/clx/Cargo.toml b/crates/clx/Cargo.toml index 292e54b..a25e92f 100644 --- a/crates/clx/Cargo.toml +++ b/crates/clx/Cargo.toml @@ -31,7 +31,7 @@ chrono.workspace = true reqwest.workspace = true rpassword.workspace = true ratatui = "0.30" -crossterm = "0.28" +crossterm = "0.29.0" # D2 reranker: shared with clx-core via re-export; the CLI also calls # fastembed directly for `clx model fetch` so it can stream progress.