2026-03-02 17:26:21 -07:00
|
|
|
# This file is automatically @generated by Cargo.
|
|
|
|
|
# It is not intended for manual editing.
|
|
|
|
|
version = 4
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "aead"
|
|
|
|
|
version = "0.5.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"crypto-common",
|
|
|
|
|
"generic-array",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "aes"
|
|
|
|
|
version = "0.8.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"cipher",
|
|
|
|
|
"cpufeatures",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "aes-gcm"
|
|
|
|
|
version = "0.10.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"aead",
|
|
|
|
|
"aes",
|
|
|
|
|
"cipher",
|
|
|
|
|
"ctr",
|
|
|
|
|
"ghash",
|
|
|
|
|
"subtle",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "aho-corasick"
|
|
|
|
|
version = "1.1.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"memchr",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "allocator-api2"
|
|
|
|
|
version = "0.2.21"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "android_system_properties"
|
|
|
|
|
version = "0.1.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anstream"
|
2026-03-12 12:03:17 -06:00
|
|
|
version = "1.0.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 12:03:17 -06:00
|
|
|
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"anstyle",
|
|
|
|
|
"anstyle-parse",
|
|
|
|
|
"anstyle-query",
|
|
|
|
|
"anstyle-wincon",
|
|
|
|
|
"colorchoice",
|
|
|
|
|
"is_terminal_polyfill",
|
|
|
|
|
"utf8parse",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anstyle"
|
2026-03-13 14:01:42 -06:00
|
|
|
version = "1.0.14"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-13 14:01:42 -06:00
|
|
|
checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anstyle-parse"
|
2026-03-12 12:03:17 -06:00
|
|
|
version = "1.0.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 12:03:17 -06:00
|
|
|
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"utf8parse",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anstyle-query"
|
|
|
|
|
version = "1.1.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anstyle-wincon"
|
|
|
|
|
version = "3.0.11"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anstyle",
|
|
|
|
|
"once_cell_polyfill",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "anyhow"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "1.0.102"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "async-trait"
|
|
|
|
|
version = "0.1.89"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "atomic"
|
|
|
|
|
version = "0.6.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytemuck",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "atomic-waker"
|
|
|
|
|
version = "1.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "autocfg"
|
|
|
|
|
version = "1.5.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "base64"
|
|
|
|
|
version = "0.22.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bit-set"
|
|
|
|
|
version = "0.5.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bit-vec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bit-vec"
|
|
|
|
|
version = "0.6.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bitflags"
|
|
|
|
|
version = "1.3.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bitflags"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "2.11.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "block-buffer"
|
|
|
|
|
version = "0.10.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"generic-array",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bumpalo"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "3.20.2"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "bytemuck"
|
|
|
|
|
version = "1.25.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
|
|
|
|
|
|
2026-03-12 08:58:52 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "byteorder"
|
|
|
|
|
version = "1.5.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "bytes"
|
|
|
|
|
version = "1.11.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "castaway"
|
|
|
|
|
version = "0.2.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"rustversion",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "cc"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "1.2.58"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"find-msvc-tools",
|
|
|
|
|
"shlex",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "cfg-if"
|
|
|
|
|
version = "1.0.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "cfg_aliases"
|
|
|
|
|
version = "0.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "chrono"
|
|
|
|
|
version = "0.4.44"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"iana-time-zone",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"num-traits",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
"windows-link",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 16:41:16 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "chrono-tz"
|
|
|
|
|
version = "0.10.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"chrono",
|
|
|
|
|
"phf 0.12.1",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "cipher"
|
|
|
|
|
version = "0.4.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"crypto-common",
|
|
|
|
|
"inout",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "clap"
|
2026-03-12 14:33:37 -06:00
|
|
|
version = "4.6.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 14:33:37 -06:00
|
|
|
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"clap_builder",
|
|
|
|
|
"clap_derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "clap_builder"
|
2026-03-12 14:33:37 -06:00
|
|
|
version = "4.6.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 14:33:37 -06:00
|
|
|
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"anstream",
|
|
|
|
|
"anstyle",
|
|
|
|
|
"clap_lex",
|
|
|
|
|
"strsim",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "clap_derive"
|
2026-03-12 14:33:37 -06:00
|
|
|
version = "4.6.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 14:33:37 -06:00
|
|
|
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"heck",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "clap_lex"
|
2026-03-12 14:33:37 -06:00
|
|
|
version = "1.1.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 14:33:37 -06:00
|
|
|
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "colorchoice"
|
2026-03-13 14:01:42 -06:00
|
|
|
version = "1.0.5"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-13 14:01:42 -06:00
|
|
|
checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "compact_str"
|
|
|
|
|
version = "0.9.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"castaway",
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"itoa",
|
|
|
|
|
"rustversion",
|
|
|
|
|
"ryu",
|
|
|
|
|
"static_assertions",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "convert_case"
|
|
|
|
|
version = "0.10.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"unicode-segmentation",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-12 08:58:52 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "core-foundation"
|
|
|
|
|
version = "0.9.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"core-foundation-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "core-foundation"
|
|
|
|
|
version = "0.10.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"core-foundation-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "core-foundation-sys"
|
|
|
|
|
version = "0.8.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "cpufeatures"
|
|
|
|
|
version = "0.2.17"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "crossbeam-channel"
|
|
|
|
|
version = "0.5.15"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"crossbeam-utils",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "crossbeam-utils"
|
|
|
|
|
version = "0.8.21"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "crossterm"
|
|
|
|
|
version = "0.29.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"crossterm_winapi",
|
|
|
|
|
"derive_more",
|
|
|
|
|
"document-features",
|
|
|
|
|
"mio",
|
|
|
|
|
"parking_lot",
|
|
|
|
|
"rustix",
|
|
|
|
|
"signal-hook",
|
|
|
|
|
"signal-hook-mio",
|
|
|
|
|
"winapi",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "crossterm_winapi"
|
|
|
|
|
version = "0.9.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"winapi",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "crypto-common"
|
|
|
|
|
version = "0.1.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"generic-array",
|
|
|
|
|
"rand_core 0.6.4",
|
|
|
|
|
"typenum",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "csscolorparser"
|
|
|
|
|
version = "0.6.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"lab",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ctr"
|
|
|
|
|
version = "0.9.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cipher",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling"
|
|
|
|
|
version = "0.20.11"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"darling_core 0.20.11",
|
|
|
|
|
"darling_macro 0.20.11",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling"
|
|
|
|
|
version = "0.23.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"darling_core 0.23.0",
|
|
|
|
|
"darling_macro 0.23.0",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling_core"
|
|
|
|
|
version = "0.20.11"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"fnv",
|
|
|
|
|
"ident_case",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"strsim",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling_core"
|
|
|
|
|
version = "0.23.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"ident_case",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"strsim",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling_macro"
|
|
|
|
|
version = "0.20.11"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"darling_core 0.20.11",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "darling_macro"
|
|
|
|
|
version = "0.23.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"darling_core 0.23.0",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "deltae"
|
|
|
|
|
version = "0.3.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "deranged"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.5.8"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"powerfmt",
|
|
|
|
|
"serde_core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "derive_builder"
|
|
|
|
|
version = "0.20.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"derive_builder_macro",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "derive_builder_core"
|
|
|
|
|
version = "0.20.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"darling 0.20.11",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "derive_builder_macro"
|
|
|
|
|
version = "0.20.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"derive_builder_core",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "derive_more"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"derive_more-impl",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "derive_more-impl"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"convert_case",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"rustc_version",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "digest"
|
|
|
|
|
version = "0.10.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"block-buffer",
|
|
|
|
|
"crypto-common",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "dirs"
|
|
|
|
|
version = "5.0.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"dirs-sys",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[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",
|
|
|
|
|
"windows-sys 0.48.0",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "displaydoc"
|
|
|
|
|
version = "0.2.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "document-features"
|
|
|
|
|
version = "0.2.12"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"litrs",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "dotenvy"
|
|
|
|
|
version = "0.15.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "either"
|
|
|
|
|
version = "1.15.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "equivalent"
|
|
|
|
|
version = "1.0.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "errno"
|
|
|
|
|
version = "0.3.14"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "euclid"
|
2026-03-18 14:56:16 -06:00
|
|
|
version = "0.22.14"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-18 14:56:16 -06:00
|
|
|
checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"num-traits",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "fancy-regex"
|
|
|
|
|
version = "0.11.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bit-set",
|
|
|
|
|
"regex",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "fastrand"
|
|
|
|
|
version = "2.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "filedescriptor"
|
|
|
|
|
version = "0.8.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"thiserror 1.0.69",
|
|
|
|
|
"winapi",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "find-msvc-tools"
|
|
|
|
|
version = "0.1.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "finl_unicode"
|
|
|
|
|
version = "1.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "fixedbitset"
|
|
|
|
|
version = "0.4.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "fnv"
|
|
|
|
|
version = "1.0.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "foldhash"
|
|
|
|
|
version = "0.1.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "foldhash"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "form_urlencoded"
|
|
|
|
|
version = "1.2.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-channel"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"futures-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-core"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-executor"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-task",
|
|
|
|
|
"futures-util",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-io"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-macro"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-sink"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-task"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "futures-util"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.3.32"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-io",
|
|
|
|
|
"futures-macro",
|
|
|
|
|
"futures-sink",
|
|
|
|
|
"futures-task",
|
|
|
|
|
"memchr",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"slab",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "generic-array"
|
|
|
|
|
version = "0.14.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"typenum",
|
|
|
|
|
"version_check",
|
|
|
|
|
]
|
|
|
|
|
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "gethostname"
|
|
|
|
|
version = "1.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"rustix",
|
|
|
|
|
"windows-link",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "getrandom"
|
|
|
|
|
version = "0.2.17"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
"wasi",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "getrandom"
|
|
|
|
|
version = "0.3.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"libc",
|
2026-03-03 10:46:45 -07:00
|
|
|
"r-efi 5.3.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wasip2",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "getrandom"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.4.2"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"libc",
|
2026-03-03 10:46:45 -07:00
|
|
|
"r-efi 6.0.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wasip2",
|
|
|
|
|
"wasip3",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ghash"
|
|
|
|
|
version = "0.5.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"opaque-debug",
|
|
|
|
|
"polyval",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
2026-03-24 14:40:03 -06:00
|
|
|
name = "google-workspace"
|
2026-03-31 12:32:18 -06:00
|
|
|
version = "0.22.5"
|
2026-03-24 14:40:03 -06:00
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
"reqwest",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"serial_test",
|
|
|
|
|
"tempfile",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tracing",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "google-workspace-cli"
|
2026-03-31 12:32:18 -06:00
|
|
|
version = "0.22.5"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"aes-gcm",
|
|
|
|
|
"anyhow",
|
|
|
|
|
"async-trait",
|
|
|
|
|
"base64",
|
2026-03-13 14:56:33 -06:00
|
|
|
"bytes",
|
2026-03-02 17:26:21 -07:00
|
|
|
"chrono",
|
2026-03-13 16:41:16 -06:00
|
|
|
"chrono-tz",
|
2026-03-02 17:26:21 -07:00
|
|
|
"clap",
|
|
|
|
|
"crossterm",
|
|
|
|
|
"derive_builder",
|
|
|
|
|
"dirs",
|
|
|
|
|
"dotenvy",
|
|
|
|
|
"futures-util",
|
2026-03-24 14:40:03 -06:00
|
|
|
"google-workspace",
|
2026-03-02 17:26:21 -07:00
|
|
|
"hostname",
|
2026-03-13 16:41:16 -06:00
|
|
|
"iana-time-zone",
|
2026-03-02 17:26:21 -07:00
|
|
|
"keyring",
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
"mail-builder",
|
|
|
|
|
"mime_guess2",
|
fix: harden URL encoding and input validation for AI/LLM callers (#21)
* refactor: replace manual urlencoded() with reqwest .query() builder
Remove duplicate hand-rolled urlencoded() functions from workflows.rs
and calendar.rs. All query parameters are now passed via reqwest's
.query() API, which handles percent-encoding correctly and completely.
* fix: percent-encode path parameters to prevent path traversal
Use percent_encoding::utf8_percent_encode for calendar_id, cal.id,
message_id, and file_id before interpolating into URL path segments.
Addresses code review feedback on security regression.
* fix: add shared URL safety helpers for path params
Add encode_path_segment() for single-segment IDs and
validate_resource_name() for multi-segment resource names.
encode_path_segment: percent-encodes all non-alphanumeric chars,
used for calendar IDs, file IDs, and message IDs.
validate_resource_name: rejects path traversal (..) and control
chars while preserving intentional / structure, used for Chat
space names, task list IDs, and subscription names. Returns clear
error messages for LLM callers.
* test: add AI edge case tests for URL safety helpers
Cover query/fragment injection, double-encoding, unicode, spaces,
path traversal via encoding, control chars (CR/tab), and clear
error message assertions for LLM callers.
* fix: warn on stderr when API calls fail silently
- Daily briefing calendar events fetch
- Daily briefing tasks fetch
- Daily summary calendar events fetch
- Daily summary unread email count fetch
Addresses PR review feedback about confusing silent failures,
especially for LLM callers that cannot see visual cues.
* fix: harden input validation for AI/LLM callers
- Add src/validate.rs with validate_safe_output_dir, validate_msg_format,
and validate_safe_dir_path helpers
- Validate --output-dir against path traversal in gmail +watch and
events +subscribe
- Validate --msg-format against allowlist in gmail +watch
- Validate --dir against path traversal in script +push
- Add clap value_parser constraint for --msg-format
- Document input validation patterns in AGENTS.md
Closes #23
* chore: add changesets for PR #21 commits
* test: add comprehensive test coverage for input validation handlers
* docs: document input validation and URL safety patterns in AGENTS.md and CONTRIBUTING.md
* fix: address PR review comments — reject ?/# in resource names, validate subscription arg, remove redundant validate_msg_format
* fix: store validated PathBuf, remove dead code, delete duplicate SubscribeConfig
Addresses review comments:
- Store validated PathBuf from validate_safe_output_dir instead of
discarding it (output_dir is now Option<PathBuf>)
- Remove duplicate SubscribeConfig from events/mod.rs
- Delete unused validate_msg_format (clap value_parser handles this)
- Remove all #[allow(dead_code)] annotations
* fix: per-segment traversal check in validate_resource_name, fix docs
* fix: harden security validation and deduplicate logic
---------
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
2026-03-03 18:36:41 -07:00
|
|
|
"percent-encoding",
|
2026-03-02 17:26:21 -07:00
|
|
|
"rand 0.8.5",
|
|
|
|
|
"ratatui",
|
|
|
|
|
"reqwest",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"serial_test",
|
|
|
|
|
"sha2",
|
|
|
|
|
"tempfile",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"tokio",
|
2026-03-13 14:56:33 -06:00
|
|
|
"tokio-util",
|
2026-03-31 12:22:48 -06:00
|
|
|
"toml",
|
2026-03-13 15:27:38 -06:00
|
|
|
"tracing",
|
|
|
|
|
"tracing-appender",
|
|
|
|
|
"tracing-subscriber",
|
2026-03-17 23:35:00 +05:30
|
|
|
"uuid",
|
2026-03-02 17:26:21 -07:00
|
|
|
"yup-oauth2",
|
2026-03-10 11:17:35 -06:00
|
|
|
"zeroize",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "h2"
|
|
|
|
|
version = "0.4.13"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"atomic-waker",
|
|
|
|
|
"bytes",
|
|
|
|
|
"fnv",
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-sink",
|
|
|
|
|
"http",
|
|
|
|
|
"indexmap",
|
|
|
|
|
"slab",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tokio-util",
|
|
|
|
|
"tracing",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hashbrown"
|
|
|
|
|
version = "0.15.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"foldhash 0.1.5",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hashbrown"
|
|
|
|
|
version = "0.16.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"allocator-api2",
|
|
|
|
|
"equivalent",
|
|
|
|
|
"foldhash 0.2.0",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "heck"
|
|
|
|
|
version = "0.5.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hex"
|
|
|
|
|
version = "0.4.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hostname"
|
|
|
|
|
version = "0.4.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"libc",
|
|
|
|
|
"windows-link",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "http"
|
|
|
|
|
version = "1.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"itoa",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "http-body"
|
|
|
|
|
version = "1.0.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"http",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "http-body-util"
|
|
|
|
|
version = "0.1.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"futures-core",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "httparse"
|
|
|
|
|
version = "1.10.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "httpdate"
|
|
|
|
|
version = "1.0.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hyper"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "1.9.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"atomic-waker",
|
|
|
|
|
"bytes",
|
|
|
|
|
"futures-channel",
|
|
|
|
|
"futures-core",
|
|
|
|
|
"h2",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body",
|
|
|
|
|
"httparse",
|
|
|
|
|
"httpdate",
|
|
|
|
|
"itoa",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"smallvec",
|
|
|
|
|
"tokio",
|
|
|
|
|
"want",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hyper-rustls"
|
|
|
|
|
version = "0.27.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"http",
|
|
|
|
|
"hyper",
|
|
|
|
|
"hyper-util",
|
|
|
|
|
"rustls",
|
|
|
|
|
"rustls-native-certs",
|
|
|
|
|
"rustls-pki-types",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tokio-rustls",
|
|
|
|
|
"tower-service",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "hyper-util"
|
|
|
|
|
version = "0.1.20"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"base64",
|
|
|
|
|
"bytes",
|
|
|
|
|
"futures-channel",
|
|
|
|
|
"futures-util",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body",
|
|
|
|
|
"hyper",
|
|
|
|
|
"ipnet",
|
|
|
|
|
"libc",
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"socket2",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tower-service",
|
|
|
|
|
"tracing",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "iana-time-zone"
|
|
|
|
|
version = "0.1.65"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"android_system_properties",
|
|
|
|
|
"core-foundation-sys",
|
|
|
|
|
"iana-time-zone-haiku",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"log",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
"windows-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "iana-time-zone-haiku"
|
|
|
|
|
version = "0.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_collections"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"displaydoc",
|
|
|
|
|
"potential_utf",
|
|
|
|
|
"yoke",
|
|
|
|
|
"zerofrom",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_locale_core"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"displaydoc",
|
|
|
|
|
"litemap",
|
|
|
|
|
"tinystr",
|
|
|
|
|
"writeable",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_normalizer"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"icu_collections",
|
|
|
|
|
"icu_normalizer_data",
|
|
|
|
|
"icu_properties",
|
|
|
|
|
"icu_provider",
|
|
|
|
|
"smallvec",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_normalizer_data"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_properties"
|
|
|
|
|
version = "2.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"icu_collections",
|
|
|
|
|
"icu_locale_core",
|
|
|
|
|
"icu_properties_data",
|
|
|
|
|
"icu_provider",
|
|
|
|
|
"zerotrie",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_properties_data"
|
|
|
|
|
version = "2.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "icu_provider"
|
|
|
|
|
version = "2.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"displaydoc",
|
|
|
|
|
"icu_locale_core",
|
|
|
|
|
"writeable",
|
|
|
|
|
"yoke",
|
|
|
|
|
"zerofrom",
|
|
|
|
|
"zerotrie",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "id-arena"
|
|
|
|
|
version = "2.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ident_case"
|
|
|
|
|
version = "1.0.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "idna"
|
|
|
|
|
version = "1.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"idna_adapter",
|
|
|
|
|
"smallvec",
|
|
|
|
|
"utf8_iter",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "idna_adapter"
|
|
|
|
|
version = "1.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"icu_normalizer",
|
|
|
|
|
"icu_properties",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "indexmap"
|
|
|
|
|
version = "2.13.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"equivalent",
|
|
|
|
|
"hashbrown 0.16.1",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "indoc"
|
|
|
|
|
version = "2.0.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"rustversion",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "inout"
|
|
|
|
|
version = "0.1.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"generic-array",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "instability"
|
2026-03-17 14:27:07 -06:00
|
|
|
version = "0.3.12"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-17 14:27:07 -06:00
|
|
|
checksum = "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"darling 0.23.0",
|
|
|
|
|
"indoc",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ipnet"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "2.12.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "iri-string"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.7.12"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"memchr",
|
|
|
|
|
"serde",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "is_terminal_polyfill"
|
|
|
|
|
version = "1.70.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "itertools"
|
|
|
|
|
version = "0.14.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"either",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "itoa"
|
2026-03-23 14:49:28 -06:00
|
|
|
version = "1.0.18"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-23 14:49:28 -06:00
|
|
|
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "js-sys"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.3.93"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "797146bb2677299a1eb6b7b50a890f4c361b29ef967addf5b2fa45dae1bb6d7d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
2026-03-31 11:20:03 -06:00
|
|
|
"cfg-if",
|
|
|
|
|
"futures-util",
|
2026-03-02 17:26:21 -07:00
|
|
|
"once_cell",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "kasuari"
|
2026-03-13 14:01:42 -06:00
|
|
|
version = "0.4.12"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-13 14:01:42 -06:00
|
|
|
checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"hashbrown 0.16.1",
|
|
|
|
|
"portable-atomic",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "keyring"
|
|
|
|
|
version = "3.6.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
|
|
|
|
|
dependencies = [
|
2026-03-12 08:58:52 -07:00
|
|
|
"byteorder",
|
2026-03-02 17:26:21 -07:00
|
|
|
"log",
|
2026-03-12 08:58:52 -07:00
|
|
|
"security-framework 2.11.1",
|
|
|
|
|
"security-framework 3.7.0",
|
|
|
|
|
"windows-sys 0.60.2",
|
2026-03-02 17:26:21 -07:00
|
|
|
"zeroize",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "lab"
|
|
|
|
|
version = "0.11.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "lazy_static"
|
|
|
|
|
version = "1.5.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "leb128fmt"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "libc"
|
2026-03-08 18:26:33 -06:00
|
|
|
version = "0.2.183"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-08 18:26:33 -06:00
|
|
|
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "libredox"
|
2026-03-24 11:50:23 -06:00
|
|
|
version = "0.1.15"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-24 11:50:23 -06:00
|
|
|
checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "line-clipping"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.3.7"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "linux-raw-sys"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.12.1"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "litemap"
|
|
|
|
|
version = "0.8.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "litrs"
|
|
|
|
|
version = "1.0.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "lock_api"
|
|
|
|
|
version = "0.4.14"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"scopeguard",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "log"
|
|
|
|
|
version = "0.4.29"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "lru"
|
|
|
|
|
version = "0.16.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"hashbrown 0.16.1",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "lru-slab"
|
|
|
|
|
version = "0.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "mac_address"
|
|
|
|
|
version = "1.1.8"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"nix",
|
|
|
|
|
"winapi",
|
|
|
|
|
]
|
|
|
|
|
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "mail-builder"
|
|
|
|
|
version = "0.4.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "900998f307338c4013a28ab14d760b784067324b164448c6d98a89e44810473b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"gethostname",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "matchers"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"regex-automata",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "memchr"
|
|
|
|
|
version = "2.8.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "memmem"
|
|
|
|
|
version = "0.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "memoffset"
|
|
|
|
|
version = "0.9.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"autocfg",
|
|
|
|
|
]
|
|
|
|
|
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "mime"
|
|
|
|
|
version = "0.3.17"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "mime_guess2"
|
|
|
|
|
version = "2.3.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1706dc14a2e140dec0a7a07109d9a3d5890b81e85bd6c60b906b249a77adf0ca"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"mime",
|
|
|
|
|
"phf 0.11.3",
|
|
|
|
|
"phf_shared 0.11.3",
|
|
|
|
|
"unicase",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "minimal-lexical"
|
|
|
|
|
version = "0.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "mio"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "1.2.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"log",
|
|
|
|
|
"wasi",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "nix"
|
|
|
|
|
version = "0.29.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"cfg-if",
|
|
|
|
|
"cfg_aliases",
|
|
|
|
|
"libc",
|
|
|
|
|
"memoffset",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "nom"
|
|
|
|
|
version = "7.1.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"memchr",
|
|
|
|
|
"minimal-lexical",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "nu-ansi-term"
|
|
|
|
|
version = "0.50.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "num-conv"
|
2026-03-25 11:31:07 -06:00
|
|
|
version = "0.2.1"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-25 11:31:07 -06:00
|
|
|
checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "num-derive"
|
|
|
|
|
version = "0.4.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "num-traits"
|
|
|
|
|
version = "0.2.19"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"autocfg",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "num_threads"
|
|
|
|
|
version = "0.1.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "once_cell"
|
2026-03-12 10:04:46 -06:00
|
|
|
version = "1.21.4"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 10:04:46 -06:00
|
|
|
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "once_cell_polyfill"
|
|
|
|
|
version = "1.70.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "opaque-debug"
|
|
|
|
|
version = "0.3.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "openssl-probe"
|
|
|
|
|
version = "0.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "option-ext"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ordered-float"
|
|
|
|
|
version = "4.6.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"num-traits",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "parking_lot"
|
|
|
|
|
version = "0.12.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"lock_api",
|
|
|
|
|
"parking_lot_core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "parking_lot_core"
|
|
|
|
|
version = "0.9.12"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"libc",
|
|
|
|
|
"redox_syscall",
|
|
|
|
|
"smallvec",
|
|
|
|
|
"windows-link",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "percent-encoding"
|
|
|
|
|
version = "2.3.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "pest"
|
|
|
|
|
version = "2.8.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"memchr",
|
|
|
|
|
"ucd-trie",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "pest_derive"
|
|
|
|
|
version = "2.8.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"pest",
|
|
|
|
|
"pest_generator",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "pest_generator"
|
|
|
|
|
version = "2.8.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"pest",
|
|
|
|
|
"pest_meta",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "pest_meta"
|
|
|
|
|
version = "2.8.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"pest",
|
|
|
|
|
"sha2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf"
|
|
|
|
|
version = "0.11.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"phf_macros",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf_shared 0.11.3",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf"
|
|
|
|
|
version = "0.12.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"phf_shared 0.12.1",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf_codegen"
|
|
|
|
|
version = "0.11.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"phf_generator",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf_shared 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf_generator"
|
|
|
|
|
version = "0.11.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
|
|
|
|
|
dependencies = [
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf_shared 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
"rand 0.8.5",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf_macros"
|
|
|
|
|
version = "0.11.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"phf_generator",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf_shared 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
"unicase",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "phf_shared"
|
|
|
|
|
version = "0.11.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"siphasher",
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
"unicase",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
2026-03-13 16:41:16 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "phf_shared"
|
|
|
|
|
version = "0.12.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"siphasher",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "pin-project-lite"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.2.17"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "polyval"
|
|
|
|
|
version = "0.6.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"cpufeatures",
|
|
|
|
|
"opaque-debug",
|
|
|
|
|
"universal-hash",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "portable-atomic"
|
|
|
|
|
version = "1.13.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "potential_utf"
|
|
|
|
|
version = "0.1.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "powerfmt"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ppv-lite86"
|
|
|
|
|
version = "0.2.21"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"zerocopy",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "prettyplease"
|
|
|
|
|
version = "0.2.37"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "proc-macro2"
|
|
|
|
|
version = "1.0.106"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"unicode-ident",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "quinn"
|
|
|
|
|
version = "0.11.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"cfg_aliases",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"quinn-proto",
|
|
|
|
|
"quinn-udp",
|
|
|
|
|
"rustc-hash",
|
|
|
|
|
"rustls",
|
|
|
|
|
"socket2",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tracing",
|
|
|
|
|
"web-time",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "quinn-proto"
|
2026-03-09 13:16:24 -06:00
|
|
|
version = "0.11.14"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-09 13:16:24 -06:00
|
|
|
checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"getrandom 0.3.4",
|
|
|
|
|
"lru-slab",
|
|
|
|
|
"rand 0.9.2",
|
|
|
|
|
"ring",
|
|
|
|
|
"rustc-hash",
|
|
|
|
|
"rustls",
|
|
|
|
|
"rustls-pki-types",
|
|
|
|
|
"slab",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"tinyvec",
|
|
|
|
|
"tracing",
|
|
|
|
|
"web-time",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "quinn-udp"
|
|
|
|
|
version = "0.5.14"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg_aliases",
|
|
|
|
|
"libc",
|
|
|
|
|
"once_cell",
|
|
|
|
|
"socket2",
|
|
|
|
|
"tracing",
|
|
|
|
|
"windows-sys 0.60.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "quote"
|
2026-03-03 18:37:15 -07:00
|
|
|
version = "1.0.45"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 18:37:15 -07:00
|
|
|
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "r-efi"
|
|
|
|
|
version = "5.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
|
|
|
|
|
2026-03-03 10:46:45 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "r-efi"
|
|
|
|
|
version = "6.0.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "rand"
|
|
|
|
|
version = "0.8.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"rand_chacha 0.3.1",
|
|
|
|
|
"rand_core 0.6.4",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rand"
|
|
|
|
|
version = "0.9.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"rand_chacha 0.9.0",
|
|
|
|
|
"rand_core 0.9.5",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rand_chacha"
|
|
|
|
|
version = "0.3.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"ppv-lite86",
|
|
|
|
|
"rand_core 0.6.4",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rand_chacha"
|
|
|
|
|
version = "0.9.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"ppv-lite86",
|
|
|
|
|
"rand_core 0.9.5",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rand_core"
|
|
|
|
|
version = "0.6.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"getrandom 0.2.17",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rand_core"
|
|
|
|
|
version = "0.9.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"getrandom 0.3.4",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui"
|
|
|
|
|
version = "0.30.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"instability",
|
|
|
|
|
"ratatui-core",
|
|
|
|
|
"ratatui-crossterm",
|
|
|
|
|
"ratatui-macros",
|
|
|
|
|
"ratatui-termwiz",
|
|
|
|
|
"ratatui-widgets",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui-core"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"compact_str",
|
|
|
|
|
"hashbrown 0.16.1",
|
|
|
|
|
"indoc",
|
|
|
|
|
"itertools",
|
|
|
|
|
"kasuari",
|
|
|
|
|
"lru",
|
|
|
|
|
"strum",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"unicode-segmentation",
|
|
|
|
|
"unicode-truncate",
|
|
|
|
|
"unicode-width",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui-crossterm"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"crossterm",
|
|
|
|
|
"instability",
|
|
|
|
|
"ratatui-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui-macros"
|
|
|
|
|
version = "0.7.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"ratatui-core",
|
|
|
|
|
"ratatui-widgets",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui-termwiz"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"ratatui-core",
|
|
|
|
|
"termwiz",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ratatui-widgets"
|
|
|
|
|
version = "0.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"hashbrown 0.16.1",
|
|
|
|
|
"indoc",
|
|
|
|
|
"instability",
|
|
|
|
|
"itertools",
|
|
|
|
|
"line-clipping",
|
|
|
|
|
"ratatui-core",
|
|
|
|
|
"strum",
|
|
|
|
|
"time",
|
|
|
|
|
"unicode-segmentation",
|
|
|
|
|
"unicode-width",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "redox_syscall"
|
|
|
|
|
version = "0.5.18"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[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 = "regex"
|
|
|
|
|
version = "1.12.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"aho-corasick",
|
|
|
|
|
"memchr",
|
|
|
|
|
"regex-automata",
|
|
|
|
|
"regex-syntax",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "regex-automata"
|
|
|
|
|
version = "0.4.14"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"aho-corasick",
|
|
|
|
|
"memchr",
|
|
|
|
|
"regex-syntax",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "regex-syntax"
|
|
|
|
|
version = "0.8.10"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "reqwest"
|
|
|
|
|
version = "0.12.28"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"base64",
|
|
|
|
|
"bytes",
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-util",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body",
|
|
|
|
|
"http-body-util",
|
|
|
|
|
"hyper",
|
|
|
|
|
"hyper-rustls",
|
|
|
|
|
"hyper-util",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"log",
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"quinn",
|
|
|
|
|
"rustls",
|
2026-03-09 10:06:48 -07:00
|
|
|
"rustls-native-certs",
|
2026-03-02 17:26:21 -07:00
|
|
|
"rustls-pki-types",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"serde_urlencoded",
|
|
|
|
|
"sync_wrapper",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tokio-rustls",
|
|
|
|
|
"tokio-util",
|
|
|
|
|
"tower",
|
|
|
|
|
"tower-http",
|
|
|
|
|
"tower-service",
|
|
|
|
|
"url",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
"wasm-bindgen-futures",
|
|
|
|
|
"wasm-streams",
|
|
|
|
|
"web-sys",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ring"
|
|
|
|
|
version = "0.17.14"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cc",
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"getrandom 0.2.17",
|
|
|
|
|
"libc",
|
|
|
|
|
"untrusted",
|
|
|
|
|
"windows-sys 0.52.0",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustc-hash"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "2.1.2"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustc_version"
|
|
|
|
|
version = "0.4.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"semver",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustix"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "1.1.4"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"errno",
|
|
|
|
|
"libc",
|
|
|
|
|
"linux-raw-sys",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustls"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "0.23.37"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"once_cell",
|
|
|
|
|
"ring",
|
|
|
|
|
"rustls-pki-types",
|
|
|
|
|
"rustls-webpki",
|
|
|
|
|
"subtle",
|
|
|
|
|
"zeroize",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustls-native-certs"
|
|
|
|
|
version = "0.8.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"openssl-probe",
|
|
|
|
|
"rustls-pki-types",
|
|
|
|
|
"schannel",
|
2026-03-12 08:58:52 -07:00
|
|
|
"security-framework 3.7.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustls-pki-types"
|
|
|
|
|
version = "1.14.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"web-time",
|
|
|
|
|
"zeroize",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustls-webpki"
|
2026-03-23 14:49:28 -06:00
|
|
|
version = "0.103.10"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-23 14:49:28 -06:00
|
|
|
checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"ring",
|
|
|
|
|
"rustls-pki-types",
|
|
|
|
|
"untrusted",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "rustversion"
|
|
|
|
|
version = "1.0.22"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ryu"
|
|
|
|
|
version = "1.0.23"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "scc"
|
|
|
|
|
version = "2.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"sdd",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "schannel"
|
2026-03-10 12:30:44 -06:00
|
|
|
version = "0.1.29"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-10 12:30:44 -06:00
|
|
|
checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "scopeguard"
|
|
|
|
|
version = "1.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "sdd"
|
|
|
|
|
version = "3.0.10"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "seahash"
|
|
|
|
|
version = "4.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
|
|
|
|
|
|
2026-03-12 08:58:52 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "security-framework"
|
|
|
|
|
version = "2.11.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bitflags 2.11.0",
|
|
|
|
|
"core-foundation 0.9.4",
|
|
|
|
|
"core-foundation-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
"security-framework-sys",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "security-framework"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "3.7.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-12 08:58:52 -07:00
|
|
|
"core-foundation 0.10.1",
|
2026-03-02 17:26:21 -07:00
|
|
|
"core-foundation-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
"security-framework-sys",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "security-framework-sys"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "2.17.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"core-foundation-sys",
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "semver"
|
|
|
|
|
version = "1.0.27"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "serde"
|
|
|
|
|
version = "1.0.228"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"serde_core",
|
|
|
|
|
"serde_derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "serde_core"
|
|
|
|
|
version = "1.0.228"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"serde_derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "serde_derive"
|
|
|
|
|
version = "1.0.228"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "serde_json"
|
|
|
|
|
version = "1.0.149"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"itoa",
|
|
|
|
|
"memchr",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_core",
|
|
|
|
|
"zmij",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
2026-03-31 12:22:48 -06:00
|
|
|
name = "serde_spanned"
|
|
|
|
|
version = "0.6.9"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 12:22:48 -06:00
|
|
|
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"serde",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-03 16:02:34 -07:00
|
|
|
[[package]]
|
2026-03-31 12:22:48 -06:00
|
|
|
name = "serde_urlencoded"
|
|
|
|
|
version = "0.7.1"
|
2026-03-03 16:02:34 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 12:22:48 -06:00
|
|
|
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
2026-03-03 16:02:34 -07:00
|
|
|
dependencies = [
|
2026-03-31 12:22:48 -06:00
|
|
|
"form_urlencoded",
|
2026-03-03 16:02:34 -07:00
|
|
|
"itoa",
|
|
|
|
|
"ryu",
|
|
|
|
|
"serde",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "serial_test"
|
|
|
|
|
version = "3.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"futures-executor",
|
|
|
|
|
"futures-util",
|
|
|
|
|
"log",
|
|
|
|
|
"once_cell",
|
|
|
|
|
"parking_lot",
|
|
|
|
|
"scc",
|
|
|
|
|
"serial_test_derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "serial_test_derive"
|
|
|
|
|
version = "3.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
2026-03-17 23:35:00 +05:30
|
|
|
[[package]]
|
|
|
|
|
name = "sha1_smol"
|
|
|
|
|
version = "1.0.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "sha2"
|
|
|
|
|
version = "0.10.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"cpufeatures",
|
|
|
|
|
"digest",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "sharded-slab"
|
|
|
|
|
version = "0.1.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"lazy_static",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "shlex"
|
|
|
|
|
version = "1.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "signal-hook"
|
|
|
|
|
version = "0.3.18"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"signal-hook-registry",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "signal-hook-mio"
|
|
|
|
|
version = "0.2.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
"mio",
|
|
|
|
|
"signal-hook",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "signal-hook-registry"
|
|
|
|
|
version = "1.4.8"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"errno",
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "siphasher"
|
|
|
|
|
version = "1.0.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "slab"
|
|
|
|
|
version = "0.4.12"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "smallvec"
|
|
|
|
|
version = "1.15.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "socket2"
|
2026-03-06 18:31:47 -07:00
|
|
|
version = "0.6.3"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-06 18:31:47 -07:00
|
|
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
2026-03-06 18:31:47 -07:00
|
|
|
"windows-sys 0.61.2",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "stable_deref_trait"
|
|
|
|
|
version = "1.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "static_assertions"
|
|
|
|
|
version = "1.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "strsim"
|
|
|
|
|
version = "0.11.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "strum"
|
|
|
|
|
version = "0.27.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"strum_macros",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "strum_macros"
|
|
|
|
|
version = "0.27.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"heck",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "subtle"
|
|
|
|
|
version = "2.6.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "syn"
|
|
|
|
|
version = "1.0.109"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"unicode-ident",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "syn"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "2.0.117"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"unicode-ident",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "sync_wrapper"
|
|
|
|
|
version = "1.0.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"futures-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "synstructure"
|
|
|
|
|
version = "0.13.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tempfile"
|
2026-03-12 10:04:46 -06:00
|
|
|
version = "3.27.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-12 10:04:46 -06:00
|
|
|
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"fastrand",
|
2026-03-03 10:46:45 -07:00
|
|
|
"getrandom 0.4.2",
|
2026-03-02 17:26:21 -07:00
|
|
|
"once_cell",
|
|
|
|
|
"rustix",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "terminfo"
|
|
|
|
|
version = "0.9.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"fnv",
|
|
|
|
|
"nom",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
"phf_codegen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "termios"
|
|
|
|
|
version = "0.3.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"libc",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "termwiz"
|
|
|
|
|
version = "0.23.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"base64",
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"fancy-regex",
|
|
|
|
|
"filedescriptor",
|
|
|
|
|
"finl_unicode",
|
|
|
|
|
"fixedbitset",
|
|
|
|
|
"hex",
|
|
|
|
|
"lazy_static",
|
|
|
|
|
"libc",
|
|
|
|
|
"log",
|
|
|
|
|
"memmem",
|
|
|
|
|
"nix",
|
|
|
|
|
"num-derive",
|
|
|
|
|
"num-traits",
|
|
|
|
|
"ordered-float",
|
|
|
|
|
"pest",
|
|
|
|
|
"pest_derive",
|
2026-03-13 16:41:16 -06:00
|
|
|
"phf 0.11.3",
|
2026-03-02 17:26:21 -07:00
|
|
|
"sha2",
|
|
|
|
|
"signal-hook",
|
|
|
|
|
"siphasher",
|
|
|
|
|
"terminfo",
|
|
|
|
|
"termios",
|
|
|
|
|
"thiserror 1.0.69",
|
|
|
|
|
"ucd-trie",
|
|
|
|
|
"unicode-segmentation",
|
|
|
|
|
"vtparse",
|
|
|
|
|
"wezterm-bidi",
|
|
|
|
|
"wezterm-blob-leases",
|
|
|
|
|
"wezterm-color-types",
|
|
|
|
|
"wezterm-dynamic",
|
|
|
|
|
"wezterm-input-types",
|
|
|
|
|
"winapi",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "thiserror"
|
|
|
|
|
version = "1.0.69"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"thiserror-impl 1.0.69",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "thiserror"
|
|
|
|
|
version = "2.0.18"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"thiserror-impl 2.0.18",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "thiserror-impl"
|
|
|
|
|
version = "1.0.69"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "thiserror-impl"
|
|
|
|
|
version = "2.0.18"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "thread_local"
|
|
|
|
|
version = "1.1.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "time"
|
|
|
|
|
version = "0.3.47"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"deranged",
|
2026-03-13 15:27:38 -06:00
|
|
|
"itoa",
|
2026-03-02 17:26:21 -07:00
|
|
|
"libc",
|
|
|
|
|
"num-conv",
|
|
|
|
|
"num_threads",
|
|
|
|
|
"powerfmt",
|
|
|
|
|
"serde_core",
|
|
|
|
|
"time-core",
|
|
|
|
|
"time-macros",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "time-core"
|
|
|
|
|
version = "0.1.8"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "time-macros"
|
|
|
|
|
version = "0.2.27"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"num-conv",
|
|
|
|
|
"time-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tinystr"
|
|
|
|
|
version = "0.8.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"displaydoc",
|
|
|
|
|
"zerovec",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tinyvec"
|
2026-03-17 14:27:07 -06:00
|
|
|
version = "1.11.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-17 14:27:07 -06:00
|
|
|
checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"tinyvec_macros",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tinyvec_macros"
|
|
|
|
|
version = "0.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tokio"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "1.50.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"libc",
|
|
|
|
|
"mio",
|
|
|
|
|
"parking_lot",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"signal-hook-registry",
|
|
|
|
|
"socket2",
|
|
|
|
|
"tokio-macros",
|
|
|
|
|
"windows-sys 0.61.2",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tokio-macros"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "2.6.1"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tokio-rustls"
|
|
|
|
|
version = "0.26.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"rustls",
|
|
|
|
|
"tokio",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tokio-util"
|
|
|
|
|
version = "0.7.18"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bytes",
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-sink",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"tokio",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-31 12:22:48 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "toml"
|
|
|
|
|
version = "0.8.23"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_spanned",
|
|
|
|
|
"toml_datetime",
|
|
|
|
|
"toml_edit",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "toml_datetime"
|
|
|
|
|
version = "0.6.11"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"serde",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "toml_edit"
|
|
|
|
|
version = "0.22.27"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"indexmap",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_spanned",
|
|
|
|
|
"toml_datetime",
|
|
|
|
|
"toml_write",
|
|
|
|
|
"winnow",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "toml_write"
|
|
|
|
|
version = "0.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "tower"
|
|
|
|
|
version = "0.5.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"futures-core",
|
|
|
|
|
"futures-util",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"sync_wrapper",
|
|
|
|
|
"tokio",
|
|
|
|
|
"tower-layer",
|
|
|
|
|
"tower-service",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tower-http"
|
|
|
|
|
version = "0.6.8"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"bytes",
|
|
|
|
|
"futures-util",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body",
|
|
|
|
|
"iri-string",
|
|
|
|
|
"pin-project-lite",
|
|
|
|
|
"tower",
|
|
|
|
|
"tower-layer",
|
|
|
|
|
"tower-service",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tower-layer"
|
|
|
|
|
version = "0.3.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tower-service"
|
|
|
|
|
version = "0.3.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tracing"
|
|
|
|
|
version = "0.1.44"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"pin-project-lite",
|
2026-03-13 15:27:38 -06:00
|
|
|
"tracing-attributes",
|
2026-03-02 17:26:21 -07:00
|
|
|
"tracing-core",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-appender"
|
|
|
|
|
version = "0.2.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"crossbeam-channel",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"time",
|
|
|
|
|
"tracing-subscriber",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-attributes"
|
|
|
|
|
version = "0.1.31"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"syn 2.0.117",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-core"
|
|
|
|
|
version = "0.1.36"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"once_cell",
|
2026-03-13 15:27:38 -06:00
|
|
|
"valuable",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-log"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"log",
|
|
|
|
|
"once_cell",
|
|
|
|
|
"tracing-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-serde"
|
|
|
|
|
version = "0.2.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"serde",
|
|
|
|
|
"tracing-core",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "tracing-subscriber"
|
|
|
|
|
version = "0.3.23"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"matchers",
|
|
|
|
|
"nu-ansi-term",
|
|
|
|
|
"once_cell",
|
|
|
|
|
"regex-automata",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"sharded-slab",
|
|
|
|
|
"smallvec",
|
|
|
|
|
"thread_local",
|
|
|
|
|
"tracing",
|
|
|
|
|
"tracing-core",
|
|
|
|
|
"tracing-log",
|
|
|
|
|
"tracing-serde",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "try-lock"
|
|
|
|
|
version = "0.2.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "typenum"
|
|
|
|
|
version = "1.19.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "ucd-trie"
|
|
|
|
|
version = "0.1.7"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
|
|
|
|
|
|
feat(gmail): Gmail helpers rollup — mail-builder, --attachment, +read (#526)
* refactor(gmail): replace hand-rolled email construction with mail-builder
Replace custom MessageBuilder, RFC 2047 encoding, header sanitization,
and address encoding (including #482) with the mail-builder crate
(Stalwart Labs, 0 runtime deps). Each command builds a
mail_builder::MessageBuilder directly.
Introduce structured types throughout:
- Mailbox type (parsed display name + email) replaces raw string passing
- sanitize_control_chars strips ASCII control characters (CRLF, null,
tab, etc.) at the parse boundary — defense-in-depth for mail-builder's
structured header types, superseding sanitize_header_value,
sanitize_component, and encode_address_header from #482
- OriginalMessage fields use Option<T> instead of empty-string sentinels
- parse_original_message returns Result with validation (threadId, From,
Message-ID)
- Pre-parsed Config types (SendConfig, ForwardConfig, ReplyConfig) with
Vec<Mailbox> — parse at the boundary, not downstream
- parse_forward_args and parse_send_args return Result with --to
validation, consistent with parse_reply_args
- parse_optional_mailboxes helper normalizes Some(vec![]) to None for
optional address fields (--cc, --bcc, --from)
- Envelope types borrow from Config + OriginalMessage with lifetimes
- Message IDs stored bare (no angle brackets), parsed once at boundary
- References stored as Vec<String> instead of space-separated string
- ThreadingHeaders bundles In-Reply-To + References with debug_assert
for bare-ID convention
- Shared CLI arg builders (common_mail_args, common_reply_args)
eliminate duplicated --cc/--bcc/--html/--dry-run definitions
Additional improvements:
- finalize_message returns Result instead of panicking via .expect()
- Mailbox::parse_list filters empty-email entries (trailing comma edge
case)
- format_email_link percent-encodes mailto hrefs to prevent parameter
injection
- Forward date handling: omits Date line when absent instead of showing
empty "Date: "
- Dry-run auth: log skipped auth as diagnostic instead of silently
discarding errors
- Restore --html tips in after_help strings (gmail_quote CSS, cid:
image warnings, HTML fragment advice) lost in release PR #434
- Update execute_method call for upload_content_type parameter (#429)
Delete: MessageBuilder, encode_header_value, sanitize_header_value,
encode_address_header, sanitize_component, extract_email,
extract_display_name, split_mailbox_list, build_references.
* feat(gmail): add --from flag to +send for send-as alias support
Consistent with +reply, +reply-all, and +forward which already support
--from. Uses the same parse_optional_mailboxes path and
apply_optional_headers plumbing.
* fix: quote display names with RFC 2822 special characters in +reply
When replying to emails from corporate senders with display names like
"Anderson, Rich (CORP)" <email@adp.com>, the +reply command fails with
"Invalid To header" (400) from the Gmail API.
The root cause: encode_address_header() strips quotes from the display
name via extract_display_name(), then reconstructs the address without
re-quoting. When the display name contains RFC 2822 special characters
(commas, parentheses), the unquoted form is ambiguous — commas split
it into multiple malformed mailboxes and parentheses are interpreted
as RFC 2822 comments.
Fix: re-quote the display name when it contains any RFC 2822 special
characters, using a single-pass character iterator that preserves
already-escaped sequences and escapes bare quotes/backslashes.
Fixes #512
* feat(gmail): add --attachment flag, +read helper, and mail-builder migration
Consolidates PRs #491, #513, #517, and #502 into a single rollup:
- Migrate message construction to mail-builder crate (RFC-compliant MIME)
- Add --from flag to +send for send-as alias support
- Add --attachment flag to +send with MIME auto-detection and path validation
- Add +read helper for extracting message body/headers (text, HTML, JSON)
- Serialize support for OriginalMessage and Mailbox types
- Display name quoting handled natively by mail-builder
* chore: regenerate skills [skip ci]
* fix: use validate_safe_file_path for attachment path validation
Addresses Gemini review: validate_safe_dir_path hardcodes '--dir' in
error messages. validate_safe_file_path accepts the flag name, so errors
now correctly reference '--attachment'.
* refactor: make OriginalMessage.thread_id optional
The Gmail API does not guarantee threadId on all message resources
(e.g. drafts). Making it Option<String> prevents parse failures on
valid messages and avoids requiring thread_id in helpers like +read
that don't use it.
* fix: use canonicalized path for attachment file operations (TOCTOU)
validate_safe_file_path returns a canonicalized PathBuf. Use it for
exists/is_file checks and downstream file reads instead of the original
un-resolved path to prevent time-of-check/time-of-use races.
* feat(gmail): add --attach flag for file attachments
Add -a/--attach to +send, +reply, +reply-all, and +forward. Can be
specified multiple times for multiple attachments. MIME type is auto-
detected via mime_guess2. Closes #247.
Send via the Gmail API upload endpoint (multipart/related with
message/rfc822 media type) instead of base64-encoding into a JSON raw
field. This raises the size limit from ~5MB (metadata-only endpoint) to
35MB (upload endpoint, per discovery document).
Introduce UploadSource enum in the executor to consolidate upload_path,
upload_content_type, and upload_bytes into a single type-safe parameter.
File and Bytes variants make the two upload strategies (from disk vs.
from memory) mutually exclusive by construction.
Validates attachment paths (control characters, regular file, non-empty)
and total size (25MB raw limit, accounting for base64 expansion of
attachments within the MIME message against the 35MB API limit). Size
check uses actual bytes read to avoid TOCTOU race.
* chore: update changeset and fix integration with malob's attachment impl
Update changeset to reflect combined work. Fix thread_id type mismatches
in new tests from cherry-pick. Fix upload_path scope in main.rs. Make
reject_control_chars pub(crate) for attachment validation.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: regenerate skills [skip ci]
* fix: restore MIME sanitization and terminal escape protection in executor
Restore two security features accidentally lost during the UploadSource
refactor:
1. resolve_upload_mime: restructure from early-returns to collect-then-
sanitize pattern — strips control chars from user-supplied MIME types
to prevent CRLF header injection.
2. Model Armor error path: restore sanitize_for_terminal on error messages
to prevent terminal escape sequence injection from API responses.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* chore: remove duplicate changeset from cherry-pick
gmail-attach-flag.md duplicated content already in gmail-helpers-rollup.md.
Both were marked minor, which would cause a double version bump.
* fix: add path traversal protection to attachment validation
Replace reject_control_chars with validate_safe_file_path in
parse_attachments. All file operations (metadata, read, filename
extraction, MIME detection) now use the canonicalized path, preventing
path traversal attacks (e.g. ../../.ssh/id_rsa) and closing TOCTOU gaps.
Update tests to use CWD-relative temp directories (tempdir_in("."))
since validate_safe_file_path rejects paths outside the working directory.
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
* refactor: deduplicate terminal sanitizer in read.rs
Replace the local sanitize_terminal_output function with the existing
crate::error::sanitize_for_terminal via import alias. This eliminates
code duplication and provides consistent sanitization across the codebase.
The crate-wide sanitizer also correctly strips CR (carriage return) which
can be abused for terminal overwrite attacks.
---------
Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Rich Anderson <richanderson00@gmail.com>
Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
Co-authored-by: googleworkspace-bot <googleworkspace-bot@users.noreply.github.com>
2026-03-17 16:55:50 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "unicase"
|
|
|
|
|
version = "2.9.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "unicode-ident"
|
2026-03-03 10:46:45 -07:00
|
|
|
version = "1.0.24"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-03 10:46:45 -07:00
|
|
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "unicode-segmentation"
|
2026-03-26 12:45:06 -06:00
|
|
|
version = "1.13.2"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-26 12:45:06 -06:00
|
|
|
checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "unicode-truncate"
|
|
|
|
|
version = "2.0.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"itertools",
|
|
|
|
|
"unicode-segmentation",
|
|
|
|
|
"unicode-width",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "unicode-width"
|
|
|
|
|
version = "0.2.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "unicode-xid"
|
|
|
|
|
version = "0.2.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "universal-hash"
|
|
|
|
|
version = "0.5.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"crypto-common",
|
|
|
|
|
"subtle",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "untrusted"
|
|
|
|
|
version = "0.9.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "url"
|
|
|
|
|
version = "2.5.8"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"form_urlencoded",
|
|
|
|
|
"idna",
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
"serde",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "utf8_iter"
|
|
|
|
|
version = "1.0.4"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "utf8parse"
|
|
|
|
|
version = "0.2.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "uuid"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "1.23.0"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"atomic",
|
2026-03-03 10:46:45 -07:00
|
|
|
"getrandom 0.4.2",
|
2026-03-02 17:26:21 -07:00
|
|
|
"js-sys",
|
2026-03-17 23:35:00 +05:30
|
|
|
"sha1_smol",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-13 15:27:38 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "valuable"
|
|
|
|
|
version = "0.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "version_check"
|
|
|
|
|
version = "0.9.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "vtparse"
|
|
|
|
|
version = "0.6.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"utf8parse",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "want"
|
|
|
|
|
version = "0.3.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"try-lock",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasi"
|
|
|
|
|
version = "0.11.1+wasi-snapshot-preview1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasip2"
|
|
|
|
|
version = "1.0.2+wasi-0.2.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"wit-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasip3"
|
|
|
|
|
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"wit-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-bindgen"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.2.116"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "7dc0882f7b5bb01ae8c5215a1230832694481c1a4be062fd410e12ea3da5b631"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"cfg-if",
|
|
|
|
|
"once_cell",
|
|
|
|
|
"rustversion",
|
|
|
|
|
"wasm-bindgen-macro",
|
|
|
|
|
"wasm-bindgen-shared",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-bindgen-futures"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.4.66"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "19280959e2844181895ef62f065c63e0ca07ece4771b53d89bfdb967d97cbf05"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"js-sys",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-bindgen-macro"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.2.116"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "75973d3066e01d035dbedaad2864c398df42f8dd7b1ea057c35b8407c015b537"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"quote",
|
|
|
|
|
"wasm-bindgen-macro-support",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-bindgen-macro-support"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.2.116"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "91af5e4be765819e0bcfee7322c14374dc821e35e72fa663a830bbc7dc199eac"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"bumpalo",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wasm-bindgen-shared",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-bindgen-shared"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.2.116"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "c9bf0406a78f02f336bf1e451799cca198e8acde4ffa278f0fb20487b150a633"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"unicode-ident",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-encoder"
|
|
|
|
|
version = "0.244.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"leb128fmt",
|
|
|
|
|
"wasmparser",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-metadata"
|
|
|
|
|
version = "0.244.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"indexmap",
|
|
|
|
|
"wasm-encoder",
|
|
|
|
|
"wasmparser",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasm-streams"
|
|
|
|
|
version = "0.4.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"futures-util",
|
|
|
|
|
"js-sys",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
"wasm-bindgen-futures",
|
|
|
|
|
"web-sys",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wasmparser"
|
|
|
|
|
version = "0.244.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
|
|
|
|
|
dependencies = [
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"hashbrown 0.15.5",
|
|
|
|
|
"indexmap",
|
|
|
|
|
"semver",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "web-sys"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.3.93"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "749466a37ee189057f54748b200186b59a03417a117267baf3fd89cecc9fb837"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"js-sys",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "web-time"
|
|
|
|
|
version = "1.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"js-sys",
|
|
|
|
|
"wasm-bindgen",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-bidi"
|
|
|
|
|
version = "0.2.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"log",
|
|
|
|
|
"wezterm-dynamic",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-blob-leases"
|
|
|
|
|
version = "0.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"getrandom 0.3.4",
|
|
|
|
|
"mac_address",
|
|
|
|
|
"sha2",
|
|
|
|
|
"thiserror 1.0.69",
|
|
|
|
|
"uuid",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-color-types"
|
|
|
|
|
version = "0.3.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"csscolorparser",
|
|
|
|
|
"deltae",
|
|
|
|
|
"lazy_static",
|
|
|
|
|
"wezterm-dynamic",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-dynamic"
|
|
|
|
|
version = "0.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"log",
|
|
|
|
|
"ordered-float",
|
|
|
|
|
"strsim",
|
|
|
|
|
"thiserror 1.0.69",
|
|
|
|
|
"wezterm-dynamic-derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-dynamic-derive"
|
|
|
|
|
version = "0.1.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"syn 1.0.109",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wezterm-input-types"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"bitflags 1.3.2",
|
|
|
|
|
"euclid",
|
|
|
|
|
"lazy_static",
|
|
|
|
|
"serde",
|
|
|
|
|
"wezterm-dynamic",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "winapi"
|
|
|
|
|
version = "0.3.9"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"winapi-i686-pc-windows-gnu",
|
|
|
|
|
"winapi-x86_64-pc-windows-gnu",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "winapi-i686-pc-windows-gnu"
|
|
|
|
|
version = "0.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "winapi-x86_64-pc-windows-gnu"
|
|
|
|
|
version = "0.4.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-core"
|
|
|
|
|
version = "0.62.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-implement",
|
|
|
|
|
"windows-interface",
|
|
|
|
|
"windows-link",
|
|
|
|
|
"windows-result",
|
|
|
|
|
"windows-strings",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-implement"
|
|
|
|
|
version = "0.60.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-interface"
|
|
|
|
|
version = "0.59.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-link"
|
|
|
|
|
version = "0.2.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-result"
|
|
|
|
|
version = "0.4.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-link",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-strings"
|
|
|
|
|
version = "0.5.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-targets 0.52.6",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-sys"
|
|
|
|
|
version = "0.60.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-targets 0.53.5",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-sys"
|
|
|
|
|
version = "0.61.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows_aarch64_gnullvm 0.52.6",
|
|
|
|
|
"windows_aarch64_msvc 0.52.6",
|
|
|
|
|
"windows_i686_gnu 0.52.6",
|
|
|
|
|
"windows_i686_gnullvm 0.52.6",
|
|
|
|
|
"windows_i686_msvc 0.52.6",
|
|
|
|
|
"windows_x86_64_gnu 0.52.6",
|
|
|
|
|
"windows_x86_64_gnullvm 0.52.6",
|
|
|
|
|
"windows_x86_64_msvc 0.52.6",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows-targets"
|
|
|
|
|
version = "0.53.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"windows-link",
|
|
|
|
|
"windows_aarch64_gnullvm 0.53.1",
|
|
|
|
|
"windows_aarch64_msvc 0.53.1",
|
|
|
|
|
"windows_i686_gnu 0.53.1",
|
|
|
|
|
"windows_i686_gnullvm 0.53.1",
|
|
|
|
|
"windows_i686_msvc 0.53.1",
|
|
|
|
|
"windows_x86_64_gnu 0.53.1",
|
|
|
|
|
"windows_x86_64_gnullvm 0.53.1",
|
|
|
|
|
"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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_aarch64_gnullvm"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_aarch64_msvc"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_i686_gnu"
|
|
|
|
|
version = "0.53.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_i686_gnullvm"
|
|
|
|
|
version = "0.52.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_i686_gnullvm"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_i686_msvc"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_x86_64_gnu"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_x86_64_gnullvm"
|
|
|
|
|
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"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "windows_x86_64_msvc"
|
|
|
|
|
version = "0.53.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
|
|
|
|
|
|
2026-03-31 12:22:48 -06:00
|
|
|
[[package]]
|
|
|
|
|
name = "winnow"
|
|
|
|
|
version = "0.7.15"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"memchr",
|
|
|
|
|
]
|
|
|
|
|
|
2026-03-02 17:26:21 -07:00
|
|
|
[[package]]
|
|
|
|
|
name = "wit-bindgen"
|
|
|
|
|
version = "0.51.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"wit-bindgen-rust-macro",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wit-bindgen-core"
|
|
|
|
|
version = "0.51.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"heck",
|
|
|
|
|
"wit-parser",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wit-bindgen-rust"
|
|
|
|
|
version = "0.51.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"heck",
|
|
|
|
|
"indexmap",
|
|
|
|
|
"prettyplease",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wasm-metadata",
|
|
|
|
|
"wit-bindgen-core",
|
|
|
|
|
"wit-component",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wit-bindgen-rust-macro"
|
|
|
|
|
version = "0.51.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"prettyplease",
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
"wit-bindgen-core",
|
|
|
|
|
"wit-bindgen-rust",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wit-component"
|
|
|
|
|
version = "0.244.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
2026-03-03 10:46:45 -07:00
|
|
|
"bitflags 2.11.0",
|
2026-03-02 17:26:21 -07:00
|
|
|
"indexmap",
|
|
|
|
|
"log",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_derive",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"wasm-encoder",
|
|
|
|
|
"wasm-metadata",
|
|
|
|
|
"wasmparser",
|
|
|
|
|
"wit-parser",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "wit-parser"
|
|
|
|
|
version = "0.244.0"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"anyhow",
|
|
|
|
|
"id-arena",
|
|
|
|
|
"indexmap",
|
|
|
|
|
"log",
|
|
|
|
|
"semver",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_derive",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"unicode-xid",
|
|
|
|
|
"wasmparser",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "writeable"
|
|
|
|
|
version = "0.6.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "yoke"
|
|
|
|
|
version = "0.8.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"stable_deref_trait",
|
|
|
|
|
"yoke-derive",
|
|
|
|
|
"zerofrom",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "yoke-derive"
|
|
|
|
|
version = "0.8.1"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
"synstructure",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "yup-oauth2"
|
|
|
|
|
version = "12.1.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "ef19a12dfb29fe39f78e1547e1be49717b84aef8762a4001359ed4f94d3accc1"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"async-trait",
|
|
|
|
|
"base64",
|
|
|
|
|
"http",
|
|
|
|
|
"http-body-util",
|
|
|
|
|
"hyper",
|
|
|
|
|
"hyper-rustls",
|
|
|
|
|
"hyper-util",
|
|
|
|
|
"log",
|
|
|
|
|
"percent-encoding",
|
|
|
|
|
"rustls",
|
|
|
|
|
"seahash",
|
|
|
|
|
"serde",
|
|
|
|
|
"serde_json",
|
|
|
|
|
"thiserror 2.0.18",
|
|
|
|
|
"time",
|
|
|
|
|
"tokio",
|
|
|
|
|
"url",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerocopy"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.8.48"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"zerocopy-derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerocopy-derive"
|
2026-03-31 11:20:03 -06:00
|
|
|
version = "0.8.48"
|
2026-03-02 17:26:21 -07:00
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2026-03-31 11:20:03 -06:00
|
|
|
checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
|
2026-03-02 17:26:21 -07:00
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerofrom"
|
|
|
|
|
version = "0.1.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"zerofrom-derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerofrom-derive"
|
|
|
|
|
version = "0.1.6"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
"synstructure",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zeroize"
|
|
|
|
|
version = "1.8.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
|
2026-03-10 11:17:35 -06:00
|
|
|
dependencies = [
|
|
|
|
|
"zeroize_derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zeroize_derive"
|
|
|
|
|
version = "1.4.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
|
|
|
|
"syn 2.0.117",
|
|
|
|
|
]
|
2026-03-02 17:26:21 -07:00
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerotrie"
|
|
|
|
|
version = "0.2.3"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"displaydoc",
|
|
|
|
|
"yoke",
|
|
|
|
|
"zerofrom",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerovec"
|
|
|
|
|
version = "0.11.5"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"yoke",
|
|
|
|
|
"zerofrom",
|
|
|
|
|
"zerovec-derive",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zerovec-derive"
|
|
|
|
|
version = "0.11.2"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
|
|
|
|
|
dependencies = [
|
|
|
|
|
"proc-macro2",
|
|
|
|
|
"quote",
|
2026-03-03 10:46:45 -07:00
|
|
|
"syn 2.0.117",
|
2026-03-02 17:26:21 -07:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[[package]]
|
|
|
|
|
name = "zmij"
|
|
|
|
|
version = "1.0.21"
|
|
|
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
|
|
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|