@ondeinference / cli / commits / e1975f8

Add GGUF chat worker and integrate mistralrs for local chat

keypair34 committed Apr 26, 2026 at 00:08 UTC e1975f8ecf5c1e4dd95c95306e792e88b7670ef6
6 files changed +4401 -317
Cargo.lock
+3449 -211
@@ -2,12 +2,28 @@
2 # It is not intended for manual editing.
3 version = 4
4
5 +[[package]]
6 +name = "Inflector"
7 +version = "0.11.4"
8 +source = "registry+https://github.com/rust-lang/crates.io-index"
9 +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
10 +dependencies = [
11 + "lazy_static",
12 + "regex",
13 +]
14 +
15 [[package]]
16 name = "accelerate-src"
17 version = "0.3.2"
18 source = "registry+https://github.com/rust-lang/crates.io-index"
19 checksum = "415ed64958754dbe991900f3940677e6a7eefb4d7367afd70d642677b0c7d19d"
20
21 +[[package]]
22 +name = "adler2"
23 +version = "2.0.1"
24 +source = "registry+https://github.com/rust-lang/crates.io-index"
25 +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
26 +
27 [[package]]
28 name = "ahash"
29 version = "0.8.12"
@@ -31,6 +47,30 @@ dependencies = [
47 "memchr",
48 ]
49
50 +[[package]]
51 +name = "akin"
52 +version = "0.4.0"
53 +source = "registry+https://github.com/rust-lang/crates.io-index"
54 +checksum = "1763692fc1416554cf051efc56a3de5595eca47299d731cc5c2b583adf8b4d2f"
55 +
56 +[[package]]
57 +name = "aligned"
58 +version = "0.4.3"
59 +source = "registry+https://github.com/rust-lang/crates.io-index"
60 +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685"
61 +dependencies = [
62 + "as-slice",
63 +]
64 +
65 +[[package]]
66 +name = "aligned-vec"
67 +version = "0.6.4"
68 +source = "registry+https://github.com/rust-lang/crates.io-index"
69 +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b"
70 +dependencies = [
71 + "equator",
72 +]
73 +
74 [[package]]
75 name = "allocator-api2"
76 version = "0.2.21"
@@ -46,6 +86,16 @@ dependencies = [
86 "libc",
87 ]
88
89 +[[package]]
90 +name = "annotate-snippets"
91 +version = "0.12.5"
92 +source = "registry+https://github.com/rust-lang/crates.io-index"
93 +checksum = "96401ca08501972288ecbcde33902fce858bf73fbcbdf91dab8c3a9544e106bb"
94 +dependencies = [
95 + "anstyle",
96 + "unicode-width 0.2.0",
97 +]
98 +
99 [[package]]
100 name = "ansi_term"
101 version = "0.12.1"
@@ -111,6 +161,76 @@ version = "1.0.102"
161 source = "registry+https://github.com/rust-lang/crates.io-index"
162 checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
163
164 +[[package]]
165 +name = "apodize"
166 +version = "1.0.0"
167 +source = "registry+https://github.com/rust-lang/crates.io-index"
168 +checksum = "fca387cdc0a1f9c7a7c26556d584aa2d07fc529843082e4861003cde4ab914ed"
169 +
170 +[[package]]
171 +name = "approx"
172 +version = "0.5.1"
173 +source = "registry+https://github.com/rust-lang/crates.io-index"
174 +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
175 +dependencies = [
176 + "num-traits",
177 +]
178 +
179 +[[package]]
180 +name = "arbitrary"
181 +version = "1.4.2"
182 +source = "registry+https://github.com/rust-lang/crates.io-index"
183 +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
184 +
185 +[[package]]
186 +name = "arg_enum_proc_macro"
187 +version = "0.3.4"
188 +source = "registry+https://github.com/rust-lang/crates.io-index"
189 +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
190 +dependencies = [
191 + "proc-macro2",
192 + "quote",
193 + "syn 2.0.117",
194 +]
195 +
196 +[[package]]
197 +name = "arraydeque"
198 +version = "0.5.1"
199 +source = "registry+https://github.com/rust-lang/crates.io-index"
200 +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
201 +
202 +[[package]]
203 +name = "arrayvec"
204 +version = "0.7.6"
205 +source = "registry+https://github.com/rust-lang/crates.io-index"
206 +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
207 +
208 +[[package]]
209 +name = "as-any"
210 +version = "0.3.2"
211 +source = "registry+https://github.com/rust-lang/crates.io-index"
212 +checksum = "b0f477b951e452a0b6b4a10b53ccd569042d1d01729b519e02074a9c0958a063"
213 +
214 +[[package]]
215 +name = "as-slice"
216 +version = "0.2.1"
217 +source = "registry+https://github.com/rust-lang/crates.io-index"
218 +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
219 +dependencies = [
220 + "stable_deref_trait",
221 +]
222 +
223 +[[package]]
224 +name = "async-trait"
225 +version = "0.1.89"
226 +source = "registry+https://github.com/rust-lang/crates.io-index"
227 +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
228 +dependencies = [
229 + "proc-macro2",
230 + "quote",
231 + "syn 2.0.117",
232 +]
233 +
234 [[package]]
235 name = "atomic-waker"
236 version = "1.1.2"
@@ -134,6 +254,71 @@ version = "1.5.0"
254 source = "registry+https://github.com/rust-lang/crates.io-index"
255 checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
256
257 +[[package]]
258 +name = "av-scenechange"
259 +version = "0.14.1"
260 +source = "registry+https://github.com/rust-lang/crates.io-index"
261 +checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394"
262 +dependencies = [
263 + "aligned",
264 + "anyhow",
265 + "arg_enum_proc_macro",
266 + "arrayvec",
267 + "log",
268 + "num-rational",
269 + "num-traits",
270 + "pastey",
271 + "rayon",
272 + "thiserror 2.0.18",
273 + "v_frame",
274 + "y4m",
275 +]
276 +
277 +[[package]]
278 +name = "av1-grain"
279 +version = "0.2.5"
280 +source = "registry+https://github.com/rust-lang/crates.io-index"
281 +checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
282 +dependencies = [
283 + "anyhow",
284 + "arrayvec",
285 + "log",
286 + "nom 8.0.0",
287 + "num-rational",
288 + "v_frame",
289 +]
290 +
291 +[[package]]
292 +name = "avif-serialize"
293 +version = "0.8.8"
294 +source = "registry+https://github.com/rust-lang/crates.io-index"
295 +checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d"
296 +dependencies = [
297 + "arrayvec",
298 +]
299 +
300 +[[package]]
301 +name = "aws-lc-rs"
302 +version = "1.16.3"
303 +source = "registry+https://github.com/rust-lang/crates.io-index"
304 +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f"
305 +dependencies = [
306 + "aws-lc-sys",
307 + "zeroize",
308 +]
309 +
310 +[[package]]
311 +name = "aws-lc-sys"
312 +version = "0.40.0"
313 +source = "registry+https://github.com/rust-lang/crates.io-index"
314 +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7"
315 +dependencies = [
316 + "cc",
317 + "cmake",
318 + "dunce",
319 + "fs_extra",
320 +]
321 +
322 [[package]]
323 name = "base64"
324 version = "0.13.1"
@@ -146,6 +331,42 @@ version = "0.22.1"
331 source = "registry+https://github.com/rust-lang/crates.io-index"
332 checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
333
334 +[[package]]
335 +name = "bit-set"
336 +version = "0.5.3"
337 +source = "registry+https://github.com/rust-lang/crates.io-index"
338 +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
339 +dependencies = [
340 + "bit-vec 0.6.3",
341 +]
342 +
343 +[[package]]
344 +name = "bit-set"
345 +version = "0.8.0"
346 +source = "registry+https://github.com/rust-lang/crates.io-index"
347 +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
348 +dependencies = [
349 + "bit-vec 0.8.0",
350 +]
351 +
352 +[[package]]
353 +name = "bit-vec"
354 +version = "0.6.3"
355 +source = "registry+https://github.com/rust-lang/crates.io-index"
356 +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
357 +
358 +[[package]]
359 +name = "bit-vec"
360 +version = "0.8.0"
361 +source = "registry+https://github.com/rust-lang/crates.io-index"
362 +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
363 +
364 +[[package]]
365 +name = "bit_field"
366 +version = "0.10.3"
367 +source = "registry+https://github.com/rust-lang/crates.io-index"
368 +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
369 +
370 [[package]]
371 name = "bitflags"
372 version = "1.3.2"
@@ -158,6 +379,15 @@ version = "2.11.1"
379 source = "registry+https://github.com/rust-lang/crates.io-index"
380 checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
381
382 +[[package]]
383 +name = "bitstream-io"
384 +version = "4.10.0"
385 +source = "registry+https://github.com/rust-lang/crates.io-index"
386 +checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f"
387 +dependencies = [
388 + "no_std_io2",
389 +]
390 +
391 [[package]]
392 name = "block"
393 version = "0.1.6"
@@ -182,6 +412,37 @@ dependencies = [
412 "objc2",
413 ]
414
415 +[[package]]
416 +name = "bm25"
417 +version = "2.3.2"
418 +source = "registry+https://github.com/rust-lang/crates.io-index"
419 +checksum = "1cbd8ffdfb7b4c2ff038726178a780a94f90525ed0ad264c0afaa75dd8c18a64"
420 +dependencies = [
421 + "cached",
422 + "deunicode",
423 + "fxhash",
424 + "rust-stemmers",
425 + "stop-words",
426 + "unicode-segmentation",
427 +]
428 +
429 +[[package]]
430 +name = "bstr"
431 +version = "1.12.1"
432 +source = "registry+https://github.com/rust-lang/crates.io-index"
433 +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
434 +dependencies = [
435 + "memchr",
436 + "regex-automata",
437 + "serde",
438 +]
439 +
440 +[[package]]
441 +name = "built"
442 +version = "0.8.0"
443 +source = "registry+https://github.com/rust-lang/crates.io-index"
444 +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
445 +
446 [[package]]
447 name = "bumpalo"
448 version = "3.20.2"
@@ -214,12 +475,51 @@ version = "1.5.0"
475 source = "registry+https://github.com/rust-lang/crates.io-index"
476 checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
477
478 +[[package]]
479 +name = "byteorder-lite"
480 +version = "0.1.0"
481 +source = "registry+https://github.com/rust-lang/crates.io-index"
482 +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
483 +
484 [[package]]
485 name = "bytes"
486 version = "1.11.1"
487 source = "registry+https://github.com/rust-lang/crates.io-index"
488 checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
489
490 +[[package]]
491 +name = "cached"
492 +version = "0.56.0"
493 +source = "registry+https://github.com/rust-lang/crates.io-index"
494 +checksum = "801927ee168e17809ab8901d9f01f700cd7d8d6a6527997fee44e4b0327a253c"
495 +dependencies = [
496 + "ahash",
497 + "cached_proc_macro",
498 + "cached_proc_macro_types",
499 + "hashbrown 0.15.5",
500 + "once_cell",
501 + "thiserror 2.0.18",
502 + "web-time",
503 +]
504 +
505 +[[package]]
506 +name = "cached_proc_macro"
507 +version = "0.25.0"
508 +source = "registry+https://github.com/rust-lang/crates.io-index"
509 +checksum = "9225bdcf4e4a9a4c08bf16607908eb2fbf746828d5e0b5e019726dbf6571f201"
510 +dependencies = [
511 + "darling 0.20.11",
512 + "proc-macro2",
513 + "quote",
514 + "syn 2.0.117",
515 +]
516 +
517 +[[package]]
518 +name = "cached_proc_macro_types"
519 +version = "0.1.1"
520 +source = "registry+https://github.com/rust-lang/crates.io-index"
521 +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0"
522 +
523 [[package]]
524 name = "candle-core"
525 version = "0.10.2"
@@ -241,7 +541,7 @@ dependencies = [
541 "objc2-foundation",
542 "objc2-metal",
543 "rand 0.9.4",
244 - "rand_distr",
544 + "rand_distr 0.5.1",
545 "rayon",
546 "safetensors 0.7.0",
547 "thiserror 2.0.18",
@@ -272,9 +572,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
572 checksum = "a9317a09d6530b758990ed7f625ac69ff43653bc9ee28b0464644ad1169ada87"
573 dependencies = [
574 "candle-core",
575 + "candle-metal-kernels",
576 "half",
577 "libc",
578 "num-traits",
579 + "objc2-metal",
580 "rayon",
581 "safetensors 0.7.0",
582 "serde",
@@ -308,14 +610,22 @@ dependencies = [
610
611 [[package]]
612 name = "cc"
311 -version = "1.2.60"
613 +version = "1.2.61"
614 source = "registry+https://github.com/rust-lang/crates.io-index"
313 -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
615 +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d"
616 dependencies = [
617 "find-msvc-tools",
618 + "jobserver",
619 + "libc",
620 "shlex",
621 ]
622
623 +[[package]]
624 +name = "cesu8"
625 +version = "1.1.0"
626 +source = "registry+https://github.com/rust-lang/crates.io-index"
627 +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
628 +
629 [[package]]
630 name = "cfg-if"
631 version = "1.0.4"
@@ -328,6 +638,20 @@ version = "0.2.1"
638 source = "registry+https://github.com/rust-lang/crates.io-index"
639 checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
640
641 +[[package]]
642 +name = "cfgrammar"
643 +version = "0.14.1"
644 +source = "registry+https://github.com/rust-lang/crates.io-index"
645 +checksum = "3efdd8f0bddcc9e33f4a664d0f28bc4e51cd5367c16284087a95313104371865"
646 +dependencies = [
647 + "indexmap 2.14.0",
648 + "num-traits",
649 + "proc-macro2",
650 + "quote",
651 + "regex",
652 + "vob",
653 +]
654 +
655 [[package]]
656 name = "chrono"
657 version = "0.4.44"
@@ -339,7 +663,7 @@ dependencies = [
663 "num-traits",
664 "serde",
665 "wasm-bindgen",
342 - "windows-link",
666 + "windows-link 0.2.1",
667 ]
668
669 [[package]]
@@ -377,6 +701,7 @@ dependencies = [
701 "anstyle",
702 "clap_lex",
703 "strsim 0.11.1",
704 + "terminal_size",
705 ]
706
707 [[package]]
@@ -397,12 +722,37 @@ version = "1.1.0"
722 source = "registry+https://github.com/rust-lang/crates.io-index"
723 checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
724
725 +[[package]]
726 +name = "cmake"
727 +version = "0.1.58"
728 +source = "registry+https://github.com/rust-lang/crates.io-index"
729 +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
730 +dependencies = [
731 + "cc",
732 +]
733 +
734 +[[package]]
735 +name = "color_quant"
736 +version = "1.1.0"
737 +source = "registry+https://github.com/rust-lang/crates.io-index"
738 +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
739 +
740 [[package]]
741 name = "colorchoice"
742 version = "1.0.5"
743 source = "registry+https://github.com/rust-lang/crates.io-index"
744 checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
745
746 +[[package]]
747 +name = "combine"
748 +version = "4.6.7"
749 +source = "registry+https://github.com/rust-lang/crates.io-index"
750 +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
751 +dependencies = [
752 + "bytes",
753 + "memchr",
754 +]
755 +
756 [[package]]
757 name = "compact_str"
758 version = "0.8.1"
@@ -432,6 +782,31 @@ dependencies = [
782 "static_assertions",
783 ]
784
785 +[[package]]
786 +name = "console"
787 +version = "0.15.11"
788 +source = "registry+https://github.com/rust-lang/crates.io-index"
789 +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
790 +dependencies = [
791 + "encode_unicode",
792 + "libc",
793 + "once_cell",
794 + "unicode-width 0.2.0",
795 + "windows-sys 0.59.0",
796 +]
797 +
798 +[[package]]
799 +name = "console"
800 +version = "0.16.3"
801 +source = "registry+https://github.com/rust-lang/crates.io-index"
802 +checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87"
803 +dependencies = [
804 + "encode_unicode",
805 + "libc",
806 + "unicode-width 0.2.0",
807 + "windows-sys 0.61.2",
808 +]
809 +
810 [[package]]
811 name = "convert_case"
812 version = "0.6.0"
@@ -441,6 +816,15 @@ dependencies = [
816 "unicode-segmentation",
817 ]
818
819 +[[package]]
820 +name = "convert_case"
821 +version = "0.10.0"
822 +source = "registry+https://github.com/rust-lang/crates.io-index"
823 +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
824 +dependencies = [
825 + "unicode-segmentation",
826 +]
827 +
828 [[package]]
829 name = "core-foundation"
830 version = "0.9.4"
@@ -532,17 +916,35 @@ dependencies = [
916 "futures-core",
917 "mio",
918 "parking_lot",
535 - "rustix",
919 + "rustix 0.38.44",
920 "signal-hook",
921 "signal-hook-mio",
922 "winapi",
923 ]
924
925 [[package]]
542 -name = "crossterm_winapi"
543 -version = "0.9.1"
926 +name = "crossterm"
927 +version = "0.29.0"
928 source = "registry+https://github.com/rust-lang/crates.io-index"
545 -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
929 +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
930 +dependencies = [
931 + "bitflags 2.11.1",
932 + "crossterm_winapi",
933 + "derive_more",
934 + "document-features",
935 + "mio",
936 + "parking_lot",
937 + "rustix 1.1.4",
938 + "signal-hook",
939 + "signal-hook-mio",
940 + "winapi",
941 +]
942 +
943 +[[package]]
944 +name = "crossterm_winapi"
945 +version = "0.9.1"
946 +source = "registry+https://github.com/rust-lang/crates.io-index"
947 +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
948 dependencies = [
949 "winapi",
950 ]
@@ -563,6 +965,60 @@ dependencies = [
965 "typenum",
966 ]
967
968 +[[package]]
969 +name = "cssparser"
970 +version = "0.36.0"
971 +source = "registry+https://github.com/rust-lang/crates.io-index"
972 +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2"
973 +dependencies = [
974 + "cssparser-macros",
975 + "dtoa-short",
976 + "itoa",
977 + "phf",
978 + "smallvec 1.15.1",
979 +]
980 +
981 +[[package]]
982 +name = "cssparser-macros"
983 +version = "0.6.1"
984 +source = "registry+https://github.com/rust-lang/crates.io-index"
985 +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
986 +dependencies = [
987 + "quote",
988 + "syn 2.0.117",
989 +]
990 +
991 +[[package]]
992 +name = "csv"
993 +version = "1.4.0"
994 +source = "registry+https://github.com/rust-lang/crates.io-index"
995 +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
996 +dependencies = [
997 + "csv-core",
998 + "itoa",
999 + "ryu",
1000 + "serde_core",
1001 +]
1002 +
1003 +[[package]]
1004 +name = "csv-core"
1005 +version = "0.1.13"
1006 +source = "registry+https://github.com/rust-lang/crates.io-index"
1007 +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
1008 +dependencies = [
1009 + "memchr",
1010 +]
1011 +
1012 +[[package]]
1013 +name = "darling"
1014 +version = "0.11.0"
1015 +source = "registry+https://github.com/rust-lang/crates.io-index"
1016 +checksum = "dbffa8f8e38810422f320ca457a93cf1cd0056dc9c06c556b867558e0d471463"
1017 +dependencies = [
1018 + "darling_core 0.11.0",
1019 + "darling_macro 0.11.0",
1020 +]
1021 +
1022 [[package]]
1023 name = "darling"
1024 version = "0.20.11"
@@ -583,6 +1039,20 @@ dependencies = [
1039 "darling_macro 0.23.0",
1040 ]
1041
1042 +[[package]]
1043 +name = "darling_core"
1044 +version = "0.11.0"
1045 +source = "registry+https://github.com/rust-lang/crates.io-index"
1046 +checksum = "06e172685d94b7b83800e3256a63261537b9d6129e10f21c8e13ddf9dba8c64d"
1047 +dependencies = [
1048 + "fnv",
1049 + "ident_case",
1050 + "proc-macro2",
1051 + "quote",
1052 + "strsim 0.10.0",
1053 + "syn 1.0.109",
1054 +]
1055 +
1056 [[package]]
1057 name = "darling_core"
1058 version = "0.20.11"
@@ -610,6 +1080,17 @@ dependencies = [
1080 "syn 2.0.117",
1081 ]
1082
1083 +[[package]]
1084 +name = "darling_macro"
1085 +version = "0.11.0"
1086 +source = "registry+https://github.com/rust-lang/crates.io-index"
1087 +checksum = "f0618ac802792cebd1918ac6042a6ea1eeab92db34b35656afaa577929820788"
1088 +dependencies = [
1089 + "darling_core 0.11.0",
1090 + "quote",
1091 + "syn 1.0.109",
1092 +]
1093 +
1094 [[package]]
1095 name = "darling_macro"
1096 version = "0.20.11"
@@ -641,6 +1122,39 @@ dependencies = [
1122 "serde",
1123 ]
1124
1125 +[[package]]
1126 +name = "data-encoding"
1127 +version = "2.11.0"
1128 +source = "registry+https://github.com/rust-lang/crates.io-index"
1129 +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
1130 +
1131 +[[package]]
1132 +name = "defmac"
1133 +version = "0.1.3"
1134 +source = "registry+https://github.com/rust-lang/crates.io-index"
1135 +checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d"
1136 +
1137 +[[package]]
1138 +name = "deranged"
1139 +version = "0.5.8"
1140 +source = "registry+https://github.com/rust-lang/crates.io-index"
1141 +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
1142 +dependencies = [
1143 + "powerfmt",
1144 + "serde_core",
1145 +]
1146 +
1147 +[[package]]
1148 +name = "derive-new"
1149 +version = "0.7.0"
1150 +source = "registry+https://github.com/rust-lang/crates.io-index"
1151 +checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc"
1152 +dependencies = [
1153 + "proc-macro2",
1154 + "quote",
1155 + "syn 2.0.117",
1156 +]
1157 +
1158 [[package]]
1159 name = "derive_builder"
1160 version = "0.20.2"
@@ -672,6 +1186,48 @@ dependencies = [
1186 "syn 2.0.117",
1187 ]
1188
1189 +[[package]]
1190 +name = "derive_more"
1191 +version = "2.1.1"
1192 +source = "registry+https://github.com/rust-lang/crates.io-index"
1193 +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
1194 +dependencies = [
1195 + "derive_more-impl",
1196 +]
1197 +
1198 +[[package]]
1199 +name = "derive_more-impl"
1200 +version = "2.1.1"
1201 +source = "registry+https://github.com/rust-lang/crates.io-index"
1202 +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
1203 +dependencies = [
1204 + "convert_case 0.10.0",
1205 + "proc-macro2",
1206 + "quote",
1207 + "rustc_version",
1208 + "syn 2.0.117",
1209 +]
1210 +
1211 +[[package]]
1212 +name = "derivre"
1213 +version = "0.3.11"
1214 +source = "registry+https://github.com/rust-lang/crates.io-index"
1215 +checksum = "dd3bf7087923a80510e6ea986960cb4011bcf54259ecb19a80bf40a645a1526c"
1216 +dependencies = [
1217 + "anyhow",
1218 + "bytemuck",
1219 + "bytemuck_derive",
1220 + "hashbrown 0.15.5",
1221 + "regex-syntax",
1222 + "strum 0.27.2",
1223 +]
1224 +
1225 +[[package]]
1226 +name = "deunicode"
1227 +version = "1.6.2"
1228 +source = "registry+https://github.com/rust-lang/crates.io-index"
1229 +checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04"
1230 +
1231 [[package]]
1232 name = "digest"
1233 version = "0.10.7"
@@ -688,7 +1244,16 @@ version = "5.0.1"
1244 source = "registry+https://github.com/rust-lang/crates.io-index"
1245 checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
1246 dependencies = [
691 - "dirs-sys",
1247 + "dirs-sys 0.4.1",
1248 +]
1249 +
1250 +[[package]]
1251 +name = "dirs"
1252 +version = "6.0.0"
1253 +source = "registry+https://github.com/rust-lang/crates.io-index"
1254 +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
1255 +dependencies = [
1256 + "dirs-sys 0.5.0",
1257 ]
1258
1259 [[package]]
@@ -699,10 +1264,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
1264 dependencies = [
1265 "libc",
1266 "option-ext",
702 - "redox_users",
1267 + "redox_users 0.4.6",
1268 "windows-sys 0.48.0",
1269 ]
1270
1271 +[[package]]
1272 +name = "dirs-sys"
1273 +version = "0.5.0"
1274 +source = "registry+https://github.com/rust-lang/crates.io-index"
1275 +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
1276 +dependencies = [
1277 + "libc",
1278 + "option-ext",
1279 + "redox_users 0.5.2",
1280 + "windows-sys 0.61.2",
1281 +]
1282 +
1283 [[package]]
1284 name = "dispatch2"
1285 version = "0.3.1"
@@ -710,6 +1287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1287 checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
1288 dependencies = [
1289 "bitflags 2.11.1",
1290 + "block2",
1291 "objc2",
1292 ]
1293
@@ -724,12 +1302,54 @@ dependencies = [
1302 "syn 2.0.117",
1303 ]
1304
1305 +[[package]]
1306 +name = "doctest-file"
1307 +version = "1.1.1"
1308 +source = "registry+https://github.com/rust-lang/crates.io-index"
1309 +checksum = "c2db04e74f0a9a93103b50e90b96024c9b2bdca8bce6a632ec71b88736d3d359"
1310 +
1311 +[[package]]
1312 +name = "document-features"
1313 +version = "0.2.12"
1314 +source = "registry+https://github.com/rust-lang/crates.io-index"
1315 +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
1316 +dependencies = [
1317 + "litrs",
1318 +]
1319 +
1320 [[package]]
1321 name = "dotenvy"
1322 version = "0.15.7"
1323 source = "registry+https://github.com/rust-lang/crates.io-index"
1324 checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
1325
1326 +[[package]]
1327 +name = "dtoa"
1328 +version = "1.0.11"
1329 +source = "registry+https://github.com/rust-lang/crates.io-index"
1330 +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
1331 +
1332 +[[package]]
1333 +name = "dtoa-short"
1334 +version = "0.3.5"
1335 +source = "registry+https://github.com/rust-lang/crates.io-index"
1336 +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
1337 +dependencies = [
1338 + "dtoa",
1339 +]
1340 +
1341 +[[package]]
1342 +name = "dunce"
1343 +version = "1.0.5"
1344 +source = "registry+https://github.com/rust-lang/crates.io-index"
1345 +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
1346 +
1347 +[[package]]
1348 +name = "dyn-clone"
1349 +version = "1.0.20"
1350 +source = "registry+https://github.com/rust-lang/crates.io-index"
1351 +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
1352 +
1353 [[package]]
1354 name = "dyn-stack"
1355 version = "0.13.2"
@@ -746,11 +1366,50 @@ version = "0.1.3"
1366 source = "registry+https://github.com/rust-lang/crates.io-index"
1367 checksum = "e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9"
1368
1369 +[[package]]
1370 +name = "ego-tree"
1371 +version = "0.10.0"
1372 +source = "registry+https://github.com/rust-lang/crates.io-index"
1373 +checksum = "b2972feb8dffe7bc8c5463b1dacda1b0dfbed3710e50f977d965429692d74cd8"
1374 +
1375 [[package]]
1376 name = "either"
1377 version = "1.15.0"
1378 source = "registry+https://github.com/rust-lang/crates.io-index"
1379 checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
1380 +dependencies = [
1381 + "serde",
1382 +]
1383 +
1384 +[[package]]
1385 +name = "encode_unicode"
1386 +version = "1.0.0"
1387 +source = "registry+https://github.com/rust-lang/crates.io-index"
1388 +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
1389 +
1390 +[[package]]
1391 +name = "encoding_rs"
1392 +version = "0.8.35"
1393 +source = "registry+https://github.com/rust-lang/crates.io-index"
1394 +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
1395 +dependencies = [
1396 + "cfg-if",
1397 +]
1398 +
1399 +[[package]]
1400 +name = "encoding_rs_io"
1401 +version = "0.1.7"
1402 +source = "registry+https://github.com/rust-lang/crates.io-index"
1403 +checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83"
1404 +dependencies = [
1405 + "encoding_rs",
1406 +]
1407 +
1408 +[[package]]
1409 +name = "endian-type"
1410 +version = "0.2.0"
1411 +source = "registry+https://github.com/rust-lang/crates.io-index"
1412 +checksum = "869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2"
1413
1414 [[package]]
1415 name = "enum-as-inner"
@@ -764,6 +1423,26 @@ dependencies = [
1423 "syn 2.0.117",
1424 ]
1425
1426 +[[package]]
1427 +name = "equator"
1428 +version = "0.4.2"
1429 +source = "registry+https://github.com/rust-lang/crates.io-index"
1430 +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc"
1431 +dependencies = [
1432 + "equator-macro",
1433 +]
1434 +
1435 +[[package]]
1436 +name = "equator-macro"
1437 +version = "0.4.2"
1438 +source = "registry+https://github.com/rust-lang/crates.io-index"
1439 +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
1440 +dependencies = [
1441 + "proc-macro2",
1442 + "quote",
1443 + "syn 2.0.117",
1444 +]
1445 +
1446 [[package]]
1447 name = "equivalent"
1448 version = "1.0.2"
@@ -777,7 +1456,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1456 checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1457 dependencies = [
1458 "libc",
780 - "windows-sys 0.59.0",
1459 + "windows-sys 0.61.2",
1460 ]
1461
1462 [[package]]
@@ -787,56 +1466,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1466 checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6"
1467
1468 [[package]]
790 -name = "find-msvc-tools"
791 -version = "0.1.9"
792 -source = "registry+https://github.com/rust-lang/crates.io-index"
793 -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
794 -
795 -[[package]]
796 -name = "float8"
797 -version = "0.7.0"
1469 +name = "exr"
1470 +version = "1.74.0"
1471 source = "registry+https://github.com/rust-lang/crates.io-index"
799 -checksum = "c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc"
1472 +checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be"
1473 dependencies = [
1474 + "bit_field",
1475 "half",
802 - "num-traits",
803 - "rand 0.9.4",
804 - "rand_distr",
1476 + "lebe",
1477 + "miniz_oxide",
1478 + "rayon-core",
1479 + "smallvec 1.15.1",
1480 + "zune-inflate",
1481 ]
1482
1483 [[package]]
808 -name = "fnv"
809 -version = "1.0.7"
1484 +name = "extended"
1485 +version = "0.1.0"
1486 source = "registry+https://github.com/rust-lang/crates.io-index"
811 -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1487 +checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365"
1488
1489 [[package]]
814 -name = "foldhash"
815 -version = "0.1.5"
1490 +name = "fancy-regex"
1491 +version = "0.13.0"
1492 source = "registry+https://github.com/rust-lang/crates.io-index"
817 -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1493 +checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2"
1494 +dependencies = [
1495 + "bit-set 0.5.3",
1496 + "regex-automata",
1497 + "regex-syntax",
1498 +]
1499
1500 [[package]]
820 -name = "foldhash"
821 -version = "0.2.0"
1501 +name = "fancy-regex"
1502 +version = "0.14.0"
1503 source = "registry+https://github.com/rust-lang/crates.io-index"
823 -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1504 +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298"
1505 +dependencies = [
1506 + "bit-set 0.8.0",
1507 + "regex-automata",
1508 + "regex-syntax",
1509 +]
1510
1511 [[package]]
826 -name = "foreign-types"
827 -version = "0.5.0"
1512 +name = "fastrand"
1513 +version = "2.4.1"
1514 source = "registry+https://github.com/rust-lang/crates.io-index"
829 -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1515 +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
1516 +
1517 +[[package]]
1518 +name = "fax"
1519 +version = "0.2.6"
1520 +source = "registry+https://github.com/rust-lang/crates.io-index"
1521 +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1522 dependencies = [
831 - "foreign-types-macros",
832 - "foreign-types-shared",
1523 + "fax_derive",
1524 ]
1525
1526 [[package]]
836 -name = "foreign-types-macros"
837 -version = "0.2.3"
1527 +name = "fax_derive"
1528 +version = "0.2.0"
1529 source = "registry+https://github.com/rust-lang/crates.io-index"
839 -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1530 +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1531 dependencies = [
1532 "proc-macro2",
1533 "quote",
@@ -844,13 +1535,89 @@ dependencies = [
1535 ]
1536
1537 [[package]]
847 -name = "foreign-types-shared"
848 -version = "0.3.1"
1538 +name = "fdeflate"
1539 +version = "0.3.7"
1540 source = "registry+https://github.com/rust-lang/crates.io-index"
850 -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1541 +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
1542 +dependencies = [
1543 + "simd-adler32",
1544 +]
1545
1546 [[package]]
853 -name = "form_urlencoded"
1547 +name = "find-msvc-tools"
1548 +version = "0.1.9"
1549 +source = "registry+https://github.com/rust-lang/crates.io-index"
1550 +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
1551 +
1552 +[[package]]
1553 +name = "flate2"
1554 +version = "1.1.9"
1555 +source = "registry+https://github.com/rust-lang/crates.io-index"
1556 +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
1557 +dependencies = [
1558 + "crc32fast",
1559 + "miniz_oxide",
1560 +]
1561 +
1562 +[[package]]
1563 +name = "float8"
1564 +version = "0.7.0"
1565 +source = "registry+https://github.com/rust-lang/crates.io-index"
1566 +checksum = "c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc"
1567 +dependencies = [
1568 + "half",
1569 + "num-traits",
1570 + "rand 0.9.4",
1571 + "rand_distr 0.5.1",
1572 +]
1573 +
1574 +[[package]]
1575 +name = "fnv"
1576 +version = "1.0.7"
1577 +source = "registry+https://github.com/rust-lang/crates.io-index"
1578 +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1579 +
1580 +[[package]]
1581 +name = "foldhash"
1582 +version = "0.1.5"
1583 +source = "registry+https://github.com/rust-lang/crates.io-index"
1584 +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1585 +
1586 +[[package]]
1587 +name = "foldhash"
1588 +version = "0.2.0"
1589 +source = "registry+https://github.com/rust-lang/crates.io-index"
1590 +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1591 +
1592 +[[package]]
1593 +name = "foreign-types"
1594 +version = "0.5.0"
1595 +source = "registry+https://github.com/rust-lang/crates.io-index"
1596 +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1597 +dependencies = [
1598 + "foreign-types-macros",
1599 + "foreign-types-shared",
1600 +]
1601 +
1602 +[[package]]
1603 +name = "foreign-types-macros"
1604 +version = "0.2.3"
1605 +source = "registry+https://github.com/rust-lang/crates.io-index"
1606 +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1607 +dependencies = [
1608 + "proc-macro2",
1609 + "quote",
1610 + "syn 2.0.117",
1611 +]
1612 +
1613 +[[package]]
1614 +name = "foreign-types-shared"
1615 +version = "0.3.1"
1616 +source = "registry+https://github.com/rust-lang/crates.io-index"
1617 +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1618 +
1619 +[[package]]
1620 +name = "form_urlencoded"
1621 version = "1.2.2"
1622 source = "registry+https://github.com/rust-lang/crates.io-index"
1623 checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
@@ -858,6 +1625,22 @@ dependencies = [
1625 "percent-encoding",
1626 ]
1627
1628 +[[package]]
1629 +name = "fs_extra"
1630 +version = "1.3.0"
1631 +source = "registry+https://github.com/rust-lang/crates.io-index"
1632 +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
1633 +
1634 +[[package]]
1635 +name = "futf"
1636 +version = "0.1.5"
1637 +source = "registry+https://github.com/rust-lang/crates.io-index"
1638 +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
1639 +dependencies = [
1640 + "mac",
1641 + "new_debug_unreachable",
1642 +]
1643 +
1644 [[package]]
1645 name = "futures"
1646 version = "0.3.32"
@@ -946,6 +1729,25 @@ dependencies = [
1729 "slab",
1730 ]
1731
1732 +[[package]]
1733 +name = "fxhash"
1734 +version = "0.2.1"
1735 +source = "registry+https://github.com/rust-lang/crates.io-index"
1736 +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1737 +dependencies = [
1738 + "byteorder",
1739 +]
1740 +
1741 +[[package]]
1742 +name = "galil-seiferas"
1743 +version = "0.1.5"
1744 +source = "registry+https://github.com/rust-lang/crates.io-index"
1745 +checksum = "794ac25cfda3fa11d2b07ff8c65889c6c03411646df54e59e606878d899e1d5a"
1746 +dependencies = [
1747 + "defmac",
1748 + "unchecked-index",
1749 +]
1750 +
1751 [[package]]
1752 name = "gemm"
1753 version = "0.18.2"
@@ -1194,7 +1996,7 @@ dependencies = [
1996 "libc",
1997 "log",
1998 "rustversion",
1197 - "windows",
1999 + "windows 0.48.0",
2000 ]
2001
2002 [[package]]
@@ -1207,6 +2009,15 @@ dependencies = [
2009 "version_check",
2010 ]
2011
2012 +[[package]]
2013 +name = "getopts"
2014 +version = "0.2.24"
2015 +source = "registry+https://github.com/rust-lang/crates.io-index"
2016 +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df"
2017 +dependencies = [
2018 + "unicode-width 0.2.0",
2019 +]
2020 +
2021 [[package]]
2022 name = "getrandom"
2023 version = "0.2.17"
@@ -1247,6 +2058,35 @@ dependencies = [
2058 "wasip3",
2059 ]
2060
2061 +[[package]]
2062 +name = "gif"
2063 +version = "0.14.2"
2064 +source = "registry+https://github.com/rust-lang/crates.io-index"
2065 +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159"
2066 +dependencies = [
2067 + "color_quant",
2068 + "weezl",
2069 +]
2070 +
2071 +[[package]]
2072 +name = "h2"
2073 +version = "0.4.13"
2074 +source = "registry+https://github.com/rust-lang/crates.io-index"
2075 +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
2076 +dependencies = [
2077 + "atomic-waker",
2078 + "bytes",
2079 + "fnv",
2080 + "futures-core",
2081 + "futures-sink",
2082 + "http",
2083 + "indexmap 2.14.0",
2084 + "slab",
2085 + "tokio",
2086 + "tokio-util",
2087 + "tracing",
2088 +]
2089 +
2090 [[package]]
2091 name = "half"
2092 version = "2.7.1"
@@ -1258,10 +2098,16 @@ dependencies = [
2098 "crunchy",
2099 "num-traits",
2100 "rand 0.9.4",
1261 - "rand_distr",
2101 + "rand_distr 0.5.1",
2102 "zerocopy",
2103 ]
2104
2105 +[[package]]
2106 +name = "hashbrown"
2107 +version = "0.12.3"
2108 +source = "registry+https://github.com/rust-lang/crates.io-index"
2109 +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
2110 +
2111 [[package]]
2112 name = "hashbrown"
2113 version = "0.15.5"
@@ -1328,6 +2174,73 @@ version = "0.5.2"
2174 source = "registry+https://github.com/rust-lang/crates.io-index"
2175 checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
2176
2177 +[[package]]
2178 +name = "hex"
2179 +version = "0.4.3"
2180 +source = "registry+https://github.com/rust-lang/crates.io-index"
2181 +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
2182 +
2183 +[[package]]
2184 +name = "hf-hub"
2185 +version = "0.4.3"
2186 +source = "registry+https://github.com/rust-lang/crates.io-index"
2187 +checksum = "629d8f3bbeda9d148036d6b0de0a3ab947abd08ce90626327fc3547a49d59d97"
2188 +dependencies = [
2189 + "dirs 6.0.0",
2190 + "futures",
2191 + "http",
2192 + "indicatif 0.17.11",
2193 + "libc",
2194 + "log",
2195 + "num_cpus",
2196 + "rand 0.9.4",
2197 + "reqwest 0.12.28",
2198 + "serde",
2199 + "serde_json",
2200 + "thiserror 2.0.18",
2201 + "tokio",
2202 + "ureq",
2203 + "windows-sys 0.60.2",
2204 +]
2205 +
2206 +[[package]]
2207 +name = "hound"
2208 +version = "3.5.1"
2209 +source = "registry+https://github.com/rust-lang/crates.io-index"
2210 +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f"
2211 +
2212 +[[package]]
2213 +name = "html2text"
2214 +version = "0.16.7"
2215 +source = "registry+https://github.com/rust-lang/crates.io-index"
2216 +checksum = "12d23156ea4dbe6b37ad48fab2da56ff27b0f6192fb5db210c44eb07bfe6e787"
2217 +dependencies = [
2218 + "html5ever 0.38.0",
2219 + "tendril 0.5.0",
2220 + "thiserror 2.0.18",
2221 + "unicode-width 0.2.0",
2222 +]
2223 +
2224 +[[package]]
2225 +name = "html5ever"
2226 +version = "0.36.1"
2227 +source = "registry+https://github.com/rust-lang/crates.io-index"
2228 +checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e"
2229 +dependencies = [
2230 + "log",
2231 + "markup5ever 0.36.1",
2232 +]
2233 +
2234 +[[package]]
2235 +name = "html5ever"
2236 +version = "0.38.0"
2237 +source = "registry+https://github.com/rust-lang/crates.io-index"
2238 +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2"
2239 +dependencies = [
2240 + "log",
2241 + "markup5ever 0.38.0",
2242 +]
2243 +
2244 [[package]]
2245 name = "http"
2246 version = "1.4.0"
@@ -1377,12 +2290,13 @@ dependencies = [
2290 "bytes",
2291 "futures-channel",
2292 "futures-core",
2293 + "h2",
2294 "http",
2295 "http-body",
2296 "httparse",
2297 "itoa",
2298 "pin-project-lite",
1385 - "smallvec",
2299 + "smallvec 1.15.1",
2300 "tokio",
2301 "want",
2302 ]
@@ -1401,7 +2315,7 @@ dependencies = [
2315 "tokio",
2316 "tokio-rustls",
2317 "tower-service",
1404 - "webpki-roots",
2318 + "webpki-roots 1.0.7",
2319 ]
2320
2321 [[package]]
@@ -1422,9 +2336,11 @@ dependencies = [
2336 "percent-encoding",
2337 "pin-project-lite",
2338 "socket2",
2339 + "system-configuration",
2340 "tokio",
2341 "tower-service",
2342 "tracing",
2343 + "windows-registry",
2344 ]
2345
2346 [[package]]
@@ -1439,7 +2355,7 @@ dependencies = [
2355 "js-sys",
2356 "log",
2357 "wasm-bindgen",
1442 - "windows-core",
2358 + "windows-core 0.62.2",
2359 ]
2360
2361 [[package]]
@@ -1488,7 +2404,7 @@ dependencies = [
2404 "icu_normalizer_data",
2405 "icu_properties",
2406 "icu_provider",
1491 - "smallvec",
2407 + "smallvec 1.15.1",
2408 "zerovec",
2409 ]
2410
@@ -1552,7 +2468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2468 checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
2469 dependencies = [
2470 "idna_adapter",
1555 - "smallvec",
2471 + "smallvec 1.15.1",
2472 "utf8_iter",
2473 ]
2474
@@ -1566,6 +2482,57 @@ dependencies = [
2482 "icu_properties",
2483 ]
2484
2485 +[[package]]
2486 +name = "image"
2487 +version = "0.25.10"
2488 +source = "registry+https://github.com/rust-lang/crates.io-index"
2489 +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
2490 +dependencies = [
2491 + "bytemuck",
2492 + "byteorder-lite",
2493 + "color_quant",
2494 + "exr",
2495 + "gif",
2496 + "image-webp",
2497 + "moxcms",
2498 + "num-traits",
2499 + "png",
2500 + "qoi",
2501 + "ravif",
2502 + "rayon",
2503 + "rgb",
2504 + "tiff",
2505 + "zune-core",
2506 + "zune-jpeg",
2507 +]
2508 +
2509 +[[package]]
2510 +name = "image-webp"
2511 +version = "0.2.4"
2512 +source = "registry+https://github.com/rust-lang/crates.io-index"
2513 +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
2514 +dependencies = [
2515 + "byteorder-lite",
2516 + "quick-error",
2517 +]
2518 +
2519 +[[package]]
2520 +name = "imgref"
2521 +version = "1.12.0"
2522 +source = "registry+https://github.com/rust-lang/crates.io-index"
2523 +checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8"
2524 +
2525 +[[package]]
2526 +name = "indexmap"
2527 +version = "1.9.3"
2528 +source = "registry+https://github.com/rust-lang/crates.io-index"
2529 +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
2530 +dependencies = [
2531 + "autocfg",
2532 + "hashbrown 0.12.3",
2533 + "serde",
2534 +]
2535 +
2536 [[package]]
2537 name = "indexmap"
2538 version = "2.14.0"
@@ -1578,6 +2545,33 @@ dependencies = [
2545 "serde_core",
2546 ]
2547
2548 +[[package]]
2549 +name = "indicatif"
2550 +version = "0.17.11"
2551 +source = "registry+https://github.com/rust-lang/crates.io-index"
2552 +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
2553 +dependencies = [
2554 + "console 0.15.11",
2555 + "number_prefix",
2556 + "portable-atomic",
2557 + "unicode-width 0.2.0",
2558 + "web-time",
2559 +]
2560 +
2561 +[[package]]
2562 +name = "indicatif"
2563 +version = "0.18.4"
2564 +source = "registry+https://github.com/rust-lang/crates.io-index"
2565 +checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb"
2566 +dependencies = [
2567 + "console 0.16.3",
2568 + "portable-atomic",
2569 + "rayon",
2570 + "unicode-width 0.2.0",
2571 + "unit-prefix",
2572 + "web-time",
2573 +]
2574 +
2575 [[package]]
2576 name = "indoc"
2577 version = "2.0.7"
@@ -1600,6 +2594,30 @@ dependencies = [
2594 "syn 2.0.117",
2595 ]
2596
2597 +[[package]]
2598 +name = "interpolate_name"
2599 +version = "0.2.4"
2600 +source = "registry+https://github.com/rust-lang/crates.io-index"
2601 +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
2602 +dependencies = [
2603 + "proc-macro2",
2604 + "quote",
2605 + "syn 2.0.117",
2606 +]
2607 +
2608 +[[package]]
2609 +name = "interprocess"
2610 +version = "2.4.2"
2611 +source = "registry+https://github.com/rust-lang/crates.io-index"
2612 +checksum = "069323743400cb7ab06a8fe5c1ed911d36b6919ec531661d034c89083629595b"
2613 +dependencies = [
2614 + "doctest-file",
2615 + "libc",
2616 + "recvmsg",
2617 + "widestring",
2618 + "windows-sys 0.61.2",
2619 +]
2620 +
2621 [[package]]
2622 name = "ipnet"
2623 version = "2.12.0"
@@ -1665,43 +2683,113 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2683 checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
2684
2685 [[package]]
1668 -name = "js-sys"
1669 -version = "0.3.95"
2686 +name = "jni"
2687 +version = "0.21.1"
2688 source = "registry+https://github.com/rust-lang/crates.io-index"
1671 -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
2689 +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
2690 dependencies = [
2691 + "cesu8",
2692 "cfg-if",
1674 - "futures-util",
1675 - "once_cell",
1676 - "wasm-bindgen",
2693 + "combine",
2694 + "jni-sys 0.3.1",
2695 + "log",
2696 + "thiserror 1.0.69",
2697 + "walkdir",
2698 + "windows-sys 0.45.0",
2699 ]
2700
2701 [[package]]
1680 -name = "lazy_static"
1681 -version = "1.5.0"
2702 +name = "jni-sys"
2703 +version = "0.3.1"
2704 source = "registry+https://github.com/rust-lang/crates.io-index"
1683 -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2705 +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
2706 +dependencies = [
2707 + "jni-sys 0.4.1",
2708 +]
2709
2710 [[package]]
1686 -name = "leb128fmt"
1687 -version = "0.1.0"
2711 +name = "jni-sys"
2712 +version = "0.4.1"
2713 source = "registry+https://github.com/rust-lang/crates.io-index"
1689 -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
2714 +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
2715 +dependencies = [
2716 + "jni-sys-macros",
2717 +]
2718
2719 [[package]]
1692 -name = "libc"
1693 -version = "0.2.185"
2720 +name = "jni-sys-macros"
2721 +version = "0.4.1"
2722 source = "registry+https://github.com/rust-lang/crates.io-index"
1695 -checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
2723 +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
2724 +dependencies = [
2725 + "quote",
2726 + "syn 2.0.117",
2727 +]
2728
2729 [[package]]
1698 -name = "libloading"
1699 -version = "0.8.9"
2730 +name = "jobserver"
2731 +version = "0.1.34"
2732 source = "registry+https://github.com/rust-lang/crates.io-index"
1701 -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
2733 +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
2734 dependencies = [
1703 - "cfg-if",
1704 - "windows-link",
2735 + "getrandom 0.3.4",
2736 + "libc",
2737 +]
2738 +
2739 +[[package]]
2740 +name = "js-sys"
2741 +version = "0.3.95"
2742 +source = "registry+https://github.com/rust-lang/crates.io-index"
2743 +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
2744 +dependencies = [
2745 + "cfg-if",
2746 + "futures-util",
2747 + "once_cell",
2748 + "wasm-bindgen",
2749 +]
2750 +
2751 +[[package]]
2752 +name = "lazy_static"
2753 +version = "1.5.0"
2754 +source = "registry+https://github.com/rust-lang/crates.io-index"
2755 +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2756 +
2757 +[[package]]
2758 +name = "leb128fmt"
2759 +version = "0.1.0"
2760 +source = "registry+https://github.com/rust-lang/crates.io-index"
2761 +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
2762 +
2763 +[[package]]
2764 +name = "lebe"
2765 +version = "0.5.3"
2766 +source = "registry+https://github.com/rust-lang/crates.io-index"
2767 +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
2768 +
2769 +[[package]]
2770 +name = "libc"
2771 +version = "0.2.186"
2772 +source = "registry+https://github.com/rust-lang/crates.io-index"
2773 +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
2774 +
2775 +[[package]]
2776 +name = "libfuzzer-sys"
2777 +version = "0.4.12"
2778 +source = "registry+https://github.com/rust-lang/crates.io-index"
2779 +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d"
2780 +dependencies = [
2781 + "arbitrary",
2782 + "cc",
2783 +]
2784 +
2785 +[[package]]
2786 +name = "libloading"
2787 +version = "0.8.9"
2788 +source = "registry+https://github.com/rust-lang/crates.io-index"
2789 +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
2790 +dependencies = [
2791 + "cfg-if",
2792 + "windows-link 0.2.1",
2793 ]
2794
2795 [[package]]
@@ -1725,12 +2813,39 @@ version = "0.4.15"
2813 source = "registry+https://github.com/rust-lang/crates.io-index"
2814 checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
2815
2816 +[[package]]
2817 +name = "linux-raw-sys"
2818 +version = "0.12.1"
2819 +source = "registry+https://github.com/rust-lang/crates.io-index"
2820 +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
2821 +
2822 [[package]]
2823 name = "litemap"
2824 version = "0.8.2"
2825 source = "registry+https://github.com/rust-lang/crates.io-index"
2826 checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
2827
2828 +[[package]]
2829 +name = "litrs"
2830 +version = "1.0.0"
2831 +source = "registry+https://github.com/rust-lang/crates.io-index"
2832 +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
2833 +
2834 +[[package]]
2835 +name = "llguidance"
2836 +version = "1.7.4"
2837 +source = "registry+https://github.com/rust-lang/crates.io-index"
2838 +checksum = "8e25b7647bd0b32c374d03fd0c148182ba46262fdd060f8897f638b0a3ff0818"
2839 +dependencies = [
2840 + "anyhow",
2841 + "derivre",
2842 + "indexmap 2.14.0",
2843 + "regex-syntax",
2844 + "serde",
2845 + "serde_json",
2846 + "toktrie",
2847 +]
2848 +
2849 [[package]]
2850 name = "lock_api"
2851 version = "0.4.14"
@@ -1761,6 +2876,28 @@ dependencies = [
2876 "tracing-subscriber",
2877 ]
2878
2879 +[[package]]
2880 +name = "loop9"
2881 +version = "0.1.5"
2882 +source = "registry+https://github.com/rust-lang/crates.io-index"
2883 +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
2884 +dependencies = [
2885 + "imgref",
2886 +]
2887 +
2888 +[[package]]
2889 +name = "lrtable"
2890 +version = "0.14.1"
2891 +source = "registry+https://github.com/rust-lang/crates.io-index"
2892 +checksum = "b15ad6a43e5cff4ac046d51281d2256a36d1440065eab53ccce9362b48db5b42"
2893 +dependencies = [
2894 + "cfgrammar",
2895 + "fnv",
2896 + "num-traits",
2897 + "sparsevec",
2898 + "vob",
2899 +]
2900 +
2901 [[package]]
2902 name = "lru"
2903 version = "0.12.5"
@@ -1776,125 +2913,528 @@ version = "0.1.2"
2913 source = "registry+https://github.com/rust-lang/crates.io-index"
2914 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
2915
2916 +[[package]]
2917 +name = "mac"
2918 +version = "0.1.1"
2919 +source = "registry+https://github.com/rust-lang/crates.io-index"
2920 +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
2921 +
2922 [[package]]
2923 name = "macro_rules_attribute"
2924 version = "0.2.2"
2925 source = "registry+https://github.com/rust-lang/crates.io-index"
2926 checksum = "65049d7923698040cd0b1ddcced9b0eb14dd22c5f86ae59c3740eab64a676520"
2927 dependencies = [
1785 - "macro_rules_attribute-proc_macro",
1786 - "paste",
2928 + "macro_rules_attribute-proc_macro",
2929 + "paste",
2930 +]
2931 +
2932 +[[package]]
2933 +name = "macro_rules_attribute-proc_macro"
2934 +version = "0.2.2"
2935 +source = "registry+https://github.com/rust-lang/crates.io-index"
2936 +checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30"
2937 +
2938 +[[package]]
2939 +name = "malloc_buf"
2940 +version = "0.0.6"
2941 +source = "registry+https://github.com/rust-lang/crates.io-index"
2942 +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
2943 +dependencies = [
2944 + "libc",
2945 +]
2946 +
2947 +[[package]]
2948 +name = "maplit"
2949 +version = "1.0.2"
2950 +source = "registry+https://github.com/rust-lang/crates.io-index"
2951 +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
2952 +
2953 +[[package]]
2954 +name = "markup5ever"
2955 +version = "0.36.1"
2956 +source = "registry+https://github.com/rust-lang/crates.io-index"
2957 +checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c"
2958 +dependencies = [
2959 + "log",
2960 + "tendril 0.4.3",
2961 + "web_atoms",
2962 +]
2963 +
2964 +[[package]]
2965 +name = "markup5ever"
2966 +version = "0.38.0"
2967 +source = "registry+https://github.com/rust-lang/crates.io-index"
2968 +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862"
2969 +dependencies = [
2970 + "log",
2971 + "tendril 0.5.0",
2972 + "web_atoms",
2973 +]
2974 +
2975 +[[package]]
2976 +name = "matchers"
2977 +version = "0.2.0"
2978 +source = "registry+https://github.com/rust-lang/crates.io-index"
2979 +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
2980 +dependencies = [
2981 + "regex-automata",
2982 +]
2983 +
2984 +[[package]]
2985 +name = "matrixmultiply"
2986 +version = "0.3.10"
2987 +source = "registry+https://github.com/rust-lang/crates.io-index"
2988 +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
2989 +dependencies = [
2990 + "autocfg",
2991 + "rawpointer",
2992 +]
2993 +
2994 +[[package]]
2995 +name = "maybe-rayon"
2996 +version = "0.1.1"
2997 +source = "registry+https://github.com/rust-lang/crates.io-index"
2998 +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
2999 +dependencies = [
3000 + "cfg-if",
3001 + "rayon",
3002 +]
3003 +
3004 +[[package]]
3005 +name = "memchr"
3006 +version = "2.8.0"
3007 +source = "registry+https://github.com/rust-lang/crates.io-index"
3008 +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
3009 +
3010 +[[package]]
3011 +name = "memmap2"
3012 +version = "0.9.10"
3013 +source = "registry+https://github.com/rust-lang/crates.io-index"
3014 +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
3015 +dependencies = [
3016 + "libc",
3017 + "stable_deref_trait",
3018 +]
3019 +
3020 +[[package]]
3021 +name = "memo-map"
3022 +version = "0.3.3"
3023 +source = "registry+https://github.com/rust-lang/crates.io-index"
3024 +checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b"
3025 +
3026 +[[package]]
3027 +name = "metal"
3028 +version = "0.29.0"
3029 +source = "registry+https://github.com/rust-lang/crates.io-index"
3030 +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
3031 +dependencies = [
3032 + "bitflags 2.11.1",
3033 + "block",
3034 + "core-graphics-types",
3035 + "foreign-types",
3036 + "log",
3037 + "objc",
3038 + "paste",
3039 +]
3040 +
3041 +[[package]]
3042 +name = "mime"
3043 +version = "0.3.17"
3044 +source = "registry+https://github.com/rust-lang/crates.io-index"
3045 +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
3046 +
3047 +[[package]]
3048 +name = "mime_guess"
3049 +version = "2.0.5"
3050 +source = "registry+https://github.com/rust-lang/crates.io-index"
3051 +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
3052 +dependencies = [
3053 + "mime",
3054 + "unicase",
3055 +]
3056 +
3057 +[[package]]
3058 +name = "minijinja"
3059 +version = "2.19.0"
3060 +source = "registry+https://github.com/rust-lang/crates.io-index"
3061 +checksum = "805bfd7352166bae857ee569628b52bcd85a1cecf7810861ebceb1686b72b75d"
3062 +dependencies = [
3063 + "memo-map",
3064 + "serde",
3065 + "serde_json",
3066 +]
3067 +
3068 +[[package]]
3069 +name = "minijinja-contrib"
3070 +version = "2.19.0"
3071 +source = "registry+https://github.com/rust-lang/crates.io-index"
3072 +checksum = "45092d80391870622fcf3bd82f5d2af18f99533ea60debb4bc9db0c76f0e809a"
3073 +dependencies = [
3074 + "minijinja",
3075 + "serde",
3076 +]
3077 +
3078 +[[package]]
3079 +name = "minimal-lexical"
3080 +version = "0.2.1"
3081 +source = "registry+https://github.com/rust-lang/crates.io-index"
3082 +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
3083 +
3084 +[[package]]
3085 +name = "miniz_oxide"
3086 +version = "0.8.9"
3087 +source = "registry+https://github.com/rust-lang/crates.io-index"
3088 +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
3089 +dependencies = [
3090 + "adler2",
3091 + "simd-adler32",
3092 +]
3093 +
3094 +[[package]]
3095 +name = "mio"
3096 +version = "1.2.0"
3097 +source = "registry+https://github.com/rust-lang/crates.io-index"
3098 +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
3099 +dependencies = [
3100 + "libc",
3101 + "log",
3102 + "wasi",
3103 + "windows-sys 0.61.2",
3104 +]
3105 +
3106 +[[package]]
3107 +name = "mistralrs"
3108 +version = "0.8.1"
3109 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3110 +dependencies = [
3111 + "anyhow",
3112 + "candle-core",
3113 + "candle-nn",
3114 + "clap 4.6.1",
3115 + "either",
3116 + "futures",
3117 + "image",
3118 + "indexmap 2.14.0",
3119 + "mistralrs-core",
3120 + "mistralrs-macros",
3121 + "rand 0.9.4",
3122 + "reqwest 0.13.2",
3123 + "schemars 1.2.1",
3124 + "serde",
3125 + "serde_json",
3126 + "thiserror 2.0.18",
3127 + "tokio",
3128 + "tracing",
3129 + "tracing-subscriber",
3130 + "walkdir",
3131 +]
3132 +
3133 +[[package]]
3134 +name = "mistralrs-audio"
3135 +version = "0.8.1"
3136 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3137 +dependencies = [
3138 + "anyhow",
3139 + "apodize",
3140 + "hound",
3141 + "symphonia",
3142 +]
3143 +
3144 +[[package]]
3145 +name = "mistralrs-core"
3146 +version = "0.8.1"
3147 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3148 +dependencies = [
3149 + "ahash",
3150 + "akin",
3151 + "anyhow",
3152 + "apodize",
3153 + "as-any",
3154 + "async-trait",
3155 + "base64 0.22.1",
3156 + "bm25",
3157 + "bytemuck",
3158 + "bytemuck_derive",
3159 + "candle-core",
3160 + "candle-metal-kernels",
3161 + "candle-nn",
3162 + "cfgrammar",
3163 + "chrono",
3164 + "clap 4.6.1",
3165 + "csv",
3166 + "derive-new",
3167 + "derive_more",
3168 + "dirs 6.0.0",
3169 + "either",
3170 + "float8",
3171 + "futures",
3172 + "galil-seiferas",
3173 + "half",
3174 + "hashbrown 0.16.1",
3175 + "hf-hub",
3176 + "hound",
3177 + "html2text",
3178 + "http",
3179 + "image",
3180 + "indexmap 2.14.0",
3181 + "indicatif 0.18.4",
3182 + "interprocess",
3183 + "itertools 0.14.0",
3184 + "libc",
3185 + "llguidance",
3186 + "lrtable",
3187 + "minijinja",
3188 + "minijinja-contrib",
3189 + "mistralrs-audio",
3190 + "mistralrs-mcp",
3191 + "mistralrs-paged-attn",
3192 + "mistralrs-quant",
3193 + "mistralrs-vision",
3194 + "num-traits",
3195 + "objc",
3196 + "objc2-metal",
3197 + "openai-harmony",
3198 + "ordered-float",
3199 + "parking_lot",
3200 + "radix_trie",
3201 + "rand 0.9.4",
3202 + "rand_distr 0.5.1",
3203 + "rand_isaac",
3204 + "rayon",
3205 + "regex",
3206 + "regex-automata",
3207 + "reqwest 0.13.2",
3208 + "rubato",
3209 + "rust-mcp-schema",
3210 + "rustc-hash 2.1.2",
3211 + "rustfft",
3212 + "safetensors 0.7.0",
3213 + "schemars 1.2.1",
3214 + "scraper",
3215 + "serde",
3216 + "serde-big-array",
3217 + "serde-saphyr",
3218 + "serde_json",
3219 + "serde_plain",
3220 + "statrs",
3221 + "strum 0.27.2",
3222 + "symphonia",
3223 + "sysinfo",
3224 + "thiserror 2.0.18",
3225 + "tokenizers 0.21.4",
3226 + "tokio",
3227 + "tokio-rayon",
3228 + "tokio-tungstenite",
3229 + "toktrie",
3230 + "toktrie_hf_tokenizers",
3231 + "toml",
3232 + "tqdm",
3233 + "tracing",
3234 + "tracing-subscriber",
3235 + "urlencoding",
3236 + "uuid 1.23.1",
3237 + "variantly",
3238 + "vob",
3239 +]
3240 +
3241 +[[package]]
3242 +name = "mistralrs-macros"
3243 +version = "0.8.1"
3244 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3245 +dependencies = [
3246 + "darling 0.23.0",
3247 + "proc-macro2",
3248 + "quote",
3249 + "syn 2.0.117",
3250 +]
3251 +
3252 +[[package]]
3253 +name = "mistralrs-mcp"
3254 +version = "0.8.1"
3255 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3256 +dependencies = [
3257 + "anyhow",
3258 + "async-trait",
3259 + "futures-util",
3260 + "http",
3261 + "reqwest 0.13.2",
3262 + "rust-mcp-schema",
3263 + "serde",
3264 + "serde_json",
3265 + "tokio",
3266 + "tokio-tungstenite",
3267 + "tracing",
3268 + "utoipa",
3269 + "uuid 1.23.1",
3270 +]
3271 +
3272 +[[package]]
3273 +name = "mistralrs-paged-attn"
3274 +version = "0.8.1"
3275 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3276 +dependencies = [
3277 + "anyhow",
3278 + "candle-core",
3279 + "candle-metal-kernels",
3280 + "dispatch2",
3281 + "float8",
3282 + "half",
3283 + "objc2-foundation",
3284 + "objc2-metal",
3285 + "thiserror 2.0.18",
3286 +]
3287 +
3288 +[[package]]
3289 +name = "mistralrs-quant"
3290 +version = "0.8.1"
3291 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3292 +dependencies = [
3293 + "byteorder",
3294 + "candle-core",
3295 + "candle-metal-kernels",
3296 + "candle-nn",
3297 + "dispatch2",
3298 + "float8",
3299 + "half",
3300 + "hf-hub",
3301 + "lazy_static",
3302 + "memmap2",
3303 + "objc2-foundation",
3304 + "objc2-metal",
3305 + "paste",
3306 + "rayon",
3307 + "regex",
3308 + "safetensors 0.7.0",
3309 + "serde",
3310 + "serde_json",
3311 + "thiserror 2.0.18",
3312 + "tokio",
3313 + "tracing",
3314 + "yoke 0.8.2",
3315 +]
3316 +
3317 +[[package]]
3318 +name = "mistralrs-vision"
3319 +version = "0.8.1"
3320 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#e53956bcd1b40c8221f79b919d78c1e496aba634"
3321 +dependencies = [
3322 + "candle-core",
3323 + "image",
3324 + "rayon",
3325 ]
3326
3327 [[package]]
1790 -name = "macro_rules_attribute-proc_macro"
1791 -version = "0.2.2"
3328 +name = "monostate"
3329 +version = "0.1.18"
3330 source = "registry+https://github.com/rust-lang/crates.io-index"
1793 -checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30"
3331 +checksum = "3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67"
3332 +dependencies = [
3333 + "monostate-impl",
3334 + "serde",
3335 + "serde_core",
3336 +]
3337
3338 [[package]]
1796 -name = "malloc_buf"
1797 -version = "0.0.6"
3339 +name = "monostate-impl"
3340 +version = "0.1.18"
3341 source = "registry+https://github.com/rust-lang/crates.io-index"
1799 -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
3342 +checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9"
3343 dependencies = [
1801 - "libc",
3344 + "proc-macro2",
3345 + "quote",
3346 + "syn 2.0.117",
3347 ]
3348
3349 [[package]]
1805 -name = "maplit"
1806 -version = "1.0.2"
3350 +name = "moxcms"
3351 +version = "0.8.1"
3352 source = "registry+https://github.com/rust-lang/crates.io-index"
1808 -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
3353 +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
3354 +dependencies = [
3355 + "num-traits",
3356 + "pxfm",
3357 +]
3358
3359 [[package]]
1811 -name = "matchers"
1812 -version = "0.2.0"
3360 +name = "nalgebra"
3361 +version = "0.33.3"
3362 source = "registry+https://github.com/rust-lang/crates.io-index"
1814 -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
3363 +checksum = "9d43ddcacf343185dfd6de2ee786d9e8b1c2301622afab66b6c73baf9882abfd"
3364 dependencies = [
1816 - "regex-automata",
3365 + "approx",
3366 + "matrixmultiply",
3367 + "num-complex",
3368 + "num-rational",
3369 + "num-traits",
3370 + "rand 0.8.6",
3371 + "rand_distr 0.4.3",
3372 + "simba",
3373 + "typenum",
3374 ]
3375
3376 [[package]]
1820 -name = "memchr"
1821 -version = "2.8.0"
3377 +name = "new_debug_unreachable"
3378 +version = "1.0.6"
3379 source = "registry+https://github.com/rust-lang/crates.io-index"
1823 -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
3380 +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
3381
3382 [[package]]
1826 -name = "memmap2"
1827 -version = "0.9.10"
3383 +name = "nibble_vec"
3384 +version = "0.1.0"
3385 source = "registry+https://github.com/rust-lang/crates.io-index"
1829 -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
3386 +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
3387 dependencies = [
1831 - "libc",
1832 - "stable_deref_trait",
3388 + "smallvec 1.15.1",
3389 ]
3390
3391 [[package]]
1836 -name = "metal"
1837 -version = "0.29.0"
3392 +name = "no_std_io2"
3393 +version = "0.9.3"
3394 source = "registry+https://github.com/rust-lang/crates.io-index"
1839 -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
3395 +checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550"
3396 dependencies = [
1841 - "bitflags 2.11.1",
1842 - "block",
1843 - "core-graphics-types",
1844 - "foreign-types",
1845 - "log",
1846 - "objc",
1847 - "paste",
3397 + "memchr",
3398 ]
3399
3400 [[package]]
1851 -name = "minimal-lexical"
1852 -version = "0.2.1"
3401 +name = "nohash-hasher"
3402 +version = "0.2.0"
3403 source = "registry+https://github.com/rust-lang/crates.io-index"
1854 -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
3404 +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
3405
3406 [[package]]
1857 -name = "mio"
1858 -version = "1.2.0"
3407 +name = "nom"
3408 +version = "7.1.3"
3409 source = "registry+https://github.com/rust-lang/crates.io-index"
1860 -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
3410 +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
3411 dependencies = [
1862 - "libc",
1863 - "log",
1864 - "wasi",
1865 - "windows-sys 0.61.2",
3412 + "memchr",
3413 + "minimal-lexical",
3414 ]
3415
3416 [[package]]
1869 -name = "monostate"
1870 -version = "0.1.18"
3417 +name = "nom"
3418 +version = "8.0.0"
3419 source = "registry+https://github.com/rust-lang/crates.io-index"
1872 -checksum = "3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67"
3420 +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
3421 dependencies = [
1874 - "monostate-impl",
1875 - "serde",
1876 - "serde_core",
3422 + "memchr",
3423 ]
3424
3425 [[package]]
1880 -name = "monostate-impl"
1881 -version = "0.1.18"
3426 +name = "noop_proc_macro"
3427 +version = "0.3.0"
3428 source = "registry+https://github.com/rust-lang/crates.io-index"
1883 -checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9"
1884 -dependencies = [
1885 - "proc-macro2",
1886 - "quote",
1887 - "syn 2.0.117",
1888 -]
3429 +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
3430
3431 [[package]]
1891 -name = "nom"
1892 -version = "7.1.3"
3432 +name = "ntapi"
3433 +version = "0.4.3"
3434 source = "registry+https://github.com/rust-lang/crates.io-index"
1894 -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
3435 +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae"
3436 dependencies = [
1896 - "memchr",
1897 - "minimal-lexical",
3437 + "winapi",
3438 ]
3439
3440 [[package]]
@@ -1903,7 +3443,7 @@ version = "0.50.3"
3443 source = "registry+https://github.com/rust-lang/crates.io-index"
3444 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
3445 dependencies = [
1906 - "windows-sys 0.59.0",
3446 + "windows-sys 0.61.2",
3447 ]
3448
3449 [[package]]
@@ -1940,6 +3480,23 @@ dependencies = [
3480 "num-traits",
3481 ]
3482
3483 +[[package]]
3484 +name = "num-conv"
3485 +version = "0.2.1"
3486 +source = "registry+https://github.com/rust-lang/crates.io-index"
3487 +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
3488 +
3489 +[[package]]
3490 +name = "num-derive"
3491 +version = "0.4.2"
3492 +source = "registry+https://github.com/rust-lang/crates.io-index"
3493 +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
3494 +dependencies = [
3495 + "proc-macro2",
3496 + "quote",
3497 + "syn 2.0.117",
3498 +]
3499 +
3500 [[package]]
3501 name = "num-integer"
3502 version = "0.1.46"
@@ -1991,6 +3548,12 @@ dependencies = [
3548 "libc",
3549 ]
3550
3551 +[[package]]
3552 +name = "number_prefix"
3553 +version = "0.4.0"
3554 +source = "registry+https://github.com/rust-lang/crates.io-index"
3555 +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
3556 +
3557 [[package]]
3558 name = "objc"
3559 version = "0.2.7"
@@ -2039,6 +3602,16 @@ dependencies = [
3602 "objc2-core-foundation",
3603 ]
3604
3605 +[[package]]
3606 +name = "objc2-io-kit"
3607 +version = "0.3.2"
3608 +source = "registry+https://github.com/rust-lang/crates.io-index"
3609 +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
3610 +dependencies = [
3611 + "libc",
3612 + "objc2-core-foundation",
3613 +]
3614 +
3615 [[package]]
3616 name = "objc2-metal"
3617 version = "0.3.2"
@@ -2072,15 +3645,16 @@ dependencies = [
3645 "anyhow",
3646 "candle-core",
3647 "candle-nn",
2075 - "crossterm",
2076 - "dirs",
3648 + "crossterm 0.28.1",
3649 + "dirs 5.0.1",
3650 "dotenvy",
3651 "futures",
3652 "half",
3653 "libc",
3654 "log",
3655 + "mistralrs",
3656 "ratatui",
2083 - "reqwest",
3657 + "reqwest 0.12.28",
3658 "serde",
3659 "serde_json",
3660 "sha2",
@@ -2114,6 +3688,30 @@ dependencies = [
3688 "pkg-config",
3689 ]
3690
3691 +[[package]]
3692 +name = "openai-harmony"
3693 +version = "0.0.8"
3694 +source = "registry+https://github.com/rust-lang/crates.io-index"
3695 +checksum = "e77e82af451fc95deeb728a40b84db8ee82d341e136c268de415123a560b9b72"
3696 +dependencies = [
3697 + "anyhow",
3698 + "base64 0.22.1",
3699 + "bstr",
3700 + "clap 4.6.1",
3701 + "fancy-regex 0.13.0",
3702 + "futures",
3703 + "image",
3704 + "regex",
3705 + "reqwest 0.12.28",
3706 + "rustc-hash 1.1.0",
3707 + "serde",
3708 + "serde_json",
3709 + "serde_with",
3710 + "sha1",
3711 + "sha2",
3712 + "thiserror 2.0.18",
3713 +]
3714 +
3715 [[package]]
3716 name = "openssl-probe"
3717 version = "0.2.1"
@@ -2126,6 +3724,24 @@ version = "0.2.0"
3724 source = "registry+https://github.com/rust-lang/crates.io-index"
3725 checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
3726
3727 +[[package]]
3728 +name = "ordered-float"
3729 +version = "5.3.0"
3730 +source = "registry+https://github.com/rust-lang/crates.io-index"
3731 +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e"
3732 +dependencies = [
3733 + "num-traits",
3734 +]
3735 +
3736 +[[package]]
3737 +name = "packedvec"
3738 +version = "1.2.5"
3739 +source = "registry+https://github.com/rust-lang/crates.io-index"
3740 +checksum = "a69e0a534dd2e6aefce319af62a0aa0066a76bdfcec0201dfe02df226bc9ec70"
3741 +dependencies = [
3742 + "num-traits",
3743 +]
3744 +
3745 [[package]]
3746 name = "parking_lot"
3747 version = "0.12.5"
@@ -2145,8 +3761,8 @@ dependencies = [
3761 "cfg-if",
3762 "libc",
3763 "redox_syscall",
2148 - "smallvec",
2149 - "windows-link",
3764 + "smallvec 1.15.1",
3765 + "windows-link 0.2.1",
3766 ]
3767
3768 [[package]]
@@ -2155,12 +3771,71 @@ version = "1.0.15"
3771 source = "registry+https://github.com/rust-lang/crates.io-index"
3772 checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
3773
3774 +[[package]]
3775 +name = "pastey"
3776 +version = "0.1.1"
3777 +source = "registry+https://github.com/rust-lang/crates.io-index"
3778 +checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec"
3779 +
3780 [[package]]
3781 name = "percent-encoding"
3782 version = "2.3.2"
3783 source = "registry+https://github.com/rust-lang/crates.io-index"
3784 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
3785
3786 +[[package]]
3787 +name = "phf"
3788 +version = "0.13.1"
3789 +source = "registry+https://github.com/rust-lang/crates.io-index"
3790 +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
3791 +dependencies = [
3792 + "phf_macros",
3793 + "phf_shared",
3794 + "serde",
3795 +]
3796 +
3797 +[[package]]
3798 +name = "phf_codegen"
3799 +version = "0.13.1"
3800 +source = "registry+https://github.com/rust-lang/crates.io-index"
3801 +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
3802 +dependencies = [
3803 + "phf_generator",
3804 + "phf_shared",
3805 +]
3806 +
3807 +[[package]]
3808 +name = "phf_generator"
3809 +version = "0.13.1"
3810 +source = "registry+https://github.com/rust-lang/crates.io-index"
3811 +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
3812 +dependencies = [
3813 + "fastrand",
3814 + "phf_shared",
3815 +]
3816 +
3817 +[[package]]
3818 +name = "phf_macros"
3819 +version = "0.13.1"
3820 +source = "registry+https://github.com/rust-lang/crates.io-index"
3821 +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
3822 +dependencies = [
3823 + "phf_generator",
3824 + "phf_shared",
3825 + "proc-macro2",
3826 + "quote",
3827 + "syn 2.0.117",
3828 +]
3829 +
3830 +[[package]]
3831 +name = "phf_shared"
3832 +version = "0.13.1"
3833 +source = "registry+https://github.com/rust-lang/crates.io-index"
3834 +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
3835 +dependencies = [
3836 + "siphasher",
3837 +]
3838 +
3839 [[package]]
3840 name = "pin-project-lite"
3841 version = "0.2.17"
@@ -2173,6 +3848,25 @@ version = "0.3.33"
3848 source = "registry+https://github.com/rust-lang/crates.io-index"
3849 checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
3850
3851 +[[package]]
3852 +name = "png"
3853 +version = "0.18.1"
3854 +source = "registry+https://github.com/rust-lang/crates.io-index"
3855 +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
3856 +dependencies = [
3857 + "bitflags 2.11.1",
3858 + "crc32fast",
3859 + "fdeflate",
3860 + "flate2",
3861 + "miniz_oxide",
3862 +]
3863 +
3864 +[[package]]
3865 +name = "portable-atomic"
3866 +version = "1.13.1"
3867 +source = "registry+https://github.com/rust-lang/crates.io-index"
3868 +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
3869 +
3870 [[package]]
3871 name = "potential_utf"
3872 version = "0.1.5"
@@ -2182,6 +3876,12 @@ dependencies = [
3876 "zerovec",
3877 ]
3878
3879 +[[package]]
3880 +name = "powerfmt"
3881 +version = "0.2.0"
3882 +source = "registry+https://github.com/rust-lang/crates.io-index"
3883 +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
3884 +
3885 [[package]]
3886 name = "ppv-lite86"
3887 version = "0.2.21"
@@ -2191,6 +3891,12 @@ dependencies = [
3891 "zerocopy",
3892 ]
3893
3894 +[[package]]
3895 +name = "precomputed-hash"
3896 +version = "0.1.1"
3897 +source = "registry+https://github.com/rust-lang/crates.io-index"
3898 +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
3899 +
3900 [[package]]
3901 name = "prettyplease"
3902 version = "0.2.37"
@@ -2201,6 +3907,15 @@ dependencies = [
3907 "syn 2.0.117",
3908 ]
3909
3910 +[[package]]
3911 +name = "primal-check"
3912 +version = "0.3.4"
3913 +source = "registry+https://github.com/rust-lang/crates.io-index"
3914 +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08"
3915 +dependencies = [
3916 + "num-integer",
3917 +]
3918 +
3919 [[package]]
3920 name = "proc-macro-error"
3921 version = "1.0.4"
@@ -2234,6 +3949,25 @@ dependencies = [
3949 "unicode-ident",
3950 ]
3951
3952 +[[package]]
3953 +name = "profiling"
3954 +version = "1.0.17"
3955 +source = "registry+https://github.com/rust-lang/crates.io-index"
3956 +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
3957 +dependencies = [
3958 + "profiling-procmacros",
3959 +]
3960 +
3961 +[[package]]
3962 +name = "profiling-procmacros"
3963 +version = "1.0.17"
3964 +source = "registry+https://github.com/rust-lang/crates.io-index"
3965 +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
3966 +dependencies = [
3967 + "quote",
3968 + "syn 2.0.117",
3969 +]
3970 +
3971 [[package]]
3972 name = "pulp"
3973 version = "0.21.5"
@@ -2255,21 +3989,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
3989 checksum = "2e205bb30d5b916c55e584c22201771bcf2bad9aabd5d4127f38387140c38632"
3990 dependencies = [
3991 "bytemuck",
2258 - "cfg-if",
2259 - "libm",
2260 - "num-complex",
2261 - "paste",
2262 - "pulp-wasm-simd-flag",
2263 - "raw-cpuid",
2264 - "reborrow",
2265 - "version_check",
3992 + "cfg-if",
3993 + "libm",
3994 + "num-complex",
3995 + "paste",
3996 + "pulp-wasm-simd-flag",
3997 + "raw-cpuid",
3998 + "reborrow",
3999 + "version_check",
4000 +]
4001 +
4002 +[[package]]
4003 +name = "pulp-wasm-simd-flag"
4004 +version = "0.1.0"
4005 +source = "registry+https://github.com/rust-lang/crates.io-index"
4006 +checksum = "40e24eee682d89fb193496edf918a7f407d30175b2e785fe057e4392dfd182e0"
4007 +
4008 +[[package]]
4009 +name = "pxfm"
4010 +version = "0.1.29"
4011 +source = "registry+https://github.com/rust-lang/crates.io-index"
4012 +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f"
4013 +
4014 +[[package]]
4015 +name = "qoi"
4016 +version = "0.4.1"
4017 +source = "registry+https://github.com/rust-lang/crates.io-index"
4018 +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
4019 +dependencies = [
4020 + "bytemuck",
4021 ]
4022
4023 [[package]]
2269 -name = "pulp-wasm-simd-flag"
2270 -version = "0.1.0"
4024 +name = "quick-error"
4025 +version = "2.0.1"
4026 source = "registry+https://github.com/rust-lang/crates.io-index"
2272 -checksum = "40e24eee682d89fb193496edf918a7f407d30175b2e785fe057e4392dfd182e0"
4027 +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
4028
4029 [[package]]
4030 name = "quinn"
@@ -2282,7 +4037,7 @@ dependencies = [
4037 "pin-project-lite",
4038 "quinn-proto",
4039 "quinn-udp",
2285 - "rustc-hash",
4040 + "rustc-hash 2.1.2",
4041 "rustls",
4042 "socket2",
4043 "thiserror 2.0.18",
@@ -2297,12 +4052,13 @@ version = "0.11.14"
4052 source = "registry+https://github.com/rust-lang/crates.io-index"
4053 checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
4054 dependencies = [
4055 + "aws-lc-rs",
4056 "bytes",
4057 "getrandom 0.3.4",
4058 "lru-slab",
4059 "rand 0.9.4",
4060 "ring",
2305 - "rustc-hash",
4061 + "rustc-hash 2.1.2",
4062 "rustls",
4063 "rustls-pki-types",
4064 "slab",
@@ -2323,7 +4079,7 @@ dependencies = [
4079 "once_cell",
4080 "socket2",
4081 "tracing",
2326 - "windows-sys 0.59.0",
4082 + "windows-sys 0.60.2",
4083 ]
4084
4085 [[package]]
@@ -2347,6 +4103,16 @@ version = "6.0.0"
4103 source = "registry+https://github.com/rust-lang/crates.io-index"
4104 checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
4105
4106 +[[package]]
4107 +name = "radix_trie"
4108 +version = "0.3.0"
4109 +source = "registry+https://github.com/rust-lang/crates.io-index"
4110 +checksum = "3b4431027dcd37fc2a73ef740b5f233aa805897935b8bce0195e41bbf9a3289a"
4111 +dependencies = [
4112 + "endian-type",
4113 + "nibble_vec",
4114 +]
4115 +
4116 [[package]]
4117 name = "rand"
4118 version = "0.8.6"
@@ -2406,6 +4172,16 @@ dependencies = [
4172 "getrandom 0.3.4",
4173 ]
4174
4175 +[[package]]
4176 +name = "rand_distr"
4177 +version = "0.4.3"
4178 +source = "registry+https://github.com/rust-lang/crates.io-index"
4179 +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
4180 +dependencies = [
4181 + "num-traits",
4182 + "rand 0.8.6",
4183 +]
4184 +
4185 [[package]]
4186 name = "rand_distr"
4187 version = "0.5.1"
@@ -2416,6 +4192,15 @@ dependencies = [
4192 "rand 0.9.4",
4193 ]
4194
4195 +[[package]]
4196 +name = "rand_isaac"
4197 +version = "0.4.0"
4198 +source = "registry+https://github.com/rust-lang/crates.io-index"
4199 +checksum = "3382fc9f0aad4f2e2a56b53d9133c8c810b4dbf21e7e370e24346161a5b2c7bd"
4200 +dependencies = [
4201 + "rand_core 0.9.5",
4202 +]
4203 +
4204 [[package]]
4205 name = "ratatui"
4206 version = "0.29.0"
@@ -2425,7 +4210,7 @@ dependencies = [
4210 "bitflags 2.11.1",
4211 "cassowary",
4212 "compact_str 0.8.1",
2428 - "crossterm",
4213 + "crossterm 0.28.1",
4214 "indoc",
4215 "instability",
4216 "itertools 0.13.0",
@@ -2437,6 +4222,56 @@ dependencies = [
4222 "unicode-width 0.2.0",
4223 ]
4224
4225 +[[package]]
4226 +name = "rav1e"
4227 +version = "0.8.1"
4228 +source = "registry+https://github.com/rust-lang/crates.io-index"
4229 +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b"
4230 +dependencies = [
4231 + "aligned-vec",
4232 + "arbitrary",
4233 + "arg_enum_proc_macro",
4234 + "arrayvec",
4235 + "av-scenechange",
4236 + "av1-grain",
4237 + "bitstream-io",
4238 + "built",
4239 + "cfg-if",
4240 + "interpolate_name",
4241 + "itertools 0.14.0",
4242 + "libc",
4243 + "libfuzzer-sys",
4244 + "log",
4245 + "maybe-rayon",
4246 + "new_debug_unreachable",
4247 + "noop_proc_macro",
4248 + "num-derive",
4249 + "num-traits",
4250 + "paste",
4251 + "profiling",
4252 + "rand 0.9.4",
4253 + "rand_chacha 0.9.0",
4254 + "simd_helpers",
4255 + "thiserror 2.0.18",
4256 + "v_frame",
4257 + "wasm-bindgen",
4258 +]
4259 +
4260 +[[package]]
4261 +name = "ravif"
4262 +version = "0.13.0"
4263 +source = "registry+https://github.com/rust-lang/crates.io-index"
4264 +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45"
4265 +dependencies = [
4266 + "avif-serialize",
4267 + "imgref",
4268 + "loop9",
4269 + "quick-error",
4270 + "rav1e",
4271 + "rayon",
4272 + "rgb",
4273 +]
4274 +
4275 [[package]]
4276 name = "raw-cpuid"
4277 version = "11.6.0"
@@ -2446,6 +4281,12 @@ dependencies = [
4281 "bitflags 2.11.1",
4282 ]
4283
4284 +[[package]]
4285 +name = "rawpointer"
4286 +version = "0.2.1"
4287 +source = "registry+https://github.com/rust-lang/crates.io-index"
4288 +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
4289 +
4290 [[package]]
4291 name = "rayon"
4292 version = "1.12.0"
@@ -2488,12 +4329,27 @@ dependencies = [
4329 "crossbeam-utils",
4330 ]
4331
4332 +[[package]]
4333 +name = "realfft"
4334 +version = "3.5.0"
4335 +source = "registry+https://github.com/rust-lang/crates.io-index"
4336 +checksum = "f821338fddb99d089116342c46e9f1fbf3828dba077674613e734e01d6ea8677"
4337 +dependencies = [
4338 + "rustfft",
4339 +]
4340 +
4341 [[package]]
4342 name = "reborrow"
4343 version = "0.5.5"
4344 source = "registry+https://github.com/rust-lang/crates.io-index"
4345 checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430"
4346
4347 +[[package]]
4348 +name = "recvmsg"
4349 +version = "1.0.0"
4350 +source = "registry+https://github.com/rust-lang/crates.io-index"
4351 +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175"
4352 +
4353 [[package]]
4354 name = "redox_syscall"
4355 version = "0.5.18"
@@ -2514,6 +4370,37 @@ dependencies = [
4370 "thiserror 1.0.69",
4371 ]
4372
4373 +[[package]]
4374 +name = "redox_users"
4375 +version = "0.5.2"
4376 +source = "registry+https://github.com/rust-lang/crates.io-index"
4377 +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
4378 +dependencies = [
4379 + "getrandom 0.2.17",
4380 + "libredox",
4381 + "thiserror 2.0.18",
4382 +]
4383 +
4384 +[[package]]
4385 +name = "ref-cast"
4386 +version = "1.0.25"
4387 +source = "registry+https://github.com/rust-lang/crates.io-index"
4388 +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
4389 +dependencies = [
4390 + "ref-cast-impl",
4391 +]
4392 +
4393 +[[package]]
4394 +name = "ref-cast-impl"
4395 +version = "1.0.25"
4396 +source = "registry+https://github.com/rust-lang/crates.io-index"
4397 +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
4398 +dependencies = [
4399 + "proc-macro2",
4400 + "quote",
4401 + "syn 2.0.117",
4402 +]
4403 +
4404 [[package]]
4405 name = "regex"
4406 version = "1.12.3"
@@ -2551,8 +4438,11 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
4438 dependencies = [
4439 "base64 0.22.1",
4440 "bytes",
4441 + "encoding_rs",
4442 + "futures-channel",
4443 "futures-core",
4444 "futures-util",
4445 + "h2",
4446 "http",
4447 "http-body",
4448 "http-body-util",
@@ -2561,6 +4451,8 @@ dependencies = [
4451 "hyper-util",
4452 "js-sys",
4453 "log",
4454 + "mime",
4455 + "mime_guess",
4456 "percent-encoding",
4457 "pin-project-lite",
4458 "quinn",
@@ -2580,11 +4472,61 @@ dependencies = [
4472 "url",
4473 "wasm-bindgen",
4474 "wasm-bindgen-futures",
2583 - "wasm-streams",
4475 + "wasm-streams 0.4.2",
4476 + "web-sys",
4477 + "webpki-roots 1.0.7",
4478 +]
4479 +
4480 +[[package]]
4481 +name = "reqwest"
4482 +version = "0.13.2"
4483 +source = "registry+https://github.com/rust-lang/crates.io-index"
4484 +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
4485 +dependencies = [
4486 + "base64 0.22.1",
4487 + "bytes",
4488 + "encoding_rs",
4489 + "futures-channel",
4490 + "futures-core",
4491 + "futures-util",
4492 + "h2",
4493 + "http",
4494 + "http-body",
4495 + "http-body-util",
4496 + "hyper",
4497 + "hyper-rustls",
4498 + "hyper-util",
4499 + "js-sys",
4500 + "log",
4501 + "mime",
4502 + "percent-encoding",
4503 + "pin-project-lite",
4504 + "quinn",
4505 + "rustls",
4506 + "rustls-pki-types",
4507 + "rustls-platform-verifier",
4508 + "serde",
4509 + "serde_json",
4510 + "sync_wrapper",
4511 + "tokio",
4512 + "tokio-rustls",
4513 + "tokio-util",
4514 + "tower",
4515 + "tower-http",
4516 + "tower-service",
4517 + "url",
4518 + "wasm-bindgen",
4519 + "wasm-bindgen-futures",
4520 + "wasm-streams 0.5.0",
4521 "web-sys",
2585 - "webpki-roots",
4522 ]
4523
4524 +[[package]]
4525 +name = "rgb"
4526 +version = "0.8.53"
4527 +source = "registry+https://github.com/rust-lang/crates.io-index"
4528 +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4"
4529 +
4530 [[package]]
4531 name = "ring"
4532 version = "0.17.14"
@@ -2599,12 +4541,73 @@ dependencies = [
4541 "windows-sys 0.52.0",
4542 ]
4543
4544 +[[package]]
4545 +name = "rubato"
4546 +version = "0.16.2"
4547 +source = "registry+https://github.com/rust-lang/crates.io-index"
4548 +checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1"
4549 +dependencies = [
4550 + "num-complex",
4551 + "num-integer",
4552 + "num-traits",
4553 + "realfft",
4554 +]
4555 +
4556 +[[package]]
4557 +name = "rust-mcp-schema"
4558 +version = "0.9.6"
4559 +source = "registry+https://github.com/rust-lang/crates.io-index"
4560 +checksum = "b1209aa7fb74fccafe6b2a649b15581fb328343427d85def865b0ad233fe1f74"
4561 +dependencies = [
4562 + "serde",
4563 + "serde_json",
4564 +]
4565 +
4566 +[[package]]
4567 +name = "rust-stemmers"
4568 +version = "1.2.0"
4569 +source = "registry+https://github.com/rust-lang/crates.io-index"
4570 +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54"
4571 +dependencies = [
4572 + "serde",
4573 + "serde_derive",
4574 +]
4575 +
4576 +[[package]]
4577 +name = "rustc-hash"
4578 +version = "1.1.0"
4579 +source = "registry+https://github.com/rust-lang/crates.io-index"
4580 +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
4581 +
4582 [[package]]
4583 name = "rustc-hash"
4584 version = "2.1.2"
4585 source = "registry+https://github.com/rust-lang/crates.io-index"
4586 checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
4587
4588 +[[package]]
4589 +name = "rustc_version"
4590 +version = "0.4.1"
4591 +source = "registry+https://github.com/rust-lang/crates.io-index"
4592 +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
4593 +dependencies = [
4594 + "semver",
4595 +]
4596 +
4597 +[[package]]
4598 +name = "rustfft"
4599 +version = "6.4.1"
4600 +source = "registry+https://github.com/rust-lang/crates.io-index"
4601 +checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89"
4602 +dependencies = [
4603 + "num-complex",
4604 + "num-integer",
4605 + "num-traits",
4606 + "primal-check",
4607 + "strength_reduce",
4608 + "transpose",
4609 +]
4610 +
4611 [[package]]
4612 name = "rustix"
4613 version = "0.38.44"
@@ -2614,16 +4617,31 @@ dependencies = [
4617 "bitflags 2.11.1",
4618 "errno",
4619 "libc",
2617 - "linux-raw-sys",
4620 + "linux-raw-sys 0.4.15",
4621 "windows-sys 0.59.0",
4622 ]
4623
4624 +[[package]]
4625 +name = "rustix"
4626 +version = "1.1.4"
4627 +source = "registry+https://github.com/rust-lang/crates.io-index"
4628 +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
4629 +dependencies = [
4630 + "bitflags 2.11.1",
4631 + "errno",
4632 + "libc",
4633 + "linux-raw-sys 0.12.1",
4634 + "windows-sys 0.61.2",
4635 +]
4636 +
4637 [[package]]
4638 name = "rustls"
2623 -version = "0.23.38"
4639 +version = "0.23.39"
4640 source = "registry+https://github.com/rust-lang/crates.io-index"
2625 -checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21"
4641 +checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e"
4642 dependencies = [
4643 + "aws-lc-rs",
4644 + "log",
4645 "once_cell",
4646 "ring",
4647 "rustls-pki-types",
@@ -2646,20 +4664,48 @@ dependencies = [
4664
4665 [[package]]
4666 name = "rustls-pki-types"
2649 -version = "1.14.0"
4667 +version = "1.14.1"
4668 source = "registry+https://github.com/rust-lang/crates.io-index"
2651 -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
4669 +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
4670 dependencies = [
4671 "web-time",
4672 "zeroize",
4673 ]
4674
4675 +[[package]]
4676 +name = "rustls-platform-verifier"
4677 +version = "0.6.2"
4678 +source = "registry+https://github.com/rust-lang/crates.io-index"
4679 +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
4680 +dependencies = [
4681 + "core-foundation 0.10.1",
4682 + "core-foundation-sys",
4683 + "jni",
4684 + "log",
4685 + "once_cell",
4686 + "rustls",
4687 + "rustls-native-certs",
4688 + "rustls-platform-verifier-android",
4689 + "rustls-webpki",
4690 + "security-framework",
4691 + "security-framework-sys",
4692 + "webpki-root-certs",
4693 + "windows-sys 0.61.2",
4694 +]
4695 +
4696 +[[package]]
4697 +name = "rustls-platform-verifier-android"
4698 +version = "0.1.1"
4699 +source = "registry+https://github.com/rust-lang/crates.io-index"
4700 +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
4701 +
4702 [[package]]
4703 name = "rustls-webpki"
4704 version = "0.103.13"
4705 source = "registry+https://github.com/rust-lang/crates.io-index"
4706 checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
4707 dependencies = [
4708 + "aws-lc-rs",
4709 "ring",
4710 "rustls-pki-types",
4711 "untrusted",
@@ -2677,6 +4723,15 @@ version = "1.0.23"
4723 source = "registry+https://github.com/rust-lang/crates.io-index"
4724 checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
4725
4726 +[[package]]
4727 +name = "safe_arch"
4728 +version = "0.7.4"
4729 +source = "registry+https://github.com/rust-lang/crates.io-index"
4730 +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
4731 +dependencies = [
4732 + "bytemuck",
4733 +]
4734 +
4735 [[package]]
4736 name = "safetensors"
4737 version = "0.4.5"
@@ -2707,6 +4762,17 @@ dependencies = [
4762 "winapi-util",
4763 ]
4764
4765 +[[package]]
4766 +name = "saphyr-parser-bw"
4767 +version = "0.0.605"
4768 +source = "registry+https://github.com/rust-lang/crates.io-index"
4769 +checksum = "5e1aee7486406df3541b5a657204a11be97175a467d77bc98e6d94a66289fb80"
4770 +dependencies = [
4771 + "arraydeque",
4772 + "smallvec 2.0.0-alpha.12",
4773 + "thiserror 2.0.18",
4774 +]
4775 +
4776 [[package]]
4777 name = "schannel"
4778 version = "0.1.29"
@@ -2716,6 +4782,43 @@ dependencies = [
4782 "windows-sys 0.61.2",
4783 ]
4784
4785 +[[package]]
4786 +name = "schemars"
4787 +version = "0.9.0"
4788 +source = "registry+https://github.com/rust-lang/crates.io-index"
4789 +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
4790 +dependencies = [
4791 + "dyn-clone",
4792 + "ref-cast",
4793 + "serde",
4794 + "serde_json",
4795 +]
4796 +
4797 +[[package]]
4798 +name = "schemars"
4799 +version = "1.2.1"
4800 +source = "registry+https://github.com/rust-lang/crates.io-index"
4801 +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
4802 +dependencies = [
4803 + "dyn-clone",
4804 + "ref-cast",
4805 + "schemars_derive",
4806 + "serde",
4807 + "serde_json",
4808 +]
4809 +
4810 +[[package]]
4811 +name = "schemars_derive"
4812 +version = "1.2.1"
4813 +source = "registry+https://github.com/rust-lang/crates.io-index"
4814 +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f"
4815 +dependencies = [
4816 + "proc-macro2",
4817 + "quote",
4818 + "serde_derive_internals",
4819 + "syn 2.0.117",
4820 +]
4821 +
4822 [[package]]
4823 name = "scoped-tls"
4824 version = "1.0.1"
@@ -2728,6 +4831,21 @@ version = "1.2.0"
4831 source = "registry+https://github.com/rust-lang/crates.io-index"
4832 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4833
4834 +[[package]]
4835 +name = "scraper"
4836 +version = "0.25.0"
4837 +source = "registry+https://github.com/rust-lang/crates.io-index"
4838 +checksum = "93cecd86d6259499c844440546d02f55f3e17bd286e529e48d1f9f67e92315cb"
4839 +dependencies = [
4840 + "cssparser",
4841 + "ego-tree",
4842 + "getopts",
4843 + "html5ever 0.36.1",
4844 + "precomputed-hash",
4845 + "selectors",
4846 + "tendril 0.4.3",
4847 +]
4848 +
4849 [[package]]
4850 name = "security-framework"
4851 version = "3.7.0"
@@ -2751,6 +4869,25 @@ dependencies = [
4869 "libc",
4870 ]
4871
4872 +[[package]]
4873 +name = "selectors"
4874 +version = "0.33.0"
4875 +source = "registry+https://github.com/rust-lang/crates.io-index"
4876 +checksum = "feef350c36147532e1b79ea5c1f3791373e61cbd9a6a2615413b3807bb164fb7"
4877 +dependencies = [
4878 + "bitflags 2.11.1",
4879 + "cssparser",
4880 + "derive_more",
4881 + "log",
4882 + "new_debug_unreachable",
4883 + "phf",
4884 + "phf_codegen",
4885 + "precomputed-hash",
4886 + "rustc-hash 2.1.2",
4887 + "servo_arc",
4888 + "smallvec 1.15.1",
4889 +]
4890 +
4891 [[package]]
4892 name = "semver"
4893 version = "1.0.28"
@@ -2773,6 +4910,35 @@ dependencies = [
4910 "serde_derive",
4911 ]
4912
4913 +[[package]]
4914 +name = "serde-big-array"
4915 +version = "0.5.1"
4916 +source = "registry+https://github.com/rust-lang/crates.io-index"
4917 +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f"
4918 +dependencies = [
4919 + "serde",
4920 +]
4921 +
4922 +[[package]]
4923 +name = "serde-saphyr"
4924 +version = "0.0.16"
4925 +source = "registry+https://github.com/rust-lang/crates.io-index"
4926 +checksum = "4db5a4a562bcc0017c34cd0efbabf447be783f00576a2a516947f884e6a7ed57"
4927 +dependencies = [
4928 + "ahash",
4929 + "annotate-snippets",
4930 + "base64 0.22.1",
4931 + "encoding_rs_io",
4932 + "nohash-hasher",
4933 + "num-traits",
4934 + "regex",
4935 + "saphyr-parser-bw",
4936 + "serde",
4937 + "serde_json",
4938 + "smallvec 2.0.0-alpha.12",
4939 + "zmij",
4940 +]
4941 +
4942 [[package]]
4943 name = "serde_core"
4944 version = "1.0.228"
@@ -2793,12 +4959,24 @@ dependencies = [
4959 "syn 2.0.117",
4960 ]
4961
4962 +[[package]]
4963 +name = "serde_derive_internals"
4964 +version = "0.29.1"
4965 +source = "registry+https://github.com/rust-lang/crates.io-index"
4966 +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
4967 +dependencies = [
4968 + "proc-macro2",
4969 + "quote",
4970 + "syn 2.0.117",
4971 +]
4972 +
4973 [[package]]
4974 name = "serde_json"
4975 version = "1.0.149"
4976 source = "registry+https://github.com/rust-lang/crates.io-index"
4977 checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
4978 dependencies = [
4979 + "indexmap 2.14.0",
4980 "itoa",
4981 "memchr",
4982 "serde",
@@ -2806,6 +4984,15 @@ dependencies = [
4984 "zmij",
4985 ]
4986
4987 +[[package]]
4988 +name = "serde_plain"
4989 +version = "1.0.2"
4990 +source = "registry+https://github.com/rust-lang/crates.io-index"
4991 +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50"
4992 +dependencies = [
4993 + "serde",
4994 +]
4995 +
4996 [[package]]
4997 name = "serde_repr"
4998 version = "0.1.20"
@@ -2817,6 +5004,15 @@ dependencies = [
5004 "syn 2.0.117",
5005 ]
5006
5007 +[[package]]
5008 +name = "serde_spanned"
5009 +version = "1.1.1"
5010 +source = "registry+https://github.com/rust-lang/crates.io-index"
5011 +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
5012 +dependencies = [
5013 + "serde_core",
5014 +]
5015 +
5016 [[package]]
5017 name = "serde_urlencoded"
5018 version = "0.7.1"
@@ -2829,6 +5025,57 @@ dependencies = [
5025 "serde",
5026 ]
5027
5028 +[[package]]
5029 +name = "serde_with"
5030 +version = "3.18.0"
5031 +source = "registry+https://github.com/rust-lang/crates.io-index"
5032 +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
5033 +dependencies = [
5034 + "base64 0.22.1",
5035 + "chrono",
5036 + "hex",
5037 + "indexmap 1.9.3",
5038 + "indexmap 2.14.0",
5039 + "schemars 0.9.0",
5040 + "schemars 1.2.1",
5041 + "serde_core",
5042 + "serde_json",
5043 + "serde_with_macros",
5044 + "time",
5045 +]
5046 +
5047 +[[package]]
5048 +name = "serde_with_macros"
5049 +version = "3.18.0"
5050 +source = "registry+https://github.com/rust-lang/crates.io-index"
5051 +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65"
5052 +dependencies = [
5053 + "darling 0.23.0",
5054 + "proc-macro2",
5055 + "quote",
5056 + "syn 2.0.117",
5057 +]
5058 +
5059 +[[package]]
5060 +name = "servo_arc"
5061 +version = "0.4.3"
5062 +source = "registry+https://github.com/rust-lang/crates.io-index"
5063 +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930"
5064 +dependencies = [
5065 + "stable_deref_trait",
5066 +]
5067 +
5068 +[[package]]
5069 +name = "sha1"
5070 +version = "0.10.6"
5071 +source = "registry+https://github.com/rust-lang/crates.io-index"
5072 +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
5073 +dependencies = [
5074 + "cfg-if",
5075 + "cpufeatures",
5076 + "digest",
5077 +]
5078 +
5079 [[package]]
5080 name = "sha2"
5081 version = "0.10.9"
@@ -2886,6 +5133,40 @@ dependencies = [
5133 "libc",
5134 ]
5135
5136 +[[package]]
5137 +name = "simba"
5138 +version = "0.9.1"
5139 +source = "registry+https://github.com/rust-lang/crates.io-index"
5140 +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95"
5141 +dependencies = [
5142 + "approx",
5143 + "num-complex",
5144 + "num-traits",
5145 + "paste",
5146 + "wide",
5147 +]
5148 +
5149 +[[package]]
5150 +name = "simd-adler32"
5151 +version = "0.3.9"
5152 +source = "registry+https://github.com/rust-lang/crates.io-index"
5153 +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
5154 +
5155 +[[package]]
5156 +name = "simd_helpers"
5157 +version = "0.1.0"
5158 +source = "registry+https://github.com/rust-lang/crates.io-index"
5159 +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
5160 +dependencies = [
5161 + "quote",
5162 +]
5163 +
5164 +[[package]]
5165 +name = "siphasher"
5166 +version = "1.0.2"
5167 +source = "registry+https://github.com/rust-lang/crates.io-index"
5168 +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
5169 +
5170 [[package]]
5171 name = "slab"
5172 version = "0.4.12"
@@ -2898,6 +5179,12 @@ version = "1.15.1"
5179 source = "registry+https://github.com/rust-lang/crates.io-index"
5180 checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
5181
5182 +[[package]]
5183 +name = "smallvec"
5184 +version = "2.0.0-alpha.12"
5185 +source = "registry+https://github.com/rust-lang/crates.io-index"
5186 +checksum = "ef784004ca8777809dcdad6ac37629f0a97caee4c685fcea805278d81dd8b857"
5187 +
5188 [[package]]
5189 name = "smbcloud-auth-sdk"
5190 version = "0.3.34"
@@ -2905,14 +5192,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
5192 checksum = "69ab2f5faa2a3c4588f073ce98e70ac74cfdbbab593c3e2f7d3cebf0b16de72a"
5193 dependencies = [
5194 "base64 0.22.1",
2908 - "reqwest",
5195 + "reqwest 0.12.28",
5196 "serde",
5197 "serde_json",
5198 "sha2",
5199 "smbcloud-model",
5200 "smbcloud-network",
5201 "url-builder",
2915 - "uuid",
5202 + "uuid 1.23.1",
5203 ]
5204
5205 [[package]]
@@ -2923,7 +5210,7 @@ checksum = "260fbaeaef9dcfe865159dd4b0980a94ebdd1cf2a09267e8a966b485d643ce21"
5210 dependencies = [
5211 "anyhow",
5212 "log",
2926 - "reqwest",
5213 + "reqwest 0.12.28",
5214 "serde",
5215 "serde_json",
5216 "smbcloud-network",
@@ -2957,7 +5244,7 @@ checksum = "1c236db19d4cea01cf48b584838fcc898745514c8e01c1c0cad0cba976cabefb"
5244 dependencies = [
5245 "clap 4.6.1",
5246 "log",
2960 - "reqwest",
5247 + "reqwest 0.12.28",
5248 "serde",
5249 "serde_json",
5250 "smbcloud-model",
@@ -2974,6 +5261,28 @@ dependencies = [
5261 "windows-sys 0.61.2",
5262 ]
5263
5264 +[[package]]
5265 +name = "socks"
5266 +version = "0.3.4"
5267 +source = "registry+https://github.com/rust-lang/crates.io-index"
5268 +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b"
5269 +dependencies = [
5270 + "byteorder",
5271 + "libc",
5272 + "winapi",
5273 +]
5274 +
5275 +[[package]]
5276 +name = "sparsevec"
5277 +version = "0.2.2"
5278 +source = "registry+https://github.com/rust-lang/crates.io-index"
5279 +checksum = "68b4a8ce3045f0fe173fb5ae3c6b7dcfbec02bfa650bb8618b2301f52af0134d"
5280 +dependencies = [
5281 + "num-traits",
5282 + "packedvec",
5283 + "vob",
5284 +]
5285 +
5286 [[package]]
5287 name = "spinners"
5288 version = "4.2.0"
@@ -2992,7 +5301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
5301 checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326"
5302 dependencies = [
5303 "base64 0.13.1",
2995 - "nom",
5304 + "nom 7.1.3",
5305 "serde",
5306 "unicode-segmentation",
5307 ]
@@ -3018,12 +5327,69 @@ version = "1.1.0"
5327 source = "registry+https://github.com/rust-lang/crates.io-index"
5328 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
5329
5330 +[[package]]
5331 +name = "statrs"
5332 +version = "0.18.0"
5333 +source = "registry+https://github.com/rust-lang/crates.io-index"
5334 +checksum = "2a3fe7c28c6512e766b0874335db33c94ad7b8f9054228ae1c2abd47ce7d335e"
5335 +dependencies = [
5336 + "approx",
5337 + "nalgebra",
5338 + "num-traits",
5339 + "rand 0.8.6",
5340 +]
5341 +
5342 +[[package]]
5343 +name = "stop-words"
5344 +version = "0.9.0"
5345 +source = "registry+https://github.com/rust-lang/crates.io-index"
5346 +checksum = "645a3d441ccf4bf47f2e4b7681461986681a6eeea9937d4c3bc9febd61d17c71"
5347 +dependencies = [
5348 + "serde_json",
5349 +]
5350 +
5351 +[[package]]
5352 +name = "strength_reduce"
5353 +version = "0.2.4"
5354 +source = "registry+https://github.com/rust-lang/crates.io-index"
5355 +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
5356 +
5357 +[[package]]
5358 +name = "string_cache"
5359 +version = "0.9.0"
5360 +source = "registry+https://github.com/rust-lang/crates.io-index"
5361 +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
5362 +dependencies = [
5363 + "new_debug_unreachable",
5364 + "parking_lot",
5365 + "phf_shared",
5366 + "precomputed-hash",
5367 +]
5368 +
5369 +[[package]]
5370 +name = "string_cache_codegen"
5371 +version = "0.6.1"
5372 +source = "registry+https://github.com/rust-lang/crates.io-index"
5373 +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
5374 +dependencies = [
5375 + "phf_generator",
5376 + "phf_shared",
5377 + "proc-macro2",
5378 + "quote",
5379 +]
5380 +
5381 [[package]]
5382 name = "strsim"
5383 version = "0.8.0"
5384 source = "registry+https://github.com/rust-lang/crates.io-index"
5385 checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
5386
5387 +[[package]]
5388 +name = "strsim"
5389 +version = "0.10.0"
5390 +source = "registry+https://github.com/rust-lang/crates.io-index"
5391 +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
5392 +
5393 [[package]]
5394 name = "strsim"
5395 version = "0.11.1"
@@ -3077,50 +5443,188 @@ name = "strum"
5443 version = "0.27.2"
5444 source = "registry+https://github.com/rust-lang/crates.io-index"
5445 checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
5446 +dependencies = [
5447 + "strum_macros 0.27.2",
5448 +]
5449
5450 [[package]]
5451 name = "strum_macros"
5452 version = "0.24.3"
5453 source = "registry+https://github.com/rust-lang/crates.io-index"
3085 -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
5454 +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
5455 +dependencies = [
5456 + "heck 0.4.1",
5457 + "proc-macro2",
5458 + "quote",
5459 + "rustversion",
5460 + "syn 1.0.109",
5461 +]
5462 +
5463 +[[package]]
5464 +name = "strum_macros"
5465 +version = "0.26.4"
5466 +source = "registry+https://github.com/rust-lang/crates.io-index"
5467 +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
5468 +dependencies = [
5469 + "heck 0.5.0",
5470 + "proc-macro2",
5471 + "quote",
5472 + "rustversion",
5473 + "syn 2.0.117",
5474 +]
5475 +
5476 +[[package]]
5477 +name = "strum_macros"
5478 +version = "0.27.2"
5479 +source = "registry+https://github.com/rust-lang/crates.io-index"
5480 +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
5481 +dependencies = [
5482 + "heck 0.5.0",
5483 + "proc-macro2",
5484 + "quote",
5485 + "syn 2.0.117",
5486 +]
5487 +
5488 +[[package]]
5489 +name = "subtle"
5490 +version = "2.6.1"
5491 +source = "registry+https://github.com/rust-lang/crates.io-index"
5492 +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
5493 +
5494 +[[package]]
5495 +name = "symphonia"
5496 +version = "0.5.5"
5497 +source = "registry+https://github.com/rust-lang/crates.io-index"
5498 +checksum = "5773a4c030a19d9bfaa090f49746ff35c75dfddfa700df7a5939d5e076a57039"
5499 +dependencies = [
5500 + "lazy_static",
5501 + "symphonia-bundle-flac",
5502 + "symphonia-bundle-mp3",
5503 + "symphonia-codec-pcm",
5504 + "symphonia-codec-vorbis",
5505 + "symphonia-core",
5506 + "symphonia-format-isomp4",
5507 + "symphonia-format-ogg",
5508 + "symphonia-format-riff",
5509 + "symphonia-metadata",
5510 +]
5511 +
5512 +[[package]]
5513 +name = "symphonia-bundle-flac"
5514 +version = "0.5.5"
5515 +source = "registry+https://github.com/rust-lang/crates.io-index"
5516 +checksum = "c91565e180aea25d9b80a910c546802526ffd0072d0b8974e3ebe59b686c9976"
5517 +dependencies = [
5518 + "log",
5519 + "symphonia-core",
5520 + "symphonia-metadata",
5521 + "symphonia-utils-xiph",
5522 +]
5523 +
5524 +[[package]]
5525 +name = "symphonia-bundle-mp3"
5526 +version = "0.5.5"
5527 +source = "registry+https://github.com/rust-lang/crates.io-index"
5528 +checksum = "4872dd6bb56bf5eac799e3e957aa1981086c3e613b27e0ac23b176054f7c57ed"
5529 +dependencies = [
5530 + "lazy_static",
5531 + "log",
5532 + "symphonia-core",
5533 + "symphonia-metadata",
5534 +]
5535 +
5536 +[[package]]
5537 +name = "symphonia-codec-pcm"
5538 +version = "0.5.5"
5539 +source = "registry+https://github.com/rust-lang/crates.io-index"
5540 +checksum = "4e89d716c01541ad3ebe7c91ce4c8d38a7cf266a3f7b2f090b108fb0cb031d95"
5541 +dependencies = [
5542 + "log",
5543 + "symphonia-core",
5544 +]
5545 +
5546 +[[package]]
5547 +name = "symphonia-codec-vorbis"
5548 +version = "0.5.5"
5549 +source = "registry+https://github.com/rust-lang/crates.io-index"
5550 +checksum = "f025837c309cd69ffef572750b4a2257b59552c5399a5e49707cc5b1b85d1c73"
5551 +dependencies = [
5552 + "log",
5553 + "symphonia-core",
5554 + "symphonia-utils-xiph",
5555 +]
5556 +
5557 +[[package]]
5558 +name = "symphonia-core"
5559 +version = "0.5.5"
5560 +source = "registry+https://github.com/rust-lang/crates.io-index"
5561 +checksum = "ea00cc4f79b7f6bb7ff87eddc065a1066f3a43fe1875979056672c9ef948c2af"
5562 +dependencies = [
5563 + "arrayvec",
5564 + "bitflags 1.3.2",
5565 + "bytemuck",
5566 + "lazy_static",
5567 + "log",
5568 +]
5569 +
5570 +[[package]]
5571 +name = "symphonia-format-isomp4"
5572 +version = "0.5.5"
5573 +source = "registry+https://github.com/rust-lang/crates.io-index"
5574 +checksum = "243739585d11f81daf8dac8d9f3d18cc7898f6c09a259675fc364b382c30e0a5"
5575 +dependencies = [
5576 + "encoding_rs",
5577 + "log",
5578 + "symphonia-core",
5579 + "symphonia-metadata",
5580 + "symphonia-utils-xiph",
5581 +]
5582 +
5583 +[[package]]
5584 +name = "symphonia-format-ogg"
5585 +version = "0.5.5"
5586 +source = "registry+https://github.com/rust-lang/crates.io-index"
5587 +checksum = "2b4955c67c1ed3aa8ae8428d04ca8397fbef6a19b2b051e73b5da8b1435639cb"
5588 dependencies = [
3087 - "heck 0.4.1",
3088 - "proc-macro2",
3089 - "quote",
3090 - "rustversion",
3091 - "syn 1.0.109",
5589 + "log",
5590 + "symphonia-core",
5591 + "symphonia-metadata",
5592 + "symphonia-utils-xiph",
5593 ]
5594
5595 [[package]]
3095 -name = "strum_macros"
3096 -version = "0.26.4"
5596 +name = "symphonia-format-riff"
5597 +version = "0.5.5"
5598 source = "registry+https://github.com/rust-lang/crates.io-index"
3098 -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
5599 +checksum = "c2d7c3df0e7d94efb68401d81906eae73c02b40d5ec1a141962c592d0f11a96f"
5600 dependencies = [
3100 - "heck 0.5.0",
3101 - "proc-macro2",
3102 - "quote",
3103 - "rustversion",
3104 - "syn 2.0.117",
5601 + "extended",
5602 + "log",
5603 + "symphonia-core",
5604 + "symphonia-metadata",
5605 ]
5606
5607 [[package]]
3108 -name = "strum_macros"
3109 -version = "0.27.2"
5608 +name = "symphonia-metadata"
5609 +version = "0.5.5"
5610 source = "registry+https://github.com/rust-lang/crates.io-index"
3111 -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
5611 +checksum = "36306ff42b9ffe6e5afc99d49e121e0bd62fe79b9db7b9681d48e29fa19e6b16"
5612 dependencies = [
3113 - "heck 0.5.0",
3114 - "proc-macro2",
3115 - "quote",
3116 - "syn 2.0.117",
5613 + "encoding_rs",
5614 + "lazy_static",
5615 + "log",
5616 + "symphonia-core",
5617 ]
5618
5619 [[package]]
3120 -name = "subtle"
3121 -version = "2.6.1"
5620 +name = "symphonia-utils-xiph"
5621 +version = "0.5.5"
5622 source = "registry+https://github.com/rust-lang/crates.io-index"
3123 -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
5623 +checksum = "ee27c85ab799a338446b68eec77abf42e1a6f1bb490656e121c6e27bfbab9f16"
5624 +dependencies = [
5625 + "symphonia-core",
5626 + "symphonia-metadata",
5627 +]
5628
5629 [[package]]
5630 name = "syn"
@@ -3178,6 +5682,72 @@ dependencies = [
5682 "walkdir",
5683 ]
5684
5685 +[[package]]
5686 +name = "sysinfo"
5687 +version = "0.36.1"
5688 +source = "registry+https://github.com/rust-lang/crates.io-index"
5689 +checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d"
5690 +dependencies = [
5691 + "libc",
5692 + "memchr",
5693 + "ntapi",
5694 + "objc2-core-foundation",
5695 + "objc2-io-kit",
5696 + "windows 0.61.3",
5697 +]
5698 +
5699 +[[package]]
5700 +name = "system-configuration"
5701 +version = "0.7.0"
5702 +source = "registry+https://github.com/rust-lang/crates.io-index"
5703 +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b"
5704 +dependencies = [
5705 + "bitflags 2.11.1",
5706 + "core-foundation 0.9.4",
5707 + "system-configuration-sys",
5708 +]
5709 +
5710 +[[package]]
5711 +name = "system-configuration-sys"
5712 +version = "0.6.0"
5713 +source = "registry+https://github.com/rust-lang/crates.io-index"
5714 +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
5715 +dependencies = [
5716 + "core-foundation-sys",
5717 + "libc",
5718 +]
5719 +
5720 +[[package]]
5721 +name = "tendril"
5722 +version = "0.4.3"
5723 +source = "registry+https://github.com/rust-lang/crates.io-index"
5724 +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
5725 +dependencies = [
5726 + "futf",
5727 + "mac",
5728 + "utf-8",
5729 +]
5730 +
5731 +[[package]]
5732 +name = "tendril"
5733 +version = "0.5.0"
5734 +source = "registry+https://github.com/rust-lang/crates.io-index"
5735 +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24"
5736 +dependencies = [
5737 + "new_debug_unreachable",
5738 + "utf-8",
5739 +]
5740 +
5741 +[[package]]
5742 +name = "terminal_size"
5743 +version = "0.4.4"
5744 +source = "registry+https://github.com/rust-lang/crates.io-index"
5745 +checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874"
5746 +dependencies = [
5747 + "rustix 1.1.4",
5748 + "windows-sys 0.61.2",
5749 +]
5750 +
5751 [[package]]
5752 name = "textwrap"
5753 version = "0.11.0"
@@ -3236,6 +5806,51 @@ dependencies = [
5806 "cfg-if",
5807 ]
5808
5809 +[[package]]
5810 +name = "tiff"
5811 +version = "0.11.3"
5812 +source = "registry+https://github.com/rust-lang/crates.io-index"
5813 +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52"
5814 +dependencies = [
5815 + "fax",
5816 + "flate2",
5817 + "half",
5818 + "quick-error",
5819 + "weezl",
5820 + "zune-jpeg",
5821 +]
5822 +
5823 +[[package]]
5824 +name = "time"
5825 +version = "0.3.47"
5826 +source = "registry+https://github.com/rust-lang/crates.io-index"
5827 +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
5828 +dependencies = [
5829 + "deranged",
5830 + "itoa",
5831 + "num-conv",
5832 + "powerfmt",
5833 + "serde_core",
5834 + "time-core",
5835 + "time-macros",
5836 +]
5837 +
5838 +[[package]]
5839 +name = "time-core"
5840 +version = "0.1.8"
5841 +source = "registry+https://github.com/rust-lang/crates.io-index"
5842 +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
5843 +
5844 +[[package]]
5845 +name = "time-macros"
5846 +version = "0.2.27"
5847 +source = "registry+https://github.com/rust-lang/crates.io-index"
5848 +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
5849 +dependencies = [
5850 + "num-conv",
5851 + "time-core",
5852 +]
5853 +
5854 [[package]]
5855 name = "tinystr"
5856 version = "0.8.3"
@@ -3292,6 +5907,39 @@ dependencies = [
5907 "unicode_categories",
5908 ]
5909
5910 +[[package]]
5911 +name = "tokenizers"
5912 +version = "0.21.4"
5913 +source = "registry+https://github.com/rust-lang/crates.io-index"
5914 +checksum = "a620b996116a59e184c2fa2dfd8251ea34a36d0a514758c6f966386bd2e03476"
5915 +dependencies = [
5916 + "ahash",
5917 + "aho-corasick",
5918 + "compact_str 0.9.0",
5919 + "dary_heap",
5920 + "derive_builder",
5921 + "esaxx-rs",
5922 + "fancy-regex 0.14.0",
5923 + "getrandom 0.3.4",
5924 + "itertools 0.14.0",
5925 + "log",
5926 + "macro_rules_attribute",
5927 + "monostate",
5928 + "paste",
5929 + "rand 0.9.4",
5930 + "rayon",
5931 + "rayon-cond 0.4.0",
5932 + "regex",
5933 + "regex-syntax",
5934 + "serde",
5935 + "serde_json",
5936 + "spm_precompiled",
5937 + "thiserror 2.0.18",
5938 + "unicode-normalization-alignments",
5939 + "unicode-segmentation",
5940 + "unicode_categories",
5941 +]
5942 +
5943 [[package]]
5944 name = "tokenizers"
5945 version = "0.22.2"
@@ -3334,7 +5982,9 @@ dependencies = [
5982 "bytes",
5983 "libc",
5984 "mio",
5985 + "parking_lot",
5986 "pin-project-lite",
5987 + "signal-hook-registry",
5988 "socket2",
5989 "tokio-macros",
5990 "windows-sys 0.61.2",
@@ -3351,6 +6001,16 @@ dependencies = [
6001 "syn 2.0.117",
6002 ]
6003
6004 +[[package]]
6005 +name = "tokio-rayon"
6006 +version = "2.1.0"
6007 +source = "registry+https://github.com/rust-lang/crates.io-index"
6008 +checksum = "7cf33a76e0b1dd03b778f83244137bd59887abf25c0e87bc3e7071105f457693"
6009 +dependencies = [
6010 + "rayon",
6011 + "tokio",
6012 +]
6013 +
6014 [[package]]
6015 name = "tokio-rustls"
6016 version = "0.26.4"
@@ -3361,6 +6021,18 @@ dependencies = [
6021 "tokio",
6022 ]
6023
6024 +[[package]]
6025 +name = "tokio-tungstenite"
6026 +version = "0.28.0"
6027 +source = "registry+https://github.com/rust-lang/crates.io-index"
6028 +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857"
6029 +dependencies = [
6030 + "futures-util",
6031 + "log",
6032 + "tokio",
6033 + "tungstenite",
6034 +]
6035 +
6036 [[package]]
6037 name = "tokio-util"
6038 version = "0.7.18"
@@ -3374,6 +6046,72 @@ dependencies = [
6046 "tokio",
6047 ]
6048
6049 +[[package]]
6050 +name = "toktrie"
6051 +version = "1.7.4"
6052 +source = "registry+https://github.com/rust-lang/crates.io-index"
6053 +checksum = "1c75b9915426b9b90377db7925ce2423c7d92541285beca96c40b4a82da828f3"
6054 +dependencies = [
6055 + "anyhow",
6056 + "bytemuck",
6057 + "bytemuck_derive",
6058 + "serde",
6059 + "serde_json",
6060 +]
6061 +
6062 +[[package]]
6063 +name = "toktrie_hf_tokenizers"
6064 +version = "1.7.4"
6065 +source = "registry+https://github.com/rust-lang/crates.io-index"
6066 +checksum = "c4e3a33fa3eee2f38bba2223d9f2f2b346fd2dc675716433d0fc18ff2fcbcbeb"
6067 +dependencies = [
6068 + "anyhow",
6069 + "log",
6070 + "serde",
6071 + "serde_json",
6072 + "tokenizers 0.21.4",
6073 + "toktrie",
6074 +]
6075 +
6076 +[[package]]
6077 +name = "toml"
6078 +version = "0.9.12+spec-1.1.0"
6079 +source = "registry+https://github.com/rust-lang/crates.io-index"
6080 +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
6081 +dependencies = [
6082 + "indexmap 2.14.0",
6083 + "serde_core",
6084 + "serde_spanned",
6085 + "toml_datetime",
6086 + "toml_parser",
6087 + "toml_writer",
6088 + "winnow 0.7.15",
6089 +]
6090 +
6091 +[[package]]
6092 +name = "toml_datetime"
6093 +version = "0.7.5+spec-1.1.0"
6094 +source = "registry+https://github.com/rust-lang/crates.io-index"
6095 +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
6096 +dependencies = [
6097 + "serde_core",
6098 +]
6099 +
6100 +[[package]]
6101 +name = "toml_parser"
6102 +version = "1.1.2+spec-1.1.0"
6103 +source = "registry+https://github.com/rust-lang/crates.io-index"
6104 +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
6105 +dependencies = [
6106 + "winnow 1.0.2",
6107 +]
6108 +
6109 +[[package]]
6110 +name = "toml_writer"
6111 +version = "1.1.1+spec-1.1.0"
6112 +source = "registry+https://github.com/rust-lang/crates.io-index"
6113 +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
6114 +
6115 [[package]]
6116 name = "tower"
6117 version = "0.5.3"
@@ -3419,6 +6157,16 @@ version = "0.3.3"
6157 source = "registry+https://github.com/rust-lang/crates.io-index"
6158 checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
6159
6160 +[[package]]
6161 +name = "tqdm"
6162 +version = "0.8.0"
6163 +source = "git+https://github.com/setoelkahfi/tqdm?branch=deps%2Fbump-crossterm#41e4182829136e6dadbdd1c36af824d19219147a"
6164 +dependencies = [
6165 + "anyhow",
6166 + "crossterm 0.29.0",
6167 + "once_cell",
6168 +]
6169 +
6170 [[package]]
6171 name = "tracing"
6172 version = "0.1.44"
@@ -3473,13 +6221,23 @@ dependencies = [
6221 "once_cell",
6222 "regex-automata",
6223 "sharded-slab",
3476 - "smallvec",
6224 + "smallvec 1.15.1",
6225 "thread_local",
6226 "tracing",
6227 "tracing-core",
6228 "tracing-log",
6229 ]
6230
6231 +[[package]]
6232 +name = "transpose"
6233 +version = "0.2.3"
6234 +source = "registry+https://github.com/rust-lang/crates.io-index"
6235 +checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e"
6236 +dependencies = [
6237 + "num-integer",
6238 + "strength_reduce",
6239 +]
6240 +
6241 [[package]]
6242 name = "try-lock"
6243 version = "0.2.5"
@@ -3492,7 +6250,7 @@ version = "2.2.1"
6250 source = "registry+https://github.com/rust-lang/crates.io-index"
6251 checksum = "4fc20a25899c5ae43735253244214f3d5eb75dd28d9cc8491732294a985adb8c"
6252 dependencies = [
3495 - "convert_case",
6253 + "convert_case 0.6.0",
6254 "proc-macro2",
6255 "quote",
6256 "state",
@@ -3508,6 +6266,23 @@ version = "0.1.0"
6266 source = "registry+https://github.com/rust-lang/crates.io-index"
6267 checksum = "8acc9e35a3072d9ea375093f321b3738ea3ac4fdebc18d2789b01581e5c2e4ae"
6268
6269 +[[package]]
6270 +name = "tungstenite"
6271 +version = "0.28.0"
6272 +source = "registry+https://github.com/rust-lang/crates.io-index"
6273 +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442"
6274 +dependencies = [
6275 + "bytes",
6276 + "data-encoding",
6277 + "http",
6278 + "httparse",
6279 + "log",
6280 + "rand 0.9.4",
6281 + "sha1",
6282 + "thiserror 2.0.18",
6283 + "utf-8",
6284 +]
6285 +
6286 [[package]]
6287 name = "typed-path"
6288 version = "0.12.3"
@@ -3555,6 +6330,18 @@ dependencies = [
6330 "ug",
6331 ]
6332
6333 +[[package]]
6334 +name = "unchecked-index"
6335 +version = "0.2.2"
6336 +source = "registry+https://github.com/rust-lang/crates.io-index"
6337 +checksum = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c"
6338 +
6339 +[[package]]
6340 +name = "unicase"
6341 +version = "2.9.0"
6342 +source = "registry+https://github.com/rust-lang/crates.io-index"
6343 +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
6344 +
6345 [[package]]
6346 name = "unicode-ident"
6347 version = "1.0.24"
@@ -3567,7 +6354,7 @@ version = "0.1.12"
6354 source = "registry+https://github.com/rust-lang/crates.io-index"
6355 checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de"
6356 dependencies = [
3570 - "smallvec",
6357 + "smallvec 1.15.1",
6358 ]
6359
6360 [[package]]
@@ -3611,12 +6398,37 @@ version = "0.1.1"
6398 source = "registry+https://github.com/rust-lang/crates.io-index"
6399 checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
6400
6401 +[[package]]
6402 +name = "unit-prefix"
6403 +version = "0.5.2"
6404 +source = "registry+https://github.com/rust-lang/crates.io-index"
6405 +checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3"
6406 +
6407 [[package]]
6408 name = "untrusted"
6409 version = "0.9.0"
6410 source = "registry+https://github.com/rust-lang/crates.io-index"
6411 checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
6412
6413 +[[package]]
6414 +name = "ureq"
6415 +version = "2.12.1"
6416 +source = "registry+https://github.com/rust-lang/crates.io-index"
6417 +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
6418 +dependencies = [
6419 + "base64 0.22.1",
6420 + "flate2",
6421 + "log",
6422 + "once_cell",
6423 + "rustls",
6424 + "rustls-pki-types",
6425 + "serde",
6426 + "serde_json",
6427 + "socks",
6428 + "url",
6429 + "webpki-roots 0.26.11",
6430 +]
6431 +
6432 [[package]]
6433 name = "url"
6434 version = "2.5.8"
@@ -3635,6 +6447,18 @@ version = "0.1.1"
6447 source = "registry+https://github.com/rust-lang/crates.io-index"
6448 checksum = "6c560d19163937c53680c515b82a9311c5a796691c67890b8ad579423123e194"
6449
6450 +[[package]]
6451 +name = "urlencoding"
6452 +version = "2.1.3"
6453 +source = "registry+https://github.com/rust-lang/crates.io-index"
6454 +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
6455 +
6456 +[[package]]
6457 +name = "utf-8"
6458 +version = "0.7.6"
6459 +source = "registry+https://github.com/rust-lang/crates.io-index"
6460 +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
6461 +
6462 [[package]]
6463 name = "utf8_iter"
6464 version = "1.0.4"
@@ -3642,10 +6466,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
6466 checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
6467
6468 [[package]]
3645 -name = "utf8parse"
3646 -version = "0.2.2"
6469 +name = "utf8parse"
6470 +version = "0.2.2"
6471 +source = "registry+https://github.com/rust-lang/crates.io-index"
6472 +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
6473 +
6474 +[[package]]
6475 +name = "utoipa"
6476 +version = "5.4.0"
6477 +source = "registry+https://github.com/rust-lang/crates.io-index"
6478 +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993"
6479 +dependencies = [
6480 + "indexmap 2.14.0",
6481 + "serde",
6482 + "serde_json",
6483 + "utoipa-gen",
6484 +]
6485 +
6486 +[[package]]
6487 +name = "utoipa-gen"
6488 +version = "5.4.0"
6489 +source = "registry+https://github.com/rust-lang/crates.io-index"
6490 +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b"
6491 +dependencies = [
6492 + "proc-macro2",
6493 + "quote",
6494 + "syn 2.0.117",
6495 +]
6496 +
6497 +[[package]]
6498 +name = "uuid"
6499 +version = "0.8.2"
6500 source = "registry+https://github.com/rust-lang/crates.io-index"
3648 -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
6501 +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
6502 +dependencies = [
6503 + "getrandom 0.2.17",
6504 +]
6505
6506 [[package]]
6507 name = "uuid"
@@ -3655,6 +6511,18 @@ checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
6511 dependencies = [
6512 "getrandom 0.4.2",
6513 "js-sys",
6514 + "serde_core",
6515 + "wasm-bindgen",
6516 +]
6517 +
6518 +[[package]]
6519 +name = "v_frame"
6520 +version = "0.3.9"
6521 +source = "registry+https://github.com/rust-lang/crates.io-index"
6522 +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2"
6523 +dependencies = [
6524 + "aligned-vec",
6525 + "num-traits",
6526 "wasm-bindgen",
6527 ]
6528
@@ -3664,6 +6532,20 @@ version = "0.1.1"
6532 source = "registry+https://github.com/rust-lang/crates.io-index"
6533 checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
6534
6535 +[[package]]
6536 +name = "variantly"
6537 +version = "0.4.0"
6538 +source = "registry+https://github.com/rust-lang/crates.io-index"
6539 +checksum = "72a332341ba79a179d9e9b33c0d72fbf3dc2c80e1be79416401a08d2b820ef56"
6540 +dependencies = [
6541 + "Inflector",
6542 + "darling 0.11.0",
6543 + "proc-macro2",
6544 + "quote",
6545 + "syn 1.0.109",
6546 + "uuid 0.8.2",
6547 +]
6548 +
6549 [[package]]
6550 name = "vec_map"
6551 version = "0.8.2"
@@ -3676,6 +6558,15 @@ version = "0.9.5"
6558 source = "registry+https://github.com/rust-lang/crates.io-index"
6559 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
6560
6561 +[[package]]
6562 +name = "vob"
6563 +version = "3.0.6"
6564 +source = "registry+https://github.com/rust-lang/crates.io-index"
6565 +checksum = "bc936b5a7202a703aeaf7ce05e7931db2e0c8126813f97db3e9e06d867b0bb38"
6566 +dependencies = [
6567 + "num-traits",
6568 +]
6569 +
6570 [[package]]
6571 name = "walkdir"
6572 version = "2.5.0"
@@ -3791,7 +6682,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
6682 checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
6683 dependencies = [
6684 "anyhow",
3794 - "indexmap",
6685 + "indexmap 2.14.0",
6686 "wasm-encoder",
6687 "wasmparser",
6688 ]
@@ -3809,6 +6700,19 @@ dependencies = [
6700 "web-sys",
6701 ]
6702
6703 +[[package]]
6704 +name = "wasm-streams"
6705 +version = "0.5.0"
6706 +source = "registry+https://github.com/rust-lang/crates.io-index"
6707 +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb"
6708 +dependencies = [
6709 + "futures-util",
6710 + "js-sys",
6711 + "wasm-bindgen",
6712 + "wasm-bindgen-futures",
6713 + "web-sys",
6714 +]
6715 +
6716 [[package]]
6717 name = "wasmparser"
6718 version = "0.244.0"
@@ -3817,7 +6721,7 @@ checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
6721 dependencies = [
6722 "bitflags 2.11.1",
6723 "hashbrown 0.15.5",
3820 - "indexmap",
6724 + "indexmap 2.14.0",
6725 "semver",
6726 ]
6727
@@ -3841,6 +6745,36 @@ dependencies = [
6745 "wasm-bindgen",
6746 ]
6747
6748 +[[package]]
6749 +name = "web_atoms"
6750 +version = "0.2.4"
6751 +source = "registry+https://github.com/rust-lang/crates.io-index"
6752 +checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538"
6753 +dependencies = [
6754 + "phf",
6755 + "phf_codegen",
6756 + "string_cache",
6757 + "string_cache_codegen",
6758 +]
6759 +
6760 +[[package]]
6761 +name = "webpki-root-certs"
6762 +version = "1.0.7"
6763 +source = "registry+https://github.com/rust-lang/crates.io-index"
6764 +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c"
6765 +dependencies = [
6766 + "rustls-pki-types",
6767 +]
6768 +
6769 +[[package]]
6770 +name = "webpki-roots"
6771 +version = "0.26.11"
6772 +source = "registry+https://github.com/rust-lang/crates.io-index"
6773 +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
6774 +dependencies = [
6775 + "webpki-roots 1.0.7",
6776 +]
6777 +
6778 [[package]]
6779 name = "webpki-roots"
6780 version = "1.0.7"
@@ -3850,6 +6784,28 @@ dependencies = [
6784 "rustls-pki-types",
6785 ]
6786
6787 +[[package]]
6788 +name = "weezl"
6789 +version = "0.1.12"
6790 +source = "registry+https://github.com/rust-lang/crates.io-index"
6791 +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
6792 +
6793 +[[package]]
6794 +name = "wide"
6795 +version = "0.7.33"
6796 +source = "registry+https://github.com/rust-lang/crates.io-index"
6797 +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03"
6798 +dependencies = [
6799 + "bytemuck",
6800 + "safe_arch",
6801 +]
6802 +
6803 +[[package]]
6804 +name = "widestring"
6805 +version = "1.2.1"
6806 +source = "registry+https://github.com/rust-lang/crates.io-index"
6807 +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
6808 +
6809 [[package]]
6810 name = "winapi"
6811 version = "0.3.9"
@@ -3872,7 +6828,7 @@ version = "0.1.11"
6828 source = "registry+https://github.com/rust-lang/crates.io-index"
6829 checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
6830 dependencies = [
3875 - "windows-sys 0.48.0",
6831 + "windows-sys 0.61.2",
6832 ]
6833
6834 [[package]]
@@ -3890,6 +6846,41 @@ dependencies = [
6846 "windows-targets 0.48.5",
6847 ]
6848
6849 +[[package]]
6850 +name = "windows"
6851 +version = "0.61.3"
6852 +source = "registry+https://github.com/rust-lang/crates.io-index"
6853 +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
6854 +dependencies = [
6855 + "windows-collections",
6856 + "windows-core 0.61.2",
6857 + "windows-future",
6858 + "windows-link 0.1.3",
6859 + "windows-numerics",
6860 +]
6861 +
6862 +[[package]]
6863 +name = "windows-collections"
6864 +version = "0.2.0"
6865 +source = "registry+https://github.com/rust-lang/crates.io-index"
6866 +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
6867 +dependencies = [
6868 + "windows-core 0.61.2",
6869 +]
6870 +
6871 +[[package]]
6872 +name = "windows-core"
6873 +version = "0.61.2"
6874 +source = "registry+https://github.com/rust-lang/crates.io-index"
6875 +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
6876 +dependencies = [
6877 + "windows-implement",
6878 + "windows-interface",
6879 + "windows-link 0.1.3",
6880 + "windows-result 0.3.4",
6881 + "windows-strings 0.4.2",
6882 +]
6883 +
6884 [[package]]
6885 name = "windows-core"
6886 version = "0.62.2"
@@ -3898,9 +6889,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
6889 dependencies = [
6890 "windows-implement",
6891 "windows-interface",
3901 - "windows-link",
3902 - "windows-result",
3903 - "windows-strings",
6892 + "windows-link 0.2.1",
6893 + "windows-result 0.4.1",
6894 + "windows-strings 0.5.1",
6895 +]
6896 +
6897 +[[package]]
6898 +name = "windows-future"
6899 +version = "0.2.1"
6900 +source = "registry+https://github.com/rust-lang/crates.io-index"
6901 +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
6902 +dependencies = [
6903 + "windows-core 0.61.2",
6904 + "windows-link 0.1.3",
6905 + "windows-threading",
6906 ]
6907
6908 [[package]]
@@ -3925,19 +6927,64 @@ dependencies = [
6927 "syn 2.0.117",
6928 ]
6929
6930 +[[package]]
6931 +name = "windows-link"
6932 +version = "0.1.3"
6933 +source = "registry+https://github.com/rust-lang/crates.io-index"
6934 +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
6935 +
6936 [[package]]
6937 name = "windows-link"
6938 version = "0.2.1"
6939 source = "registry+https://github.com/rust-lang/crates.io-index"
6940 checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
6941
6942 +[[package]]
6943 +name = "windows-numerics"
6944 +version = "0.2.0"
6945 +source = "registry+https://github.com/rust-lang/crates.io-index"
6946 +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
6947 +dependencies = [
6948 + "windows-core 0.61.2",
6949 + "windows-link 0.1.3",
6950 +]
6951 +
6952 +[[package]]
6953 +name = "windows-registry"
6954 +version = "0.6.1"
6955 +source = "registry+https://github.com/rust-lang/crates.io-index"
6956 +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
6957 +dependencies = [
6958 + "windows-link 0.2.1",
6959 + "windows-result 0.4.1",
6960 + "windows-strings 0.5.1",
6961 +]
6962 +
6963 +[[package]]
6964 +name = "windows-result"
6965 +version = "0.3.4"
6966 +source = "registry+https://github.com/rust-lang/crates.io-index"
6967 +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
6968 +dependencies = [
6969 + "windows-link 0.1.3",
6970 +]
6971 +
6972 [[package]]
6973 name = "windows-result"
6974 version = "0.4.1"
6975 source = "registry+https://github.com/rust-lang/crates.io-index"
6976 checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
6977 dependencies = [
3940 - "windows-link",
6978 + "windows-link 0.2.1",
6979 +]
6980 +
6981 +[[package]]
6982 +name = "windows-strings"
6983 +version = "0.4.2"
6984 +source = "registry+https://github.com/rust-lang/crates.io-index"
6985 +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
6986 +dependencies = [
6987 + "windows-link 0.1.3",
6988 ]
6989
6990 [[package]]
@@ -3946,7 +6993,16 @@ version = "0.5.1"
6993 source = "registry+https://github.com/rust-lang/crates.io-index"
6994 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
6995 dependencies = [
3949 - "windows-link",
6996 + "windows-link 0.2.1",
6997 +]
6998 +
6999 +[[package]]
7000 +name = "windows-sys"
7001 +version = "0.45.0"
7002 +source = "registry+https://github.com/rust-lang/crates.io-index"
7003 +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
7004 +dependencies = [
7005 + "windows-targets 0.42.2",
7006 ]
7007
7008 [[package]]
@@ -3976,13 +7032,37 @@ dependencies = [
7032 "windows-targets 0.52.6",
7033 ]
7034
7035 +[[package]]
7036 +name = "windows-sys"
7037 +version = "0.60.2"
7038 +source = "registry+https://github.com/rust-lang/crates.io-index"
7039 +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
7040 +dependencies = [
7041 + "windows-targets 0.53.5",
7042 +]
7043 +
7044 [[package]]
7045 name = "windows-sys"
7046 version = "0.61.2"
7047 source = "registry+https://github.com/rust-lang/crates.io-index"
7048 checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
7049 dependencies = [
3985 - "windows-link",
7050 + "windows-link 0.2.1",
7051 +]
7052 +
7053 +[[package]]
7054 +name = "windows-targets"
7055 +version = "0.42.2"
7056 +source = "registry+https://github.com/rust-lang/crates.io-index"
7057 +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
7058 +dependencies = [
7059 + "windows_aarch64_gnullvm 0.42.2",
7060 + "windows_aarch64_msvc 0.42.2",
7061 + "windows_i686_gnu 0.42.2",
7062 + "windows_i686_msvc 0.42.2",
7063 + "windows_x86_64_gnu 0.42.2",
7064 + "windows_x86_64_gnullvm 0.42.2",
7065 + "windows_x86_64_msvc 0.42.2",
7066 ]
7067
7068 [[package]]
@@ -4009,13 +7089,45 @@ dependencies = [
7089 "windows_aarch64_gnullvm 0.52.6",
7090 "windows_aarch64_msvc 0.52.6",
7091 "windows_i686_gnu 0.52.6",
4012 - "windows_i686_gnullvm",
7092 + "windows_i686_gnullvm 0.52.6",
7093 "windows_i686_msvc 0.52.6",
7094 "windows_x86_64_gnu 0.52.6",
7095 "windows_x86_64_gnullvm 0.52.6",
7096 "windows_x86_64_msvc 0.52.6",
7097 ]
7098
7099 +[[package]]
7100 +name = "windows-targets"
7101 +version = "0.53.5"
7102 +source = "registry+https://github.com/rust-lang/crates.io-index"
7103 +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
7104 +dependencies = [
7105 + "windows-link 0.2.1",
7106 + "windows_aarch64_gnullvm 0.53.1",
7107 + "windows_aarch64_msvc 0.53.1",
7108 + "windows_i686_gnu 0.53.1",
7109 + "windows_i686_gnullvm 0.53.1",
7110 + "windows_i686_msvc 0.53.1",
7111 + "windows_x86_64_gnu 0.53.1",
7112 + "windows_x86_64_gnullvm 0.53.1",
7113 + "windows_x86_64_msvc 0.53.1",
7114 +]
7115 +
7116 +[[package]]
7117 +name = "windows-threading"
7118 +version = "0.1.0"
7119 +source = "registry+https://github.com/rust-lang/crates.io-index"
7120 +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
7121 +dependencies = [
7122 + "windows-link 0.1.3",
7123 +]
7124 +
7125 +[[package]]
7126 +name = "windows_aarch64_gnullvm"
7127 +version = "0.42.2"
7128 +source = "registry+https://github.com/rust-lang/crates.io-index"
7129 +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
7130 +
7131 [[package]]
7132 name = "windows_aarch64_gnullvm"
7133 version = "0.48.5"
@@ -4028,6 +7140,18 @@ version = "0.52.6"
7140 source = "registry+https://github.com/rust-lang/crates.io-index"
7141 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
7142
7143 +[[package]]
7144 +name = "windows_aarch64_gnullvm"
7145 +version = "0.53.1"
7146 +source = "registry+https://github.com/rust-lang/crates.io-index"
7147 +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
7148 +
7149 +[[package]]
7150 +name = "windows_aarch64_msvc"
7151 +version = "0.42.2"
7152 +source = "registry+https://github.com/rust-lang/crates.io-index"
7153 +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
7154 +
7155 [[package]]
7156 name = "windows_aarch64_msvc"
7157 version = "0.48.5"
@@ -4040,6 +7164,18 @@ version = "0.52.6"
7164 source = "registry+https://github.com/rust-lang/crates.io-index"
7165 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
7166
7167 +[[package]]
7168 +name = "windows_aarch64_msvc"
7169 +version = "0.53.1"
7170 +source = "registry+https://github.com/rust-lang/crates.io-index"
7171 +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
7172 +
7173 +[[package]]
7174 +name = "windows_i686_gnu"
7175 +version = "0.42.2"
7176 +source = "registry+https://github.com/rust-lang/crates.io-index"
7177 +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
7178 +
7179 [[package]]
7180 name = "windows_i686_gnu"
7181 version = "0.48.5"
@@ -4052,12 +7188,30 @@ version = "0.52.6"
7188 source = "registry+https://github.com/rust-lang/crates.io-index"
7189 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
7190
7191 +[[package]]
7192 +name = "windows_i686_gnu"
7193 +version = "0.53.1"
7194 +source = "registry+https://github.com/rust-lang/crates.io-index"
7195 +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
7196 +
7197 [[package]]
7198 name = "windows_i686_gnullvm"
7199 version = "0.52.6"
7200 source = "registry+https://github.com/rust-lang/crates.io-index"
7201 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
7202
7203 +[[package]]
7204 +name = "windows_i686_gnullvm"
7205 +version = "0.53.1"
7206 +source = "registry+https://github.com/rust-lang/crates.io-index"
7207 +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
7208 +
7209 +[[package]]
7210 +name = "windows_i686_msvc"
7211 +version = "0.42.2"
7212 +source = "registry+https://github.com/rust-lang/crates.io-index"
7213 +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
7214 +
7215 [[package]]
7216 name = "windows_i686_msvc"
7217 version = "0.48.5"
@@ -4070,6 +7224,18 @@ version = "0.52.6"
7224 source = "registry+https://github.com/rust-lang/crates.io-index"
7225 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
7226
7227 +[[package]]
7228 +name = "windows_i686_msvc"
7229 +version = "0.53.1"
7230 +source = "registry+https://github.com/rust-lang/crates.io-index"
7231 +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
7232 +
7233 +[[package]]
7234 +name = "windows_x86_64_gnu"
7235 +version = "0.42.2"
7236 +source = "registry+https://github.com/rust-lang/crates.io-index"
7237 +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
7238 +
7239 [[package]]
7240 name = "windows_x86_64_gnu"
7241 version = "0.48.5"
@@ -4082,6 +7248,18 @@ version = "0.52.6"
7248 source = "registry+https://github.com/rust-lang/crates.io-index"
7249 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
7250
7251 +[[package]]
7252 +name = "windows_x86_64_gnu"
7253 +version = "0.53.1"
7254 +source = "registry+https://github.com/rust-lang/crates.io-index"
7255 +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
7256 +
7257 +[[package]]
7258 +name = "windows_x86_64_gnullvm"
7259 +version = "0.42.2"
7260 +source = "registry+https://github.com/rust-lang/crates.io-index"
7261 +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
7262 +
7263 [[package]]
7264 name = "windows_x86_64_gnullvm"
7265 version = "0.48.5"
@@ -4094,6 +7272,18 @@ version = "0.52.6"
7272 source = "registry+https://github.com/rust-lang/crates.io-index"
7273 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
7274
7275 +[[package]]
7276 +name = "windows_x86_64_gnullvm"
7277 +version = "0.53.1"
7278 +source = "registry+https://github.com/rust-lang/crates.io-index"
7279 +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
7280 +
7281 +[[package]]
7282 +name = "windows_x86_64_msvc"
7283 +version = "0.42.2"
7284 +source = "registry+https://github.com/rust-lang/crates.io-index"
7285 +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
7286 +
7287 [[package]]
7288 name = "windows_x86_64_msvc"
7289 version = "0.48.5"
@@ -4106,6 +7296,24 @@ version = "0.52.6"
7296 source = "registry+https://github.com/rust-lang/crates.io-index"
7297 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
7298
7299 +[[package]]
7300 +name = "windows_x86_64_msvc"
7301 +version = "0.53.1"
7302 +source = "registry+https://github.com/rust-lang/crates.io-index"
7303 +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
7304 +
7305 +[[package]]
7306 +name = "winnow"
7307 +version = "0.7.15"
7308 +source = "registry+https://github.com/rust-lang/crates.io-index"
7309 +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
7310 +
7311 +[[package]]
7312 +name = "winnow"
7313 +version = "1.0.2"
7314 +source = "registry+https://github.com/rust-lang/crates.io-index"
7315 +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
7316 +
7317 [[package]]
7318 name = "wit-bindgen"
7319 version = "0.51.0"
@@ -4140,7 +7348,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
7348 dependencies = [
7349 "anyhow",
7350 "heck 0.5.0",
4143 - "indexmap",
7351 + "indexmap 2.14.0",
7352 "prettyplease",
7353 "syn 2.0.117",
7354 "wasm-metadata",
@@ -4171,7 +7379,7 @@ checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
7379 dependencies = [
7380 "anyhow",
7381 "bitflags 2.11.1",
4174 - "indexmap",
7382 + "indexmap 2.14.0",
7383 "log",
7384 "serde",
7385 "serde_derive",
@@ -4190,7 +7398,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
7398 dependencies = [
7399 "anyhow",
7400 "id-arena",
4193 - "indexmap",
7401 + "indexmap 2.14.0",
7402 "log",
7403 "semver",
7404 "serde",
@@ -4206,6 +7414,12 @@ version = "0.6.3"
7414 source = "registry+https://github.com/rust-lang/crates.io-index"
7415 checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
7416
7417 +[[package]]
7418 +name = "y4m"
7419 +version = "0.8.0"
7420 +source = "registry+https://github.com/rust-lang/crates.io-index"
7421 +checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448"
7422 +
7423 [[package]]
7424 name = "yoke"
7425 version = "0.7.5"
@@ -4340,7 +7554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
7554 checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0"
7555 dependencies = [
7556 "crc32fast",
4343 - "indexmap",
7557 + "indexmap 2.14.0",
7558 "memchr",
7559 "typed-path",
7560 ]
@@ -4350,3 +7564,27 @@ name = "zmij"
7564 version = "1.0.21"
7565 source = "registry+https://github.com/rust-lang/crates.io-index"
7566 checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
7567 +
7568 +[[package]]
7569 +name = "zune-core"
7570 +version = "0.5.1"
7571 +source = "registry+https://github.com/rust-lang/crates.io-index"
7572 +checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"
7573 +
7574 +[[package]]
7575 +name = "zune-inflate"
7576 +version = "0.2.54"
7577 +source = "registry+https://github.com/rust-lang/crates.io-index"
7578 +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
7579 +dependencies = [
7580 + "simd-adler32",
7581 +]
7582 +
7583 +[[package]]
7584 +name = "zune-jpeg"
7585 +version = "0.5.15"
7586 +source = "registry+https://github.com/rust-lang/crates.io-index"
7587 +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"
7588 +dependencies = [
7589 + "zune-core",
7590 +]
Cargo.toml
+2
@@ -40,11 +40,13 @@ serde = { version = "1", features = ["derive"] }
40 serde_json = "1"
41 half = "2"
42 sha2 = "0.10"
43 +mistralrs = { git = "https://github.com/setoelkahfi/mistral.rs", branch = "fix/all-platform-fixes" }
44
45 # Metal and Accelerate are macOS-only frameworks; Cargo merges features so on
46 # macOS these are added on top of the base candle-core dep above.
47 [target.'cfg(target_os = "macos")'.dependencies]
48 candle-core = { version = "0.10.2", features = ["metal", "accelerate"] }
49 +mistralrs = { git = "https://github.com/setoelkahfi/mistral.rs", branch = "fix/all-platform-fixes", features = ["metal"] }
50
51 # ---------------------------------------------------------------------------
52 # Local development overrides
src/app.rs
+257 -9
@@ -3,7 +3,6 @@ use {
3 anyhow::Result,
4 crossterm::event::{Event, EventStream, KeyCode, KeyEventKind, KeyModifiers},
5 futures::StreamExt,
6 - ratatui::DefaultTerminal,
6 smbcloud_auth_sdk::{
7 client_credentials::ClientCredentials, login::login_with_client,
8 logout::logout_with_client, me::me_with_client, signup::signup_with_client,
@@ -45,6 +44,7 @@ pub enum Screen {
44 FineTune,
45 GgufDetail,
46 CloneRepo,
47 + Chat,
48 }
49
50 /// What kind of artifact was found on disk.
@@ -73,6 +73,60 @@ pub struct AdapterEntry {
73 pub kind: ArtifactKind,
74 }
75
76 +impl AdapterEntry {
77 + /// Classify the location of this artifact for display purposes.
78 + ///
79 + /// - `"Onde Inference"` — inside the shared App Group container
80 + /// - `"HF Cache"` — inside `~/.cache/huggingface/hub` or `$HF_HOME`
81 + /// - The raw path string — anything else (custom / local export)
82 + pub fn location_label(&self) -> String {
83 + let path_str = self.path.to_string_lossy();
84 +
85 + // App Group container (macOS)
86 + if path_str.contains("group.com.ondeinference.apps") {
87 + return "Onde Inference".to_string();
88 + }
89 +
90 + // Standard HF cache locations
91 + if path_str.contains(".cache/huggingface/hub") {
92 + return "HF Cache".to_string();
93 + }
94 + if let Ok(hf_home) = std::env::var("HF_HOME")
95 + && path_str.starts_with(&hf_home)
96 + {
97 + return "HF Cache".to_string();
98 + }
99 +
100 + // Custom / local path — show the directory
101 + self.path
102 + .parent()
103 + .map(|p| p.to_string_lossy().to_string())
104 + .unwrap_or_else(|| path_str.to_string())
105 + }
106 +
107 + /// Whether this GGUF should show the upload-to-HuggingFace UI.
108 + ///
109 + /// Only locally fine-tuned / exported models (not from a known HF cache)
110 + /// are candidates for uploading — models already on HF don't need it.
111 + pub fn is_uploadable(&self) -> bool {
112 + let path_str = self.path.to_string_lossy();
113 + // Not in the Onde app group (those are downloaded from HF)
114 + if path_str.contains("group.com.ondeinference.apps") {
115 + return false;
116 + }
117 + // Not in the standard HF cache
118 + if path_str.contains(".cache/huggingface/hub") {
119 + return false;
120 + }
121 + if let Ok(hf_home) = std::env::var("HF_HOME")
122 + && path_str.starts_with(&hf_home)
123 + {
124 + return false;
125 + }
126 + true
127 + }
128 +}
129 +
130 #[derive(Debug, Clone, PartialEq)]
131 pub enum Mode {
132 Signup,
@@ -177,6 +231,8 @@ pub enum AuthEvent {
231 // HF upload
232 UploadProgress(crate::hf_upload::UploadProgress),
233 CloneProgress(crate::hf_clone::CloneProgress),
234 + // chat
235 + ChatProgress(crate::chat::ChatProgress),
236 }
237
238 pub struct App {
@@ -255,6 +311,14 @@ pub struct App {
311 pub clone_repo_status: Option<crate::hf_clone::RepoStatus>,
312 pub clone_base_cursor: usize,
313 pub clone_progress: Option<crate::hf_clone::CloneProgress>,
314 + // chat (test a local GGUF before publishing)
315 + pub chat_messages: Vec<crate::chat::ChatMessage>,
316 + pub chat_input: String,
317 + pub chat_loading: bool,
318 + pub chat_thinking: bool,
319 + pub chat_progress: Option<crate::chat::ChatProgress>,
320 + pub chat_command_tx: Option<tokio::sync::mpsc::UnboundedSender<crate::chat::ChatCommand>>,
321 + pub chat_scroll_offset: usize,
322 }
323
324 impl App {
@@ -319,6 +383,13 @@ impl App {
383 clone_repo_status: None,
384 clone_base_cursor: 0,
385 clone_progress: None,
386 + chat_messages: Vec::new(),
387 + chat_input: String::new(),
388 + chat_loading: false,
389 + chat_thinking: false,
390 + chat_progress: None,
391 + chat_command_tx: None,
392 + chat_scroll_offset: 0,
393 }
394 }
395
@@ -350,7 +421,8 @@ impl App {
421 | AuthEvent::MergeProgress(_)
422 | AuthEvent::GgufProgress(_)
423 | AuthEvent::UploadProgress(_)
353 - | AuthEvent::CloneProgress(_) => {}
424 + | AuthEvent::CloneProgress(_)
425 + | AuthEvent::ChatProgress(_) => {}
426 _ => {
427 self.busy = false;
428 }
@@ -609,11 +681,60 @@ impl App {
681 }
682 self.clone_progress = Some(progress);
683 }
684 + AuthEvent::ChatProgress(progress) => {
685 + match &progress {
686 + crate::chat::ChatProgress::LoadingModel => {
687 + self.chat_loading = true;
688 + self.chat_thinking = false;
689 + self.status = Status::neutral("Loading model…");
690 + }
691 + crate::chat::ChatProgress::Ready { model_name } => {
692 + self.chat_loading = false;
693 + self.status =
694 + Status::success(format!("{model_name} ready. Start chatting!"));
695 + }
696 + crate::chat::ChatProgress::Thinking => {
697 + self.chat_thinking = true;
698 + self.status = Status::neutral("Thinking…");
699 + }
700 + crate::chat::ChatProgress::StreamDelta(delta) => {
701 + // Append the token to the current streaming assistant message.
702 + if let Some(last) = self.chat_messages.last_mut() {
703 + if last.role == crate::chat::ChatRole::Assistant {
704 + last.content.push_str(delta);
705 + } else {
706 + self.chat_messages
707 + .push(crate::chat::ChatMessage::assistant(delta.clone()));
708 + }
709 + } else {
710 + self.chat_messages
711 + .push(crate::chat::ChatMessage::assistant(delta.clone()));
712 + }
713 + self.chat_scroll_offset = self.chat_messages.len().saturating_sub(1);
714 + }
715 + crate::chat::ChatProgress::Reply {
716 + text: _,
717 + duration_display,
718 + } => {
719 + self.chat_thinking = false;
720 + self.chat_scroll_offset = self.chat_messages.len().saturating_sub(1);
721 + self.status = Status::success(format!(
722 + "Reply in {duration_display}. Enter · send Esc · back"
723 + ));
724 + }
725 + crate::chat::ChatProgress::Error(msg) => {
726 + self.chat_loading = false;
727 + self.chat_thinking = false;
728 + self.status = Status::error(msg.clone());
729 + }
730 + }
731 + self.chat_progress = Some(progress);
732 + }
733 }
734 }
735 }
736
616 -pub async fn run(terminal: &mut DefaultTerminal) -> Result<()> {
737 +pub async fn run<B: ratatui::backend::Backend>(terminal: &mut ratatui::Terminal<B>) -> Result<()> {
738 let mut app = App::new();
739 let (tx, mut rx) = mpsc::unbounded_channel::<AuthEvent>();
740 let mut events = EventStream::new();
@@ -730,6 +851,7 @@ fn handle_key(
851 Screen::GgufDetail => handle_key_gguf_detail(app, key, tx),
852 Screen::FineTune => handle_key_finetune(app, key, tx),
853 Screen::CloneRepo => handle_key_clone_repo(app, key, tx),
854 + Screen::Chat => handle_key_chat(app, key, tx),
855 }
856 }
857
@@ -1440,12 +1562,27 @@ fn handle_key_gguf_detail(
1562 (Char('c'), KeyModifiers::CONTROL) => {
1563 app.should_quit = true;
1564 }
1443 - // Edit the repo name field
1444 - (Backspace, _) => {
1565 + // 'c' — open the chat screen to test this GGUF
1566 + (Char('c'), KeyModifiers::NONE) => {
1567 + if let Some(ref gguf) = app.selected_gguf {
1568 + trigger_chat(app, gguf.path.clone(), tx);
1569 + }
1570 + }
1571 + // Upload-only keys — guarded behind is_uploadable()
1572 + (Backspace, _)
1573 + if app
1574 + .selected_gguf
1575 + .as_ref()
1576 + .is_some_and(|g| g.is_uploadable()) =>
1577 + {
1578 app.upload_repo_name.pop();
1579 }
1447 - // Enter — start the upload
1448 - (Enter, _) => {
1580 + (Enter, _)
1581 + if app
1582 + .selected_gguf
1583 + .as_ref()
1584 + .is_some_and(|g| g.is_uploadable()) =>
1585 + {
1586 if app.upload_repo_name.is_empty() {
1587 app.status = Status::error("Repo name cannot be empty.");
1588 return;
@@ -1483,8 +1620,13 @@ fn handle_key_gguf_detail(
1620 }
1621 });
1622 }
1486 - // Any printable char edits the repo name
1487 - (Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => {
1623 + // Printable chars edit the repo name — only when uploadable
1624 + (Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT)
1625 + if app
1626 + .selected_gguf
1627 + .as_ref()
1628 + .is_some_and(|g| g.is_uploadable()) =>
1629 + {
1630 app.upload_repo_name.push(c);
1631 }
1632 _ => {}
@@ -1501,6 +1643,112 @@ fn format_adapter_size(bytes: u64) -> String {
1643 }
1644 }
1645
1646 +fn trigger_chat(
1647 + app: &mut App,
1648 + gguf_path: std::path::PathBuf,
1649 + tx: mpsc::UnboundedSender<AuthEvent>,
1650 +) {
1651 + // Reset chat state for a fresh session.
1652 + app.chat_messages.clear();
1653 + app.chat_input.clear();
1654 + app.chat_loading = false;
1655 + app.chat_thinking = false;
1656 + app.chat_progress = None;
1657 + app.chat_scroll_offset = 0;
1658 + app.chat_command_tx = None;
1659 +
1660 + let (progress_tx, mut progress_rx) = mpsc::unbounded_channel::<crate::chat::ChatProgress>();
1661 + let (command_tx, command_rx) = mpsc::unbounded_channel::<crate::chat::ChatCommand>();
1662 +
1663 + app.chat_command_tx = Some(command_tx);
1664 + app.screen = Screen::Chat;
1665 + app.status = Status::neutral("Loading model from disk…");
1666 +
1667 + // Spawn the background chat worker.
1668 + tokio::spawn(async move {
1669 + crate::chat::start_chat(gguf_path, progress_tx, command_rx).await;
1670 + });
1671 +
1672 + // Forward progress events to the main event loop.
1673 + tokio::spawn(async move {
1674 + while let Some(progress) = progress_rx.recv().await {
1675 + let _ = tx.send(AuthEvent::ChatProgress(progress));
1676 + }
1677 + });
1678 +}
1679 +
1680 +fn handle_key_chat(
1681 + app: &mut App,
1682 + key: crossterm::event::KeyEvent,
1683 + _tx: mpsc::UnboundedSender<AuthEvent>,
1684 +) {
1685 + use KeyCode::*;
1686 +
1687 + // While model is loading or inference is running, only allow Ctrl+C.
1688 + if app.chat_loading || app.chat_thinking {
1689 + if matches!(
1690 + (key.code, key.modifiers),
1691 + (Char('c'), KeyModifiers::CONTROL)
1692 + ) {
1693 + app.should_quit = true;
1694 + }
1695 + return;
1696 + }
1697 +
1698 + match (key.code, key.modifiers) {
1699 + (Char('c'), KeyModifiers::CONTROL) => {
1700 + app.should_quit = true;
1701 + }
1702 + (Esc, _) => {
1703 + // Send Quit to the background worker so it can clean up.
1704 + if let Some(ref tx) = app.chat_command_tx {
1705 + let _ = tx.send(crate::chat::ChatCommand::Quit);
1706 + }
1707 + app.chat_command_tx = None;
1708 + app.screen = Screen::GgufDetail;
1709 + app.status = Status::neutral("Back to GGUF detail.");
1710 + }
1711 + // Scroll up through message history.
1712 + (Up, _) | (Char('k'), KeyModifiers::NONE) => {
1713 + app.chat_scroll_offset = app.chat_scroll_offset.saturating_sub(1);
1714 + }
1715 + // Scroll down through message history.
1716 + (Down, _) | (Char('j'), KeyModifiers::NONE) => {
1717 + let max = app.chat_messages.len().saturating_sub(1);
1718 + if app.chat_scroll_offset < max {
1719 + app.chat_scroll_offset += 1;
1720 + }
1721 + }
1722 + // Delete last character from input.
1723 + (Backspace, _) => {
1724 + app.chat_input.pop();
1725 + }
1726 + // Send the message.
1727 + (Enter, _) => {
1728 + let text = app.chat_input.trim().to_string();
1729 + if text.is_empty() {
1730 + return;
1731 + }
1732 + if let Some(ref tx) = app.chat_command_tx {
1733 + app.chat_messages
1734 + .push(crate::chat::ChatMessage::user(text.clone()));
1735 + app.chat_scroll_offset = app.chat_messages.len().saturating_sub(1);
1736 + app.chat_input.clear();
1737 + app.chat_thinking = true;
1738 + app.status = Status::neutral("Thinking…");
1739 + let _ = tx.send(crate::chat::ChatCommand::SendMessage(text));
1740 + } else {
1741 + app.status = Status::error("Chat engine not ready.");
1742 + }
1743 + }
1744 + // Append printable characters to the input buffer.
1745 + (Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => {
1746 + app.chat_input.push(c);
1747 + }
1748 + _ => {}
1749 + }
1750 +}
1751 +
1752 fn handle_key_finetune(
1753 app: &mut App,
1754 key: crossterm::event::KeyEvent,
src/chat.rs new
+330
@@ -0,0 +1,330 @@
1 +//! Background GGUF chat worker for the onde-cli TUI.
2 +//!
3 +//! Loads a local GGUF file from an absolute path on disk and handles
4 +//! multi-turn chat via tokio mpsc channels. No HuggingFace Hub access is
5 +//! required — the parent directory of the file is used as the model root,
6 +//! and `TokenSource::None` bypasses all HF authentication.
7 +
8 +use std::path::PathBuf;
9 +use std::time::Instant;
10 +
11 +use mistralrs::{GgufModelBuilder, RequestBuilder, Response, TextMessageRole, TokenSource};
12 +use tokio::sync::mpsc;
13 +
14 +// ── Public types ──────────────────────────────────────────────────────────────
15 +
16 +/// Progress events emitted by the background chat worker.
17 +#[derive(Debug, Clone)]
18 +pub enum ChatProgress {
19 + /// The worker has started loading the model from disk.
20 + LoadingModel,
21 + /// The model is loaded and ready to accept messages.
22 + Ready { model_name: String },
23 + /// Inference is running; waiting for the reply.
24 + Thinking,
25 + /// A complete assistant reply has been produced.
26 + Reply {
27 + text: String,
28 + duration_display: String,
29 + },
30 + /// A partial token arrived from the streaming response.
31 + StreamDelta(String),
32 + /// An unrecoverable error occurred. The worker exits after sending this.
33 + Error(String),
34 +}
35 +
36 +/// A single turn in the conversation history.
37 +#[derive(Debug, Clone)]
38 +pub struct ChatMessage {
39 + pub role: ChatRole,
40 + pub content: String,
41 +}
42 +
43 +impl ChatMessage {
44 + pub fn user(content: impl Into<String>) -> Self {
45 + Self {
46 + role: ChatRole::User,
47 + content: content.into(),
48 + }
49 + }
50 +
51 + pub fn assistant(content: impl Into<String>) -> Self {
52 + Self {
53 + role: ChatRole::Assistant,
54 + content: content.into(),
55 + }
56 + }
57 +}
58 +
59 +/// The role of a participant in the conversation.
60 +#[derive(Debug, Clone, PartialEq, Eq)]
61 +pub enum ChatRole {
62 + User,
63 + Assistant,
64 +}
65 +
66 +/// Commands sent to the background chat worker.
67 +#[derive(Debug)]
68 +pub enum ChatCommand {
69 + /// Send a user message and await a reply.
70 + SendMessage(String),
71 + /// Shut down the worker cleanly.
72 + Quit,
73 +}
74 +
75 +// ── Duration formatting ───────────────────────────────────────────────────────
76 +
77 +/// Format an elapsed [`std::time::Duration`] as a compact human-readable string.
78 +///
79 +/// - Under 60 s → `"4.2s"`
80 +/// - 60 s or more → `"1m 4.2s"`
81 +fn format_duration(elapsed: std::time::Duration) -> String {
82 + let total_secs = elapsed.as_secs_f64();
83 + let mins = (total_secs / 60.0).floor() as u64;
84 + let secs = total_secs - (mins as f64 * 60.0);
85 + if mins > 0 {
86 + format!("{}m {:.1}s", mins, secs)
87 + } else {
88 + format!("{:.1}s", total_secs)
89 + }
90 +}
91 +
92 +// ── History helpers ───────────────────────────────────────────────────────────
93 +
94 +/// Map a [`ChatRole`] to the corresponding [`TextMessageRole`] expected by
95 +/// `mistralrs`.
96 +#[cfg(test)]
97 +fn to_mistral_role(role: &ChatRole) -> TextMessageRole {
98 + match role {
99 + ChatRole::User => TextMessageRole::User,
100 + ChatRole::Assistant => TextMessageRole::Assistant,
101 + }
102 +}
103 +
104 +/// Build a [`RequestBuilder`] from the accumulated history plus the new user
105 +/// message. A fixed sampling preset (temperature 0.7, max 512 tokens) is
106 +/// applied so callers do not need to thread sampling config through the
107 +/// command channel.
108 +fn build_request(history: &[(TextMessageRole, String)], user_message: &str) -> RequestBuilder {
109 + let mut req = RequestBuilder::new()
110 + .set_sampler_temperature(0.7)
111 + .set_sampler_max_len(512);
112 +
113 + for (role, content) in history {
114 + req = req.add_message(role.clone(), content);
115 + }
116 +
117 + req = req.add_message(TextMessageRole::User, user_message);
118 + req
119 +}
120 +
121 +// ── Worker entry point ────────────────────────────────────────────────────────
122 +
123 +/// Start the background GGUF chat worker.
124 +///
125 +/// The worker:
126 +/// 1. Sends [`ChatProgress::LoadingModel`].
127 +/// 2. Loads the GGUF file at `gguf_path` using `mistralrs::GgufModelBuilder`.
128 +/// The parent directory is used as the model root; no HF token is required.
129 +/// 3. Sends [`ChatProgress::Ready`] on success, or [`ChatProgress::Error`] and
130 +/// returns on failure.
131 +/// 4. Loops on `command_rx`:
132 +/// - [`ChatCommand::SendMessage`] → runs inference and sends
133 +/// [`ChatProgress::Thinking`] then [`ChatProgress::Reply`] (or
134 +/// [`ChatProgress::Error`] on failure).
135 +/// - [`ChatCommand::Quit`] → breaks the loop and returns.
136 +///
137 +/// Conversation history is kept in-memory as a `Vec<(TextMessageRole, String)>`
138 +/// so every request includes the full multi-turn context.
139 +pub async fn start_chat(
140 + gguf_path: PathBuf,
141 + progress_tx: mpsc::UnboundedSender<ChatProgress>,
142 + mut command_rx: mpsc::UnboundedReceiver<ChatCommand>,
143 +) {
144 + // ── 1. Announce that loading has started ─────────────────────────────────
145 + let _ = progress_tx.send(ChatProgress::LoadingModel);
146 +
147 + // ── 2. Derive model_id (parent dir) and filename from the absolute path ──
148 + let model_dir = match gguf_path.parent() {
149 + Some(p) => p.to_string_lossy().to_string(),
150 + None => {
151 + let _ = progress_tx.send(ChatProgress::Error(format!(
152 + "Cannot determine parent directory of: {}",
153 + gguf_path.display()
154 + )));
155 + return;
156 + }
157 + };
158 +
159 + let file_name = match gguf_path.file_name() {
160 + Some(n) => n.to_string_lossy().to_string(),
161 + None => {
162 + let _ = progress_tx.send(ChatProgress::Error(format!(
163 + "Cannot determine file name of: {}",
164 + gguf_path.display()
165 + )));
166 + return;
167 + }
168 + };
169 +
170 + // ── 3. Build and load the model ──────────────────────────────────────────
171 + let model = match GgufModelBuilder::new(&model_dir, vec![file_name.clone()])
172 + .with_token_source(TokenSource::None)
173 + .build()
174 + .await
175 + {
176 + Ok(m) => m,
177 + Err(e) => {
178 + let _ = progress_tx.send(ChatProgress::Error(format!(
179 + "Failed to load model \"{file_name}\": {e}"
180 + )));
181 + return;
182 + }
183 + };
184 +
185 + let _ = progress_tx.send(ChatProgress::Ready {
186 + model_name: file_name,
187 + });
188 +
189 + // ── 4. Conversation history (mistralrs roles + content) ──────────────────
190 + //
191 + // We store the history as raw (TextMessageRole, String) pairs rather than
192 + // as `ChatMessage` values so we can hand slices directly to `build_request`
193 + // without any extra mapping at inference time.
194 + let mut history: Vec<(TextMessageRole, String)> = Vec::new();
195 +
196 + // ── 5. Command loop ───────────────────────────────────────────────────────
197 + loop {
198 + let command = match command_rx.recv().await {
199 + Some(cmd) => cmd,
200 + // Sender dropped — treat as a quit signal.
201 + None => break,
202 + };
203 +
204 + match command {
205 + ChatCommand::Quit => break,
206 +
207 + ChatCommand::SendMessage(user_text) => {
208 + let _ = progress_tx.send(ChatProgress::Thinking);
209 +
210 + let request = build_request(&history, &user_text);
211 +
212 + let start = Instant::now();
213 + let mut stream = match model.stream_chat_request(request).await {
214 + Ok(s) => s,
215 + Err(e) => {
216 + let _ = progress_tx.send(ChatProgress::Error(format!(
217 + "Failed to start streaming: {e}"
218 + )));
219 + continue;
220 + }
221 + };
222 +
223 + let mut reply_buf = String::new();
224 +
225 + while let Some(response) = stream.next().await {
226 + match response {
227 + Response::Chunk(chunk) => {
228 + if let Some(choice) = chunk.choices.first()
229 + && let Some(ref delta) = choice.delta.content
230 + {
231 + reply_buf.push_str(delta);
232 + let _ = progress_tx.send(ChatProgress::StreamDelta(delta.clone()));
233 + }
234 + }
235 + Response::Done(_) => break,
236 + Response::ModelError(msg, _) => {
237 + let _ = progress_tx
238 + .send(ChatProgress::Error(format!("Model error: {msg}")));
239 + break;
240 + }
241 + Response::InternalError(e) => {
242 + let _ = progress_tx
243 + .send(ChatProgress::Error(format!("Internal error: {e}")));
244 + break;
245 + }
246 + Response::ValidationError(e) => {
247 + let _ = progress_tx
248 + .send(ChatProgress::Error(format!("Validation error: {e}")));
249 + break;
250 + }
251 + Response::CompletionModelError(msg, _) => {
252 + let _ = progress_tx
253 + .send(ChatProgress::Error(format!("Completion error: {msg}")));
254 + break;
255 + }
256 + Response::CompletionDone(_) => break,
257 + Response::CompletionChunk(_) => {}
258 + Response::ImageGeneration(_) => {}
259 + Response::Speech { .. } => {}
260 + Response::Raw { .. } => {}
261 + Response::Embeddings { .. } => {}
262 + }
263 + }
264 +
265 + let elapsed = start.elapsed();
266 +
267 + if !reply_buf.is_empty() {
268 + history.push((TextMessageRole::User, user_text));
269 + history.push((TextMessageRole::Assistant, reply_buf.trim().to_string()));
270 +
271 + let _ = progress_tx.send(ChatProgress::Reply {
272 + text: reply_buf.trim().to_string(),
273 + duration_display: format_duration(elapsed),
274 + });
275 + }
276 + }
277 + }
278 + }
279 +}
280 +
281 +// ── Tests ─────────────────────────────────────────────────────────────────────
282 +
283 +#[cfg(test)]
284 +mod tests {
285 + use super::*;
286 +
287 + #[test]
288 + fn format_duration_under_one_minute() {
289 + let d = std::time::Duration::from_secs_f64(4.567);
290 + assert_eq!(format_duration(d), "4.6s");
291 + }
292 +
293 + #[test]
294 + fn format_duration_exactly_one_minute() {
295 + let d = std::time::Duration::from_secs(60);
296 + assert_eq!(format_duration(d), "1m 0.0s");
297 + }
298 +
299 + #[test]
300 + fn format_duration_over_one_minute() {
301 + let d = std::time::Duration::from_secs_f64(125.3);
302 + assert_eq!(format_duration(d), "2m 5.3s");
303 + }
304 +
305 + #[test]
306 + fn chat_message_user_role() {
307 + let msg = ChatMessage::user("hello");
308 + assert_eq!(msg.role, ChatRole::User);
309 + assert_eq!(msg.content, "hello");
310 + }
311 +
312 + #[test]
313 + fn chat_message_assistant_role() {
314 + let msg = ChatMessage::assistant("hi there");
315 + assert_eq!(msg.role, ChatRole::Assistant);
316 + assert_eq!(msg.content, "hi there");
317 + }
318 +
319 + #[test]
320 + fn to_mistral_role_maps_correctly() {
321 + assert!(matches!(
322 + to_mistral_role(&ChatRole::User),
323 + TextMessageRole::User
324 + ));
325 + assert!(matches!(
326 + to_mistral_role(&ChatRole::Assistant),
327 + TextMessageRole::Assistant
328 + ));
329 + }
330 +}
src/main.rs
+71 -15
@@ -1,4 +1,5 @@
1 mod app;
2 +mod chat;
3 mod finetune;
4 mod gguf;
5 mod gresiq;
@@ -11,44 +12,99 @@ mod project;
12 mod token;
13 mod ui;
14
14 -/// Point stderr at ~/.cache/onde/debug.log before ratatui owns the terminal.
15 -/// Without this, any stray eprintln! or log output tears up the display.
15 +use std::io::Write;
16 +
17 +/// Redirect **both** stdout and stderr to `~/.cache/onde/debug.log` before
18 +/// ratatui takes over the alternate screen.
19 +///
20 +/// mistral.rs writes to both file descriptors:
21 +/// - `stderr` — tracing/log output from `mistralrs_core`
22 +/// - `stdout` — `println!` in `print_metadata`, pipeline info, etc.
23 +///
24 +/// Without redirecting stdout the `println!` calls write raw text into the
25 +/// alternate screen buffer, tearing up the TUI layout.
26 +///
27 +/// We `dup` the real stdout *before* the redirect so ratatui can still
28 +/// render to the terminal via the returned `File` handle.
29 #[cfg(unix)]
17 -fn redirect_stderr() {
30 +fn redirect_output() -> Option<std::fs::File> {
31 use std::fs::{self, OpenOptions};
19 - use std::os::fd::IntoRawFd;
32 + use std::os::fd::{AsRawFd, FromRawFd};
33
34 let log_dir = dirs::cache_dir()
35 .unwrap_or_else(|| std::path::PathBuf::from("/tmp"))
36 .join("onde");
37
38 if fs::create_dir_all(&log_dir).is_err() {
26 - return;
39 + return None;
40 }
41
29 - if let Ok(file) = OpenOptions::new()
42 + let log_file = match OpenOptions::new()
43 .create(true)
44 .append(true)
45 .open(log_dir.join("debug.log"))
46 {
34 - // SAFETY: called before tokio or ratatui start, so no threads yet.
35 - unsafe {
36 - let fd = file.into_raw_fd();
37 - libc::dup2(fd, libc::STDERR_FILENO);
38 - libc::close(fd);
47 + Ok(f) => f,
48 + Err(_) => return None,
49 + };
50 +
51 + // SAFETY: called before tokio or ratatui start, so no threads yet.
52 + unsafe {
53 + // Preserve the real stdout so ratatui can render to the terminal.
54 + let tty_fd = libc::dup(libc::STDOUT_FILENO);
55 + if tty_fd < 0 {
56 + return None;
57 }
58 +
59 + let log_fd = log_file.as_raw_fd();
60 +
61 + // Point both stdout and stderr at the log file.
62 + libc::dup2(log_fd, libc::STDOUT_FILENO);
63 + libc::dup2(log_fd, libc::STDERR_FILENO);
64 +
65 + Some(std::fs::File::from_raw_fd(tty_fd))
66 }
67 }
68
69 #[cfg(not(unix))]
44 -fn redirect_stderr() {}
70 +fn redirect_output() -> Option<std::fs::File> {
71 + None
72 +}
73
74 #[tokio::main]
75 async fn main() -> anyhow::Result<()> {
48 - redirect_stderr();
76 + let tty = redirect_output();
77 +
78 + // Build a writer that targets the real terminal. When
79 + // redirect_output() moved fd 1 to the log file, `tty` holds
80 + // the dup'd real terminal fd. Otherwise we use stdout.
81 + let mut writer: Box<dyn Write> = match tty {
82 + Some(f) => Box::new(std::io::BufWriter::new(f)),
83 + None => Box::new(std::io::stdout()),
84 + };
85 +
86 + // Enter raw mode + alternate screen. The control sequences must go
87 + // to the real terminal writer, not stdout/stderr (which may be
88 + // redirected to the log file).
89 + crossterm::terminal::enable_raw_mode()?;
90 + crossterm::execute!(
91 + writer,
92 + crossterm::terminal::EnterAlternateScreen,
93 + crossterm::event::EnableMouseCapture
94 + )?;
95
50 - let mut terminal = ratatui::init();
96 + let backend = ratatui::backend::CrosstermBackend::new(writer);
97 + let mut terminal = ratatui::Terminal::new(backend)?;
98 let result = app::run(&mut terminal).await;
52 - ratatui::restore();
99 +
100 + // Restore terminal state via the backend writer.
101 + crossterm::execute!(
102 + terminal.backend_mut(),
103 + crossterm::terminal::LeaveAlternateScreen,
104 + crossterm::event::DisableMouseCapture
105 + )?;
106 + crossterm::terminal::disable_raw_mode()?;
107 + terminal.show_cursor()?;
108 +
109 result
110 }
src/ui.rs
+292 -82
@@ -87,6 +87,7 @@ fn render_card(frame: &mut Frame, app: &App, area: Rect) {
87 Screen::GgufDetail => render_gguf_detail(frame, app, inner),
88 Screen::FineTune => render_finetune(frame, app, inner),
89 Screen::CloneRepo => render_clone_repo(frame, app, inner),
90 + Screen::Chat => render_chat(frame, app, inner),
91 }
92 }
93
@@ -1178,30 +1179,59 @@ fn render_gguf_detail(frame: &mut Frame, app: &App, area: Rect) {
1179 return;
1180 };
1181
1181 - let rows = Layout::vertical([
1182 - Constraint::Length(1), // 0 heading
1183 - Constraint::Length(1), // 1 spacer
1184 - Constraint::Length(1), // 2 status
1185 - Constraint::Length(1), // 3 spacer
1186 - Constraint::Length(1), // 4 File label
1187 - Constraint::Length(1), // 5 File value
1188 - Constraint::Length(1), // 6 spacer
1189 - Constraint::Length(1), // 7 Size label
1190 - Constraint::Length(1), // 8 Size value
1191 - Constraint::Length(1), // 9 spacer
1192 - Constraint::Length(1), // 10 Location label
1193 - Constraint::Length(3), // 11 Location value (bordered, wraps)
1194 - Constraint::Length(1), // 12 spacer
1195 - Constraint::Length(1), // 13 Upload heading
1196 - Constraint::Length(1), // 14 Repo Name label
1197 - Constraint::Length(3), // 15 Repo Name input
1198 - Constraint::Length(1), // 16 spacer
1199 - Constraint::Length(1), // 17 upload status / progress
1200 - Constraint::Length(1), // 18 spacer
1201 - Constraint::Min(0), // 19 rest
1202 - Constraint::Length(1), // 20 hint
1203 - ])
1204 - .split(area);
1182 + let uploadable = gguf.is_uploadable();
1183 +
1184 + let rows = if uploadable {
1185 + Layout::vertical([
1186 + Constraint::Length(1), // 0 heading
1187 + Constraint::Length(1), // 1 spacer
1188 + Constraint::Length(1), // 2 status
1189 + Constraint::Length(1), // 3 spacer
1190 + Constraint::Length(1), // 4 File label
1191 + Constraint::Length(1), // 5 File value
1192 + Constraint::Length(1), // 6 spacer
1193 + Constraint::Length(1), // 7 Size label
1194 + Constraint::Length(1), // 8 Size value
1195 + Constraint::Length(1), // 9 spacer
1196 + Constraint::Length(1), // 10 Location label
1197 + Constraint::Length(1), // 11 Location value
1198 + Constraint::Length(1), // 12 spacer
1199 + Constraint::Length(1), // 13 Upload heading
1200 + Constraint::Length(1), // 14 Repo Name label
1201 + Constraint::Length(3), // 15 Repo Name input
1202 + Constraint::Length(1), // 16 spacer
1203 + Constraint::Length(1), // 17 upload status / progress
1204 + Constraint::Length(1), // 18 spacer
1205 + Constraint::Min(0), // 19 rest
1206 + Constraint::Length(1), // 20 hint
1207 + ])
1208 + .split(area)
1209 + } else {
1210 + Layout::vertical([
1211 + Constraint::Length(1), // 0 heading
1212 + Constraint::Length(1), // 1 spacer
1213 + Constraint::Length(1), // 2 status
1214 + Constraint::Length(1), // 3 spacer
1215 + Constraint::Length(1), // 4 File label
1216 + Constraint::Length(1), // 5 File value
1217 + Constraint::Length(1), // 6 spacer
1218 + Constraint::Length(1), // 7 Size label
1219 + Constraint::Length(1), // 8 Size value
1220 + Constraint::Length(1), // 9 spacer
1221 + Constraint::Length(1), // 10 Location label
1222 + Constraint::Length(1), // 11 Location value
1223 + Constraint::Length(1), // 12 spacer
1224 + Constraint::Length(0), // 13 (hidden)
1225 + Constraint::Length(0), // 14 (hidden)
1226 + Constraint::Length(0), // 15 (hidden)
1227 + Constraint::Length(0), // 16 (hidden)
1228 + Constraint::Length(0), // 17 (hidden)
1229 + Constraint::Length(0), // 18 (hidden)
1230 + Constraint::Min(0), // 19 rest
1231 + Constraint::Length(1), // 20 hint
1232 + ])
1233 + .split(area)
1234 + };
1235
1236 // Heading
1237 frame.render_widget(
@@ -1221,66 +1251,53 @@ fn render_gguf_detail(frame: &mut Frame, app: &App, area: Rect) {
1251 let size_modified = format!("{} {}", gguf.size, gguf.modified);
1252 render_detail_field(frame, "Size", &size_modified, rows[7], rows[8]);
1253
1224 - // Full path in a bordered box
1225 - frame.render_widget(
1226 - Paragraph::new("Location").style(Style::new().fg(C_MUTED)),
1227 - rows[10],
1228 - );
1229 - let path_block = Block::new()
1230 - .borders(Borders::ALL)
1231 - .border_type(BorderType::Rounded)
1232 - .border_style(Style::new().fg(C_LINE))
1233 - .style(Style::new().bg(C_SURFACE_STRONG));
1234 - let path_inner = path_block.inner(rows[11]);
1235 - frame.render_widget(path_block, rows[11]);
1236 - frame.render_widget(
1237 - Paragraph::new(gguf.path.to_string_lossy().to_string())
1238 - .style(Style::new().fg(C_NEON))
1239 - .wrap(Wrap { trim: true }),
1240 - path_inner,
1241 - );
1254 + // Location — show a friendly label instead of the raw path
1255 + let location = gguf.location_label();
1256 + render_detail_field(frame, "Location", &location, rows[10], rows[11]);
1257
1243 - // Upload section
1244 - frame.render_widget(
1245 - Paragraph::new("Upload to HuggingFace").style(Style::new().fg(C_MUTED)),
1246 - rows[13],
1247 - );
1258 + // Upload section — only for locally fine-tuned models, not HF downloads
1259 + if uploadable {
1260 + frame.render_widget(
1261 + Paragraph::new("Upload to HuggingFace").style(Style::new().fg(C_MUTED)),
1262 + rows[13],
1263 + );
1264
1249 - // Repo name input
1250 - frame.render_widget(
1251 - Paragraph::new("Repo Name").style(Style::new().fg(C_MUTED)),
1252 - rows[14],
1253 - );
1265 + // Repo name input
1266 + frame.render_widget(
1267 + Paragraph::new("Repo Name").style(Style::new().fg(C_MUTED)),
1268 + rows[14],
1269 + );
1270
1255 - let input_focused = !app.upload_running
1256 - && !matches!(
1257 - app.upload_progress,
1258 - Some(crate::hf_upload::UploadProgress::Done { .. })
1271 + let input_focused = !app.upload_running
1272 + && !matches!(
1273 + app.upload_progress,
1274 + Some(crate::hf_upload::UploadProgress::Done { .. })
1275 + );
1276 + let border_style = if input_focused {
1277 + Style::new().fg(C_NEON)
1278 + } else {
1279 + Style::new().fg(C_LINE)
1280 + };
1281 + let input_block = Block::new()
1282 + .borders(Borders::ALL)
1283 + .border_type(BorderType::Rounded)
1284 + .border_style(border_style)
1285 + .style(Style::new().bg(C_SURFACE_STRONG));
1286 + let input_inner = input_block.inner(rows[15]);
1287 + frame.render_widget(input_block, rows[15]);
1288 + frame.render_widget(
1289 + Paragraph::new(app.upload_repo_name.as_str()).style(Style::new().fg(C_TEXT)),
1290 + input_inner,
1291 );
1260 - let border_style = if input_focused {
1261 - Style::new().fg(C_NEON)
1262 - } else {
1263 - Style::new().fg(C_LINE)
1264 - };
1265 - let input_block = Block::new()
1266 - .borders(Borders::ALL)
1267 - .border_type(BorderType::Rounded)
1268 - .border_style(border_style)
1269 - .style(Style::new().bg(C_SURFACE_STRONG));
1270 - let input_inner = input_block.inner(rows[15]);
1271 - frame.render_widget(input_block, rows[15]);
1272 - frame.render_widget(
1273 - Paragraph::new(app.upload_repo_name.as_str()).style(Style::new().fg(C_TEXT)),
1274 - input_inner,
1275 - );
1276 - if input_focused {
1277 - let cursor_x = (input_inner.x + app.upload_repo_name.chars().count() as u16)
1278 - .min(input_inner.x + input_inner.width.saturating_sub(1));
1279 - frame.set_cursor_position((cursor_x, input_inner.y));
1280 - }
1292 + if input_focused {
1293 + let cursor_x = (input_inner.x + app.upload_repo_name.chars().count() as u16)
1294 + .min(input_inner.x + input_inner.width.saturating_sub(1));
1295 + frame.set_cursor_position((cursor_x, input_inner.y));
1296 + }
1297
1282 - // Upload progress / status
1283 - render_upload_status(frame, app, rows[17]);
1298 + // Upload progress / status
1299 + render_upload_status(frame, app, rows[17]);
1300 + }
1301
1302 // Hint
1303 let hint = if app.upload_running {
@@ -1290,8 +1307,10 @@ fn render_gguf_detail(frame: &mut Frame, app: &App, area: Rect) {
1307 Some(crate::hf_upload::UploadProgress::Done { .. })
1308 ) {
1309 "Esc · back"
1310 + } else if uploadable {
1311 + "Enter · upload c · chat Esc · back"
1312 } else {
1294 - "Enter · upload Esc · back"
1313 + "c · chat Esc · back"
1314 };
1315 frame.render_widget(
1316 Paragraph::new(hint).style(Style::new().fg(C_MUTED)),
@@ -2119,6 +2138,172 @@ fn render_clone_repo(frame: &mut Frame, app: &App, area: Rect) {
2138 }
2139 }
2140
2141 +fn render_chat(frame: &mut Frame, app: &App, area: Rect) {
2142 + use crate::chat::ChatRole;
2143 +
2144 + let rows = Layout::vertical([
2145 + Constraint::Length(1), // 0 heading
2146 + Constraint::Length(1), // 1 spacer
2147 + Constraint::Length(1), // 2 status line
2148 + Constraint::Length(1), // 3 spacer
2149 + Constraint::Min(0), // 4 message history
2150 + Constraint::Length(1), // 5 spacer
2151 + Constraint::Length(1), // 6 input label
2152 + Constraint::Length(3), // 7 input box
2153 + Constraint::Length(1), // 8 hint
2154 + ])
2155 + .split(area);
2156 +
2157 + // ── Heading ──────────────────────────────────────────────────────────────
2158 + let model_name = app
2159 + .selected_gguf
2160 + .as_ref()
2161 + .map(|g| g.file_name.as_str())
2162 + .unwrap_or("Local GGUF");
2163 + frame.render_widget(
2164 + Paragraph::new(Line::from(Span::styled(
2165 + format!("Chat — {model_name}"),
2166 + Style::new().fg(C_INK).bold(),
2167 + ))),
2168 + rows[0],
2169 + );
2170 +
2171 + render_status(frame, app, rows[2]);
2172 +
2173 + // ── Message history ───────────────────────────────────────────────────────
2174 + {
2175 + let history_area = rows[4];
2176 + let max_visible_lines = history_area.height as usize;
2177 +
2178 + // Build all rendered lines first so we can page from the bottom.
2179 + let mut all_lines: Vec<Line> = Vec::new();
2180 + for msg in &app.chat_messages {
2181 + match msg.role {
2182 + ChatRole::User => {
2183 + all_lines.push(Line::from(vec![
2184 + Span::styled("You ", Style::new().fg(C_NEON).bold()),
2185 + Span::styled(msg.content.clone(), Style::new().fg(C_TEXT)),
2186 + ]));
2187 + }
2188 + ChatRole::Assistant => {
2189 + // Wrap long assistant replies across multiple display lines.
2190 + let label = Span::styled("AI ", Style::new().fg(C_MUTED).bold());
2191 + let content_width =
2192 + (history_area.width as usize).saturating_sub(5 /* label */);
2193 + let words: Vec<&str> = msg.content.split_whitespace().collect();
2194 + let mut line_buf = String::new();
2195 + let mut first = true;
2196 + for word in &words {
2197 + if line_buf.len() + word.len() + 1 > content_width && !line_buf.is_empty() {
2198 + let prefix = if first {
2199 + label.clone()
2200 + } else {
2201 + Span::styled(" ", Style::new())
2202 + };
2203 + all_lines.push(Line::from(vec![
2204 + prefix,
2205 + Span::styled(line_buf.clone(), Style::new().fg(C_INK)),
2206 + ]));
2207 + line_buf.clear();
2208 + first = false;
2209 + }
2210 + if !line_buf.is_empty() {
2211 + line_buf.push(' ');
2212 + }
2213 + line_buf.push_str(word);
2214 + }
2215 + if !line_buf.is_empty() {
2216 + let prefix = if first {
2217 + label.clone()
2218 + } else {
2219 + Span::styled(" ", Style::new())
2220 + };
2221 + all_lines.push(Line::from(vec![
2222 + prefix,
2223 + Span::styled(line_buf, Style::new().fg(C_INK)),
2224 + ]));
2225 + }
2226 + // Blank separator between turns.
2227 + all_lines.push(Line::from(""));
2228 + }
2229 + }
2230 + }
2231 +
2232 + if app.chat_thinking {
2233 + all_lines.push(Line::from(vec![
2234 + Span::styled("AI ", Style::new().fg(C_MUTED).bold()),
2235 + Span::styled("▌", Style::new().fg(C_NEON)),
2236 + ]));
2237 + }
2238 +
2239 + // Scroll: show the last `max_visible_lines` worth of lines.
2240 + let start = all_lines.len().saturating_sub(max_visible_lines);
2241 + let visible: Vec<Line> = all_lines.into_iter().skip(start).collect();
2242 +
2243 + frame.render_widget(
2244 + Paragraph::new(visible).style(Style::new().fg(C_TEXT)),
2245 + history_area,
2246 + );
2247 + }
2248 +
2249 + // ── Input ─────────────────────────────────────────────────────────────────
2250 + let input_disabled = app.chat_loading || app.chat_thinking;
2251 + frame.render_widget(
2252 + Paragraph::new("Message").style(Style::new().fg(C_MUTED)),
2253 + rows[6],
2254 + );
2255 +
2256 + let border_style = if input_disabled {
2257 + Style::new().fg(C_LINE)
2258 + } else {
2259 + Style::new().fg(C_NEON)
2260 + };
2261 + let input_block = Block::new()
2262 + .borders(Borders::ALL)
2263 + .border_type(BorderType::Rounded)
2264 + .border_style(border_style)
2265 + .style(Style::new().bg(C_SURFACE_STRONG));
2266 + let input_inner = input_block.inner(rows[7]);
2267 + frame.render_widget(input_block, rows[7]);
2268 +
2269 + let display_text = if input_disabled {
2270 + if app.chat_loading {
2271 + "Loading model…".to_string()
2272 + } else {
2273 + "Thinking…".to_string()
2274 + }
2275 + } else {
2276 + app.chat_input.clone()
2277 + };
2278 +
2279 + let text_style = if input_disabled {
2280 + Style::new().fg(C_MUTED)
2281 + } else {
2282 + Style::new().fg(C_TEXT)
2283 + };
2284 + frame.render_widget(
2285 + Paragraph::new(display_text.as_str()).style(text_style),
2286 + input_inner,
2287 + );
2288 +
2289 + if !input_disabled {
2290 + let cursor_x = (input_inner.x + app.chat_input.chars().count() as u16)
2291 + .min(input_inner.x + input_inner.width.saturating_sub(1));
2292 + frame.set_cursor_position((cursor_x, input_inner.y));
2293 + }
2294 +
2295 + // ── Hint ──────────────────────────────────────────────────────────────────
2296 + let hint = if app.chat_loading || app.chat_thinking {
2297 + "Ctrl+C · quit"
2298 + } else {
2299 + "Enter · send ↑↓ · scroll Esc · back"
2300 + };
2301 + frame.render_widget(
2302 + Paragraph::new(hint).style(Style::new().fg(C_MUTED)),
2303 + rows[8],
2304 + );
2305 +}
2306 +
2307 fn render_footer(frame: &mut Frame, app: &App, area: Rect) {
2308 let keys: Vec<Span> = match app.screen {
2309 Screen::Auth => vec![
@@ -2266,9 +2451,34 @@ fn render_footer(frame: &mut Frame, app: &App, area: Rect) {
2451 Span::styled("Ctrl+C", Style::new().fg(C_NEON)),
2452 Span::styled(" · quit", Style::new().fg(C_MUTED)),
2453 ],
2269 - Screen::GgufDetail => vec![
2454 + Screen::GgufDetail => {
2455 + let uploadable = app
2456 + .selected_gguf
2457 + .as_ref()
2458 + .map(|g| g.is_uploadable())
2459 + .unwrap_or(false);
2460 + let mut keys = Vec::new();
2461 + if uploadable {
2462 + keys.push(Span::styled("Enter", Style::new().fg(C_NEON)));
2463 + keys.push(Span::styled(" · upload ", Style::new().fg(C_MUTED)));
2464 + }
2465 + keys.push(Span::styled("c", Style::new().fg(C_NEON)));
2466 + keys.push(Span::styled(" · chat ", Style::new().fg(C_MUTED)));
2467 + keys.push(Span::styled("Esc", Style::new().fg(C_NEON)));
2468 + keys.push(Span::styled(" · back ", Style::new().fg(C_MUTED)));
2469 + keys.push(Span::styled("Ctrl+C", Style::new().fg(C_NEON)));
2470 + keys.push(Span::styled(" · quit", Style::new().fg(C_MUTED)));
2471 + keys
2472 + }
2473 + Screen::Chat if app.chat_loading || app.chat_thinking => vec![
2474 + Span::styled("Ctrl+C", Style::new().fg(C_NEON)),
2475 + Span::styled(" · quit", Style::new().fg(C_MUTED)),
2476 + ],
2477 + Screen::Chat => vec![
2478 Span::styled("Enter", Style::new().fg(C_NEON)),
2271 - Span::styled(" · upload ", Style::new().fg(C_MUTED)),
2479 + Span::styled(" · send ", Style::new().fg(C_MUTED)),
2480 + Span::styled("↑↓", Style::new().fg(C_NEON)),
2481 + Span::styled(" · scroll ", Style::new().fg(C_MUTED)),
2482 Span::styled("Esc", Style::new().fg(C_NEON)),
2483 Span::styled(" · back ", Style::new().fg(C_MUTED)),
2484 Span::styled("Ctrl+C", Style::new().fg(C_NEON)),