diff --git a/CHANGELOG.md b/CHANGELOG.md index e11f68b..27b4a36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## v0.10.0 - 2026-10-15 + ### Added - List commands without `--all-pages` report whether the result is complete: JSON `metadata.has_more`, plus `metadata.next_link` (Graph's `@odata.nextLink`) when more pages exist. Previously a truncated page looked identical to a complete collection. With `--all-pages`, `has_more` is false. `data` is unchanged. Human and plain output print "More results available; use --all-pages" on stderr. @@ -10,9 +12,11 @@ ### Changed - `Retry-After` is read in its HTTP-date form as well as seconds, honored on retried 5xx responses as well as 429, and capped at 300 seconds. +- Updated Rust dependencies (`dirs` 7.0.0, `comfy-table` 8.0.1, `hyper` 1.12.0, `tokio` 1.53.2, `uuid` 1.27.0, and `want` 0.3.2) and the release workflow's artifact upload/download actions. ### Fixed +- Updated `rustls` to 0.23.46 and `quinn-proto` to 0.11.18 to resolve nine RustSec advisories (RUSTSEC-2026-0338 through RUSTSEC-2026-0342 and RUSTSEC-2026-0346 through RUSTSEC-2026-0349). - `teams team update` and `teams channel update` no longer fail with "Failed to parse API response" (exit 1) after a successful update. Graph answers these with 204 No Content; every PATCH-based update now reads the resource back when the response has no body, so the output is unchanged. If that read fails, the error says the update succeeded (exit 1). - A POST is no longer replayed after a 5xx or a network failure once sent, which could post a message twice. It fails with exit code 8 or 7 and a hint to check before re-sending. A 429 or a connection that was never made is still retried, and read-only POSTs (`search`, `presence get-batch`) retry as before. - A POST answered 2xx whose response body cannot be read or parsed now says Graph performed it and not to re-send, instead of a bare network or parse error. diff --git a/Cargo.lock b/Cargo.lock index 2e1f567..4f0b713 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,6 +209,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core", +] + [[package]] name = "chrono" version = "0.4.45" @@ -363,6 +374,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -682,11 +702,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] @@ -696,10 +714,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", + "rand_core", "wasip2", "wasip3", + "wasm-bindgen", ] [[package]] @@ -1399,15 +1420,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - [[package]] name = "predicates" version = "3.1.4" @@ -1479,14 +1491,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.15" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "bytes", - "getrandom 0.3.4", + "getrandom 0.4.2", "lru-slab", "rand", + "rand_pcg", "ring", "rustc-hash", "rustls", @@ -1535,31 +1548,28 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ - "rand_chacha", + "chacha20", + "getrandom 0.4.2", "rand_core", ] [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] -name = "rand_core" -version = "0.9.5" +name = "rand_pcg" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "getrandom 0.3.4", + "rand_core", ] [[package]] @@ -1696,9 +1706,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "once_cell", "ring", @@ -1869,7 +1879,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -2004,7 +2014,7 @@ dependencies = [ [[package]] name = "teams-cli" -version = "0.9.0" +version = "0.10.0" dependencies = [ "anyhow", "assert_cmd", @@ -3033,26 +3043,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "zerofrom" version = "0.1.6" diff --git a/Cargo.toml b/Cargo.toml index 2cbdb93..0a251d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "teams-cli" -version = "0.9.0" +version = "0.10.0" edition = "2021" rust-version = "1.75" license = "MIT" diff --git a/docs/man/teams-agent-contract.7 b/docs/man/teams-agent-contract.7 index ba5f763..3e92070 100644 --- a/docs/man/teams-agent-contract.7 +++ b/docs/man/teams-agent-contract.7 @@ -1,4 +1,4 @@ -.TH TEAMS-AGENT-CONTRACT 7 "October 4, 2026" "teams-cli 0.9.0" "Miscellaneous Information" +.TH TEAMS-AGENT-CONTRACT 7 "October 15, 2026" "teams-cli 0.10.0" "Miscellaneous Information" .SH NAME teams-agent-contract \- automation contract for the teams CLI .SH DESCRIPTION diff --git a/docs/man/teams-auth.7 b/docs/man/teams-auth.7 index 2273b95..f786ccc 100644 --- a/docs/man/teams-auth.7 +++ b/docs/man/teams-auth.7 @@ -1,4 +1,4 @@ -.TH TEAMS-AUTH 7 "October 4, 2026" "teams-cli 0.9.0" "Miscellaneous Information" +.TH TEAMS-AUTH 7 "October 15, 2026" "teams-cli 0.10.0" "Miscellaneous Information" .SH NAME teams-auth \- authentication model for the teams CLI .SH DESCRIPTION diff --git a/docs/man/teams-config.5 b/docs/man/teams-config.5 index 32b9f13..ed654e5 100644 --- a/docs/man/teams-config.5 +++ b/docs/man/teams-config.5 @@ -1,4 +1,4 @@ -.TH TEAMS-CONFIG 5 "October 4, 2026" "teams-cli 0.9.0" "File Formats" +.TH TEAMS-CONFIG 5 "October 15, 2026" "teams-cli 0.10.0" "File Formats" .SH NAME teams-config \- configuration file for the teams CLI .SH DESCRIPTION diff --git a/docs/man/teams-examples.7 b/docs/man/teams-examples.7 index 33203a1..6488441 100644 --- a/docs/man/teams-examples.7 +++ b/docs/man/teams-examples.7 @@ -1,4 +1,4 @@ -.TH TEAMS-EXAMPLES 7 "October 4, 2026" "teams-cli 0.9.0" "Miscellaneous Information" +.TH TEAMS-EXAMPLES 7 "October 15, 2026" "teams-cli 0.10.0" "Miscellaneous Information" .SH NAME teams-examples \- practical examples for the teams CLI .SH DESCRIPTION diff --git a/docs/man/teams.1 b/docs/man/teams.1 index 7d44f5a..e06cb96 100644 --- a/docs/man/teams.1 +++ b/docs/man/teams.1 @@ -1,4 +1,4 @@ -.TH TEAMS 1 "October 4, 2026" "teams-cli 0.9.0" "User Commands" +.TH TEAMS 1 "October 15, 2026" "teams-cli 0.10.0" "User Commands" .SH NAME teams \- Microsoft Teams CLI for Microsoft Graph automation .SH SYNOPSIS