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
Signed with PGP, not checked
Commit: 3f359f4b6d997906477a90ee41af34fdbe9b4913
Parent: 7b332fd
5 files changed, +135 insertions, -215 deletions
M sando/Cargo.lock +55 -106
@@ -317,6 +317,12 @@
317 317 "crossbeam-utils",
318 318 ]
319 319
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 +
320 326 [[package]]
321 327 name = "core-foundation"
322 328 version = "0.10.1"
@@ -491,6 +497,7 @@
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 @@
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 @@
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 @@
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 @@
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",
@@ -1519,24 +1526,13 @@
1519 1526 source = "registry+https://github.com/rust-lang/crates.io-index"
1520 1527 checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1521 1528
1522 - [[package]]
1523 - 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 1529 [[package]]
1534 1530 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
@@ -1551,16 +1547,6 @@
1551 1547 "rand_core 0.10.1",
1552 1548 ]
1553 1549
1554 - [[package]]
1555 - 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 1550 [[package]]
1565 1551 name = "rand_chacha"
1566 1552 version = "0.9.0"
@@ -1571,15 +1557,6 @@
1571 1557 "rand_core 0.9.5",
1572 1558 ]
1573 1559
1574 - [[package]]
1575 - 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 1560 [[package]]
1584 1561 name = "rand_core"
1585 1562 version = "0.9.5"
@@ -1848,7 +1825,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 ]
@@ -2412,33 +2389,13 @@
2412 2389 "windows-sys 0.61.2",
2413 2390 ]
2414 2391
2415 - [[package]]
2416 - 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 2392 [[package]]
2425 2393 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]]
@@ -2534,22 +2491,6 @@
2534 2491 "tokio",
2535 2492 ]
2536 2493
2537 - [[package]]
2538 - name = "tokio-tungstenite"
2539 - version = "0.24.0"
2540 - source = "registry+https://github.com/rust-lang/crates.io-index"
2541 - checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
2542 - dependencies = [
2543 - "futures-util",
2544 - "log",
2545 - "rustls",
2546 - "rustls-pki-types",
2547 - "tokio",
2548 - "tokio-rustls",
2549 - "tungstenite 0.24.0",
2550 - "webpki-roots 0.26.11",
2551 - ]
2552 -
2553 2494 [[package]]
2554 2495 name = "tokio-tungstenite"
2555 2496 version = "0.29.0"
@@ -2562,6 +2503,22 @@
2562 2503 "tungstenite 0.29.0",
2563 2504 ]
2564 2505
2506 + [[package]]
2507 + name = "tokio-tungstenite"
2508 + version = "0.30.0"
2509 + source = "registry+https://github.com/rust-lang/crates.io-index"
2510 + checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71"
2511 + dependencies = [
2512 + "futures-util",
2513 + "log",
2514 + "rustls",
2515 + "rustls-pki-types",
2516 + "tokio",
2517 + "tokio-rustls",
2518 + "tungstenite 0.30.0",
2519 + "webpki-roots 0.26.11",
2520 + ]
2521 +
2565 2522 [[package]]
2566 2523 name = "toml"
2567 2524 version = "1.1.3+spec-1.1.0"
@@ -2728,26 +2685,6 @@
2728 2685 source = "registry+https://github.com/rust-lang/crates.io-index"
2729 2686 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
2730 2687
2731 - [[package]]
2732 - name = "tungstenite"
2733 - version = "0.24.0"
2734 - source = "registry+https://github.com/rust-lang/crates.io-index"
2735 - checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
2736 - dependencies = [
2737 - "byteorder",
2738 - "bytes",
2739 - "data-encoding",
2740 - "http",
2741 - "httparse",
2742 - "log",
2743 - "rand 0.8.6",
2744 - "rustls",
2745 - "rustls-pki-types",
2746 - "sha1 0.10.6",
2747 - "thiserror 1.0.69",
2748 - "utf-8",
2749 - ]
2750 -
2751 2688 [[package]]
2752 2689 name = "tungstenite"
2753 2690 version = "0.29.0"
@@ -2761,7 +2698,25 @@
2761 2698 "log",
2762 2699 "rand 0.9.4",
2763 2700 "sha1 0.10.6",
2764 - "thiserror 2.0.18",
2701 + "thiserror",
2702 + ]
2703 +
2704 + [[package]]
2705 + name = "tungstenite"
2706 + version = "0.30.0"
2707 + source = "registry+https://github.com/rust-lang/crates.io-index"
2708 + checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22"
2709 + dependencies = [
2710 + "bytes",
2711 + "data-encoding",
2712 + "http",
2713 + "httparse",
2714 + "log",
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]]
@@ -2844,12 +2799,6 @@
2844 2799 "serde",
2845 2800 ]
2846 2801
2847 - [[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 2802 [[package]]
2854 2803 name = "utf8_iter"
2855 2804 version = "1.0.4"
@@ -191,7 +191,7 @@
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 @@
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]]
@@ -373,6 +373,12 @@
373 373 "crossbeam-utils",
374 374 ]
375 375
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 +
376 382 [[package]]
377 383 name = "const-random"
378 384 version = "0.1.18"
@@ -582,6 +588,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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",
@@ -1744,24 +1751,13 @@
1744 1751 source = "registry+https://github.com/rust-lang/crates.io-index"
1745 1752 checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1746 1753
1747 - [[package]]
1748 - 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 1754 [[package]]
1759 1755 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
@@ -1776,16 +1772,6 @@
1776 1772 "rand_core 0.10.1",
1777 1773 ]
1778 1774
1779 - [[package]]
1780 - 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 1775 [[package]]
1790 1776 name = "rand_chacha"
1791 1777 version = "0.9.0"
@@ -1796,15 +1782,6 @@
1796 1782 "rand_core 0.9.5",
1797 1783 ]
1798 1784
1799 - [[package]]
1800 - 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 1785 [[package]]
1809 1786 name = "rand_core"
1810 1787 version = "0.9.5"
@@ -2435,7 +2412,7 @@
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 @@
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 @@
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 @@
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 @@
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 ]
@@ -2663,33 +2640,13 @@
2663 2640 source = "registry+https://github.com/rust-lang/crates.io-index"
2664 2641 checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482"
2665 2642
2666 - [[package]]
2667 - 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 2643 [[package]]
2676 2644 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]]
@@ -2794,22 +2751,6 @@
2794 2751 "tokio",
2795 2752 ]
2796 2753
2797 - [[package]]
2798 - name = "tokio-tungstenite"
2799 - version = "0.24.0"
2800 - source = "registry+https://github.com/rust-lang/crates.io-index"
2801 - checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
2802 - dependencies = [
2803 - "futures-util",
2804 - "log",
2805 - "rustls",
2806 - "rustls-pki-types",
2807 - "tokio",
2808 - "tokio-rustls",
2809 - "tungstenite 0.24.0",
2810 - "webpki-roots 0.26.11",
2811 - ]
2812 -
2813 2754 [[package]]
2814 2755 name = "tokio-tungstenite"
2815 2756 version = "0.29.0"
@@ -2822,6 +2763,22 @@
2822 2763 "tungstenite 0.29.0",
2823 2764 ]
2824 2765
2766 + [[package]]
2767 + name = "tokio-tungstenite"
2768 + version = "0.30.0"
2769 + source = "registry+https://github.com/rust-lang/crates.io-index"
2770 + checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71"
2771 + dependencies = [
2772 + "futures-util",
2773 + "log",
2774 + "rustls",
2775 + "rustls-pki-types",
2776 + "tokio",
2777 + "tokio-rustls",
2778 + "tungstenite 0.30.0",
2779 + "webpki-roots 0.26.11",
2780 + ]
2781 +
2825 2782 [[package]]
2826 2783 name = "tokio-util"
2827 2784 version = "0.7.18"
@@ -3001,26 +2958,6 @@
3001 2958 source = "registry+https://github.com/rust-lang/crates.io-index"
3002 2959 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
3003 2960
3004 - [[package]]
3005 - name = "tungstenite"
3006 - version = "0.24.0"
3007 - source = "registry+https://github.com/rust-lang/crates.io-index"
3008 - checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
3009 - dependencies = [
3010 - "byteorder",
3011 - "bytes",
3012 - "data-encoding",
3013 - "http",
3014 - "httparse",
3015 - "log",
3016 - "rand 0.8.6",
3017 - "rustls",
3018 - "rustls-pki-types",
3019 - "sha1 0.10.6",
3020 - "thiserror 1.0.69",
3021 - "utf-8",
3022 - ]
3023 -
3024 2961 [[package]]
3025 2962 name = "tungstenite"
3026 2963 version = "0.29.0"
@@ -3034,7 +2971,25 @@
3034 2971 "log",
3035 2972 "rand 0.9.4",
3036 2973 "sha1 0.10.6",
3037 - "thiserror 2.0.18",
2974 + "thiserror",
2975 + ]
2976 +
2977 + [[package]]
2978 + name = "tungstenite"
2979 + version = "0.30.0"
2980 + source = "registry+https://github.com/rust-lang/crates.io-index"
2981 + checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22"
2982 + dependencies = [
2983 + "bytes",
2984 + "data-encoding",
2985 + "http",
2986 + "httparse",
2987 + "log",
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]]
@@ -3117,12 +3072,6 @@
3117 3072 "serde",
3118 3073 ]
3119 3074
3120 - [[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 3075 [[package]]
3127 3076 name = "utf8_iter"
3128 3077 version = "1.0.4"
@@ -13,7 +13,7 @@
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"] }
@@ -13,7 +13,7 @@
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 @@
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!(