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)),