Skip to main content

max / makenotwork

sando/tui, bento/tui: bump tokio-tungstenite to 0.30 tokio-tungstenite 0.24 -> 0.30.0 in both TUIs, which share the same /events subscriber shape, so they move together. Feature selection is unchanged: default-features = false plus connect and rustls-tls-webpki-roots, all of which still exist in 0.30. No source changes were needed. The one type that moved is the text frame payload, Message::Text(String) in 0.24 and Message::Text(Utf8Bytes) in 0.30, and both call sites pass it to a &str parameter where deref coercion covers the difference. sando gains a test that walks a text frame through the same match arm the subscriber uses and asserts the bytes arrive at dispatch_ws_frame intact. bento/tui keeps two tokio-tungstenite versions in its tree, ours at 0.30 and axum 0.8.9's internal one at 0.29. That split predates this bump, at 0.24 against 0.29, and the gap is narrower now. The two never meet: axum's copy serves the daemon side, ours dials it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-22 21:37 UTC
Commit: 3f359f4b6d997906477a90ee41af34fdbe9b4913
Parent: 7b332fd
5 files changed, +107 insertions, -187 deletions
@@ -191,7 +191,7 @@ dependencies = [
191 191 "serde",
192 192 "serde_json",
193 193 "sqlx",
194 - "thiserror 2.0.18",
194 + "thiserror",
195 195 "tokio",
196 196 "tokio-stream",
197 197 "toml",
@@ -213,7 +213,7 @@ dependencies = [
213 213 "serde",
214 214 "serde_json",
215 215 "tokio",
216 - "tokio-tungstenite 0.24.0",
216 + "tokio-tungstenite 0.30.0",
217 217 ]
218 218
219 219 [[package]]
@@ -374,6 +374,12 @@ dependencies = [
374 374 ]
375 375
376 376 [[package]]
377 + name = "const-oid"
378 + version = "0.10.2"
379 + source = "registry+https://github.com/rust-lang/crates.io-index"
380 + checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
381 +
382 + [[package]]
377 383 name = "const-random"
378 384 version = "0.1.18"
379 385 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -582,6 +588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
582 588 checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
583 589 dependencies = [
584 590 "block-buffer 0.12.1",
591 + "const-oid",
585 592 "crypto-common 0.2.2",
586 593 "ctutils",
587 594 ]
@@ -1247,7 +1254,7 @@ dependencies = [
1247 1254 "jni-sys",
1248 1255 "log",
1249 1256 "simd_cesu8",
1250 - "thiserror 2.0.18",
1257 + "thiserror",
1251 1258 "walkdir",
1252 1259 "windows-link",
1253 1260 ]
@@ -1447,7 +1454,7 @@ dependencies = [
1447 1454 "metrics",
1448 1455 "metrics-util",
1449 1456 "quanta",
1450 - "thiserror 2.0.18",
1457 + "thiserror",
1451 1458 ]
1452 1459
1453 1460 [[package]]
@@ -1552,7 +1559,7 @@ dependencies = [
1552 1559 "reqwest",
1553 1560 "serde",
1554 1561 "serde_json",
1555 - "thiserror 2.0.18",
1562 + "thiserror",
1556 1563 "tokio",
1557 1564 "tracing",
1558 1565 ]
@@ -1681,7 +1688,7 @@ dependencies = [
1681 1688 "rustc-hash",
1682 1689 "rustls",
1683 1690 "socket2",
1684 - "thiserror 2.0.18",
1691 + "thiserror",
1685 1692 "tokio",
1686 1693 "tracing",
1687 1694 "web-time",
@@ -1703,7 +1710,7 @@ dependencies = [
1703 1710 "rustls",
1704 1711 "rustls-pki-types",
1705 1712 "slab",
1706 - "thiserror 2.0.18",
1713 + "thiserror",
1707 1714 "tinyvec",
1708 1715 "tracing",
1709 1716 "web-time",
@@ -1746,22 +1753,11 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1746 1753
1747 1754 [[package]]
1748 1755 name = "rand"
1749 - version = "0.8.6"
1750 - source = "registry+https://github.com/rust-lang/crates.io-index"
1751 - checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
1752 - dependencies = [
1753 - "libc",
1754 - "rand_chacha 0.3.1",
1755 - "rand_core 0.6.4",
1756 - ]
1757 -
1758 - [[package]]
1759 - name = "rand"
1760 1756 version = "0.9.4"
1761 1757 source = "registry+https://github.com/rust-lang/crates.io-index"
1762 1758 checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
1763 1759 dependencies = [
1764 - "rand_chacha 0.9.0",
1760 + "rand_chacha",
1765 1761 "rand_core 0.9.5",
1766 1762 ]
1767 1763
@@ -1778,16 +1774,6 @@ dependencies = [
1778 1774
1779 1775 [[package]]
1780 1776 name = "rand_chacha"
1781 - version = "0.3.1"
1782 - source = "registry+https://github.com/rust-lang/crates.io-index"
1783 - checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1784 - dependencies = [
1785 - "ppv-lite86",
1786 - "rand_core 0.6.4",
1787 - ]
1788 -
1789 - [[package]]
1790 - name = "rand_chacha"
1791 1777 version = "0.9.0"
1792 1778 source = "registry+https://github.com/rust-lang/crates.io-index"
1793 1779 checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
@@ -1798,15 +1784,6 @@ dependencies = [
1798 1784
1799 1785 [[package]]
1800 1786 name = "rand_core"
1801 - version = "0.6.4"
1802 - source = "registry+https://github.com/rust-lang/crates.io-index"
1803 - checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1804 - dependencies = [
1805 - "getrandom 0.2.17",
1806 - ]
1807 -
1808 - [[package]]
1809 - name = "rand_core"
1810 1787 version = "0.9.5"
1811 1788 source = "registry+https://github.com/rust-lang/crates.io-index"
1812 1789 checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
@@ -2435,7 +2412,7 @@ dependencies = [
2435 2412 "serde_json",
2436 2413 "sha2 0.10.9",
2437 2414 "smallvec",
2438 - "thiserror 2.0.18",
2415 + "thiserror",
2439 2416 "tokio",
2440 2417 "tokio-stream",
2441 2418 "tracing",
@@ -2476,7 +2453,7 @@ dependencies = [
2476 2453 "sqlx-postgres",
2477 2454 "sqlx-sqlite",
2478 2455 "syn",
2479 - "thiserror 2.0.18",
2456 + "thiserror",
2480 2457 "tokio",
2481 2458 "url",
2482 2459 ]
@@ -2504,7 +2481,7 @@ dependencies = [
2504 2481 "sha1 0.11.0",
2505 2482 "sha2 0.11.0",
2506 2483 "sqlx-core",
2507 - "thiserror 2.0.18",
2484 + "thiserror",
2508 2485 "tracing",
2509 2486 ]
2510 2487
@@ -2539,7 +2516,7 @@ dependencies = [
2539 2516 "smallvec",
2540 2517 "sqlx-core",
2541 2518 "stringprep",
2542 - "thiserror 2.0.18",
2519 + "thiserror",
2543 2520 "tracing",
2544 2521 "whoami",
2545 2522 ]
@@ -2564,7 +2541,7 @@ dependencies = [
2564 2541 "percent-encoding",
2565 2542 "serde",
2566 2543 "sqlx-core",
2567 - "thiserror 2.0.18",
2544 + "thiserror",
2568 2545 "tracing",
2569 2546 "url",
2570 2547 ]
@@ -2665,31 +2642,11 @@ checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482"
2665 2642
2666 2643 [[package]]
2667 2644 name = "thiserror"
2668 - version = "1.0.69"
2669 - source = "registry+https://github.com/rust-lang/crates.io-index"
2670 - checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2671 - dependencies = [
2672 - "thiserror-impl 1.0.69",
2673 - ]
2674 -
2675 - [[package]]
2676 - name = "thiserror"
2677 2645 version = "2.0.18"
2678 2646 source = "registry+https://github.com/rust-lang/crates.io-index"
2679 2647 checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
2680 2648 dependencies = [
2681 - "thiserror-impl 2.0.18",
2682 - ]
2683 -
2684 - [[package]]
2685 - name = "thiserror-impl"
2686 - version = "1.0.69"
2687 - source = "registry+https://github.com/rust-lang/crates.io-index"
2688 - checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2689 - dependencies = [
2690 - "proc-macro2",
2691 - "quote",
2692 - "syn",
2649 + "thiserror-impl",
2693 2650 ]
2694 2651
2695 2652 [[package]]
@@ -2796,30 +2753,30 @@ dependencies = [
2796 2753
2797 2754 [[package]]
2798 2755 name = "tokio-tungstenite"
2799 - version = "0.24.0"
2756 + version = "0.29.0"
2800 2757 source = "registry+https://github.com/rust-lang/crates.io-index"
2801 - checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
2758 + checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
2802 2759 dependencies = [
2803 2760 "futures-util",
2804 2761 "log",
2805 - "rustls",
2806 - "rustls-pki-types",
2807 2762 "tokio",
2808 - "tokio-rustls",
2809 - "tungstenite 0.24.0",
2810 - "webpki-roots 0.26.11",
2763 + "tungstenite 0.29.0",
2811 2764 ]
2812 2765
2813 2766 [[package]]
2814 2767 name = "tokio-tungstenite"
2815 - version = "0.29.0"
2768 + version = "0.30.0"
2816 2769 source = "registry+https://github.com/rust-lang/crates.io-index"
2817 - checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
2770 + checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71"
2818 2771 dependencies = [
2819 2772 "futures-util",
2820 2773 "log",
2774 + "rustls",
2775 + "rustls-pki-types",
2821 2776 "tokio",
2822 - "tungstenite 0.29.0",
2777 + "tokio-rustls",
2778 + "tungstenite 0.30.0",
2779 + "webpki-roots 0.26.11",
2823 2780 ]
2824 2781
2825 2782 [[package]]
@@ -3003,38 +2960,36 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
3003 2960
3004 2961 [[package]]
3005 2962 name = "tungstenite"
3006 - version = "0.24.0"
2963 + version = "0.29.0"
3007 2964 source = "registry+https://github.com/rust-lang/crates.io-index"
3008 - checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
2965 + checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
3009 2966 dependencies = [
3010 - "byteorder",
3011 2967 "bytes",
3012 2968 "data-encoding",
3013 2969 "http",
3014 2970 "httparse",
3015 2971 "log",
3016 - "rand 0.8.6",
3017 - "rustls",
3018 - "rustls-pki-types",
2972 + "rand 0.9.4",
3019 2973 "sha1 0.10.6",
3020 - "thiserror 1.0.69",
3021 - "utf-8",
2974 + "thiserror",
3022 2975 ]
3023 2976
3024 2977 [[package]]
3025 2978 name = "tungstenite"
3026 - version = "0.29.0"
2979 + version = "0.30.0"
3027 2980 source = "registry+https://github.com/rust-lang/crates.io-index"
3028 - checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
2981 + checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22"
3029 2982 dependencies = [
3030 2983 "bytes",
3031 2984 "data-encoding",
3032 2985 "http",
3033 2986 "httparse",
3034 2987 "log",
3035 - "rand 0.9.4",
3036 - "sha1 0.10.6",
3037 - "thiserror 2.0.18",
2988 + "rand 0.10.2",
2989 + "rustls",
2990 + "rustls-pki-types",
2991 + "sha1 0.11.0",
2992 + "thiserror",
3038 2993 ]
3039 2994
3040 2995 [[package]]
@@ -3118,12 +3073,6 @@ dependencies = [
3118 3073 ]
3119 3074
3120 3075 [[package]]
3121 - name = "utf-8"
3122 - version = "0.7.6"
3123 - source = "registry+https://github.com/rust-lang/crates.io-index"
3124 - checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3125 -
3126 - [[package]]
3127 3076 name = "utf8_iter"
3128 3077 version = "1.0.4"
3129 3078 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13,7 +13,7 @@ bento-daemon = { path = "../daemon" }
13 13 ratatui = "0.29"
14 14 crossterm = "0.28"
15 15 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "net", "signal", "sync", "time"] }
16 - tokio-tungstenite = { version = "0.24", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }
16 + tokio-tungstenite = { version = "0.30", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }
17 17 futures-util = { version = "0.3", default-features = false }
18 18 reqwest = { version = "0.13", default-features = false, features = ["json", "rustls"] }
19 19 serde = { version = "1.0.228", features = ["derive"] }
M sando/Cargo.lock +41 -92
@@ -318,6 +318,12 @@ dependencies = [
318 318 ]
319 319
320 320 [[package]]
321 + name = "const-oid"
322 + version = "0.10.2"
323 + source = "registry+https://github.com/rust-lang/crates.io-index"
324 + checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
325 +
326 + [[package]]
321 327 name = "core-foundation"
322 328 version = "0.10.1"
323 329 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -491,6 +497,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
491 497 checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
492 498 dependencies = [
493 499 "block-buffer 0.12.1",
500 + "const-oid",
494 501 "crypto-common 0.2.2",
495 502 "ctutils",
496 503 ]
@@ -1118,7 +1125,7 @@ dependencies = [
1118 1125 "jni-sys",
1119 1126 "log",
1120 1127 "simd_cesu8",
1121 - "thiserror 2.0.18",
1128 + "thiserror",
1122 1129 "walkdir",
1123 1130 "windows-link",
1124 1131 ]
@@ -1348,7 +1355,7 @@ dependencies = [
1348 1355 "async-trait",
1349 1356 "glob",
1350 1357 "serde",
1351 - "thiserror 2.0.18",
1358 + "thiserror",
1352 1359 "tokio",
1353 1360 "tracing",
1354 1361 ]
@@ -1456,7 +1463,7 @@ dependencies = [
1456 1463 "rustc-hash",
1457 1464 "rustls",
1458 1465 "socket2",
1459 - "thiserror 2.0.18",
1466 + "thiserror",
1460 1467 "tokio",
1461 1468 "tracing",
1462 1469 "web-time",
@@ -1478,7 +1485,7 @@ dependencies = [
1478 1485 "rustls",
1479 1486 "rustls-pki-types",
1480 1487 "slab",
1481 - "thiserror 2.0.18",
1488 + "thiserror",
1482 1489 "tinyvec",
1483 1490 "tracing",
1484 1491 "web-time",
@@ -1521,22 +1528,11 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1521 1528
1522 1529 [[package]]
1523 1530 name = "rand"
1524 - version = "0.8.6"
1525 - source = "registry+https://github.com/rust-lang/crates.io-index"
1526 - checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
1527 - dependencies = [
1528 - "libc",
1529 - "rand_chacha 0.3.1",
1530 - "rand_core 0.6.4",
1531 - ]
1532 -
1533 - [[package]]
1534 - name = "rand"
1535 1531 version = "0.9.4"
1536 1532 source = "registry+https://github.com/rust-lang/crates.io-index"
1537 1533 checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
1538 1534 dependencies = [
1539 - "rand_chacha 0.9.0",
1535 + "rand_chacha",
1540 1536 "rand_core 0.9.5",
1541 1537 ]
1542 1538
@@ -1553,16 +1549,6 @@ dependencies = [
1553 1549
1554 1550 [[package]]
1555 1551 name = "rand_chacha"
1556 - version = "0.3.1"
1557 - source = "registry+https://github.com/rust-lang/crates.io-index"
1558 - checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1559 - dependencies = [
1560 - "ppv-lite86",
1561 - "rand_core 0.6.4",
1562 - ]
1563 -
1564 - [[package]]
1565 - name = "rand_chacha"
1566 1552 version = "0.9.0"
1567 1553 source = "registry+https://github.com/rust-lang/crates.io-index"
1568 1554 checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
@@ -1573,15 +1559,6 @@ dependencies = [
1573 1559
1574 1560 [[package]]
1575 1561 name = "rand_core"
1576 - version = "0.6.4"
1577 - source = "registry+https://github.com/rust-lang/crates.io-index"
1578 - checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1579 - dependencies = [
1580 - "getrandom 0.2.17",
1581 - ]
1582 -
1583 - [[package]]
1584 - name = "rand_core"
1585 1562 version = "0.9.5"
1586 1563 source = "registry+https://github.com/rust-lang/crates.io-index"
1587 1564 checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
@@ -1848,7 +1825,7 @@ dependencies = [
1848 1825 "serde_json",
1849 1826 "sqlx",
1850 1827 "tempfile",
1851 - "thiserror 2.0.18",
1828 + "thiserror",
1852 1829 "tokio",
1853 1830 "toml",
1854 1831 "tower",
@@ -1870,7 +1847,7 @@ dependencies = [
1870 1847 "serde",
1871 1848 "serde_json",
1872 1849 "tokio",
1873 - "tokio-tungstenite 0.24.0",
1850 + "tokio-tungstenite 0.30.0",
1874 1851 ]
1875 1852
1876 1853 [[package]]
@@ -2177,7 +2154,7 @@ dependencies = [
2177 2154 "serde_json",
2178 2155 "sha2 0.10.9",
2179 2156 "smallvec",
2180 - "thiserror 2.0.18",
2157 + "thiserror",
2181 2158 "tokio",
2182 2159 "tokio-stream",
2183 2160 "tracing",
@@ -2218,7 +2195,7 @@ dependencies = [
2218 2195 "sqlx-postgres",
2219 2196 "sqlx-sqlite",
2220 2197 "syn",
2221 - "thiserror 2.0.18",
2198 + "thiserror",
2222 2199 "tokio",
2223 2200 "url",
2224 2201 ]
@@ -2246,7 +2223,7 @@ dependencies = [
2246 2223 "sha1 0.11.0",
2247 2224 "sha2 0.11.0",
2248 2225 "sqlx-core",
2249 - "thiserror 2.0.18",
2226 + "thiserror",
2250 2227 "tracing",
2251 2228 ]
2252 2229
@@ -2281,7 +2258,7 @@ dependencies = [
2281 2258 "smallvec",
2282 2259 "sqlx-core",
2283 2260 "stringprep",
2284 - "thiserror 2.0.18",
2261 + "thiserror",
2285 2262 "tracing",
2286 2263 "whoami",
2287 2264 ]
@@ -2306,7 +2283,7 @@ dependencies = [
2306 2283 "percent-encoding",
2307 2284 "serde",
2308 2285 "sqlx-core",
2309 - "thiserror 2.0.18",
2286 + "thiserror",
2310 2287 "tracing",
2311 2288 "url",
2312 2289 ]
@@ -2414,31 +2391,11 @@ dependencies = [
2414 2391
2415 2392 [[package]]
2416 2393 name = "thiserror"
2417 - version = "1.0.69"
2418 - source = "registry+https://github.com/rust-lang/crates.io-index"
2419 - checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2420 - dependencies = [
2421 - "thiserror-impl 1.0.69",
2422 - ]
2423 -
2424 - [[package]]
2425 - name = "thiserror"
2426 2394 version = "2.0.18"
2427 2395 source = "registry+https://github.com/rust-lang/crates.io-index"
2428 2396 checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
2429 2397 dependencies = [
2430 - "thiserror-impl 2.0.18",
2431 - ]
2432 -
2433 - [[package]]
2434 - name = "thiserror-impl"
2435 - version = "1.0.69"
2436 - source = "registry+https://github.com/rust-lang/crates.io-index"
2437 - checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2438 - dependencies = [
2439 - "proc-macro2",
2440 - "quote",
2441 - "syn",
2398 + "thiserror-impl",
2442 2399 ]
2443 2400
2444 2401 [[package]]
@@ -2536,30 +2493,30 @@ dependencies = [
2536 2493
2537 2494 [[package]]
2538 2495 name = "tokio-tungstenite"
2539 - version = "0.24.0"
2496 + version = "0.29.0"
2540 2497 source = "registry+https://github.com/rust-lang/crates.io-index"
2541 - checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
2498 + checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
2542 2499 dependencies = [
2543 2500 "futures-util",
2544 2501 "log",
2545 - "rustls",
2546 - "rustls-pki-types",
2547 2502 "tokio",
2548 - "tokio-rustls",
2549 - "tungstenite 0.24.0",
2550 - "webpki-roots 0.26.11",
2503 + "tungstenite 0.29.0",
2551 2504 ]
2552 2505
2553 2506 [[package]]
2554 2507 name = "tokio-tungstenite"
2555 - version = "0.29.0"
2508 + version = "0.30.0"
2556 2509 source = "registry+https://github.com/rust-lang/crates.io-index"
2557 - checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
2510 + checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71"
2558 2511 dependencies = [
2559 2512 "futures-util",
2560 2513 "log",
2514 + "rustls",
2515 + "rustls-pki-types",
2561 2516 "tokio",
2562 - "tungstenite 0.29.0",
2517 + "tokio-rustls",
2518 + "tungstenite 0.30.0",
2519 + "webpki-roots 0.26.11",
2563 2520 ]
2564 2521
2565 2522 [[package]]
@@ -2730,38 +2687,36 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
2730 2687
2731 2688 [[package]]
2732 2689 name = "tungstenite"
2733 - version = "0.24.0"
2690 + version = "0.29.0"
2734 2691 source = "registry+https://github.com/rust-lang/crates.io-index"
2735 - checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
2692 + checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
2736 2693 dependencies = [
2737 - "byteorder",
2738 2694 "bytes",
2739 2695 "data-encoding",
2740 2696 "http",
2741 2697 "httparse",
2742 2698 "log",
2743 - "rand 0.8.6",
2744 - "rustls",
2745 - "rustls-pki-types",
2699 + "rand 0.9.4",
2746 2700 "sha1 0.10.6",
2747 - "thiserror 1.0.69",
2748 - "utf-8",
2701 + "thiserror",
2749 2702 ]
2750 2703
2751 2704 [[package]]
2752 2705 name = "tungstenite"
2753 - version = "0.29.0"
2706 + version = "0.30.0"
2754 2707 source = "registry+https://github.com/rust-lang/crates.io-index"
2755 - checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
2708 + checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22"
2756 2709 dependencies = [
2757 2710 "bytes",
2758 2711 "data-encoding",
2759 2712 "http",
2760 2713 "httparse",
2761 2714 "log",
2762 - "rand 0.9.4",
2763 - "sha1 0.10.6",
2764 - "thiserror 2.0.18",
2715 + "rand 0.10.2",
2716 + "rustls",
2717 + "rustls-pki-types",
2718 + "sha1 0.11.0",
2719 + "thiserror",
2765 2720 ]
2766 2721
2767 2722 [[package]]
@@ -2845,12 +2800,6 @@ dependencies = [
2845 2800 ]
2846 2801
2847 2802 [[package]]
2848 - name = "utf-8"
2849 - version = "0.7.6"
2850 - source = "registry+https://github.com/rust-lang/crates.io-index"
2851 - checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
2852 -
2853 - [[package]]
2854 2803 name = "utf8_iter"
2855 2804 version = "1.0.4"
2856 2805 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13,7 +13,7 @@ sando-daemon = { path = "../daemon" }
13 13 ratatui = "0.29"
14 14 crossterm = "0.28"
15 15 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "net", "signal", "sync", "time"] }
16 - tokio-tungstenite = { version = "0.24", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }
16 + tokio-tungstenite = { version = "0.30", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }
17 17 futures-util = { version = "0.3", default-features = false }
18 18 reqwest = { version = "0.13", default-features = false, features = ["json", "rustls"] }
19 19 serde = { version = "1.0.228", features = ["derive"] }
@@ -144,6 +144,28 @@ fn main() -> Result<()> {
144 144 mod tests {
145 145 use super::*;
146 146
147 + /// tungstenite 0.30 carries text frames as `Utf8Bytes` rather than the
148 + /// `String` of 0.24. The subscriber loop hands that payload straight to
149 + /// `dispatch_ws_frame`, which takes `&str`, so this pins that the frame
150 + /// still reaches the dispatcher intact.
151 + #[test]
152 + fn text_frame_payload_reaches_the_dispatcher() {
153 + let shared = Arc::new(Mutex::new(model::Shared::default()));
154 + let raw = r#"{"event":{"type":"not_a_real_event"}}"#;
155 + let msg = tokio_tungstenite::tungstenite::Message::Text(raw.into());
156 +
157 + // Mirror the match arm in net::events_subscriber.
158 + match msg {
159 + tokio_tungstenite::tungstenite::Message::Text(t) => net::dispatch_ws_frame(&shared, &t),
160 + other => panic!("expected a text frame, got {other:?}"),
161 + }
162 +
163 + // An envelope this TUI cannot parse is surfaced verbatim, so the
164 + // exact bytes we sent should come back out of the events ring.
165 + let guard = shared.lock().unwrap();
166 + assert_eq!(guard.events.back().map(String::as_str), Some(raw));
167 + }
168 +
147 169 #[test]
148 170 fn ws_url_from_http() {
149 171 assert_eq!(