git.delta.rocks / fleet / refs/commits / 7bc4be6bcef6

difftreelog

feat remowt integration

kyumtlkpYaroslav Bolyukin2026-06-05parent: #7bbada6.patch.diff

46 files changed

modifiedCargo.lockdiffbeforeafterboth
2# It is not intended for manual editing.2# It is not intended for manual editing.
3version = 43version = 4
4
5[[package]]
6name = "abort-on-drop"
7version = "0.2.2"
8source = "registry+https://github.com/rust-lang/crates.io-index"
9checksum = "5dd6d700ad9af641490c1f7d67980d2de4d1433016e5b12f819448d3c832142a"
10dependencies = [
11 "tokio",
12]
134
14[[package]]5[[package]]
15name = "adler2"6name = "adler2"
23source = "registry+https://github.com/rust-lang/crates.io-index"14source = "registry+https://github.com/rust-lang/crates.io-index"
24checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"15checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
25dependencies = [16dependencies = [
26 "crypto-common",17 "crypto-common 0.1.7",
27 "generic-array",18 "generic-array 0.14.7",
28]19]
20
21[[package]]
22name = "aead"
23version = "0.6.0"
24source = "registry+https://github.com/rust-lang/crates.io-index"
25checksum = "ef60ac202874e574ce7a7158cc8bca7313dd344322482e4fadee288bf4a306b8"
26dependencies = [
27 "crypto-common 0.2.2",
28 "inout 0.2.2",
29]
2930
30[[package]]31[[package]]
31name = "aes"32name = "aes"
34checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"35checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
35dependencies = [36dependencies = [
36 "cfg-if",37 "cfg-if",
37 "cipher",38 "cipher 0.4.4",
38 "cpufeatures 0.2.17",39 "cpufeatures 0.2.17",
39]40]
41
42[[package]]
43name = "aes"
44version = "0.9.1"
45source = "registry+https://github.com/rust-lang/crates.io-index"
46checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138"
47dependencies = [
48 "cipher 0.5.2",
49 "cpubits",
50 "cpufeatures 0.3.0",
51 "zeroize",
52]
4053
41[[package]]54[[package]]
42name = "aes-gcm"55name = "aes-gcm"
43version = "0.10.3"56version = "0.10.3"
44source = "registry+https://github.com/rust-lang/crates.io-index"57source = "registry+https://github.com/rust-lang/crates.io-index"
45checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"58checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
46dependencies = [59dependencies = [
47 "aead",60 "aead 0.5.2",
48 "aes",61 "aes 0.8.4",
49 "cipher",62 "cipher 0.4.4",
50 "ctr",63 "ctr 0.9.2",
51 "ghash",64 "ghash 0.5.1",
52 "subtle",65 "subtle",
53]66]
67
68[[package]]
69name = "aes-gcm"
70version = "0.11.0-rc.4"
71source = "registry+https://github.com/rust-lang/crates.io-index"
72checksum = "da8c919c118108f144adecad74b425b804ad075580d605d9b33c2d6d1c62a2f8"
73dependencies = [
74 "aead 0.6.0",
75 "aes 0.9.1",
76 "cipher 0.5.2",
77 "ctr 0.10.1",
78 "ghash 0.6.0",
79 "subtle",
80 "zeroize",
81]
5482
55[[package]]83[[package]]
56name = "age"84name = "age"
57version = "0.11.2"85version = "0.11.3"
58source = "registry+https://github.com/rust-lang/crates.io-index"86source = "registry+https://github.com/rust-lang/crates.io-index"
59checksum = "bf640be7658959746f1f0f2faab798f6098a9436a8e18e148d18bc9875e13c4b"87checksum = "a07d86e4272c093c88caf7864a2d09af52a5159180848ca4832a3cdbd7d014d5"
60dependencies = [88dependencies = [
61 "aes",89 "aes 0.8.4",
62 "aes-gcm",90 "aes-gcm 0.10.3",
63 "age-core",91 "age-core",
64 "base64 0.21.7",92 "base64 0.21.7",
65 "bcrypt-pbkdf",93 "bcrypt-pbkdf 0.10.0",
66 "bech32",94 "bech32",
67 "cbc",95 "cbc 0.1.2",
68 "chacha20poly1305",96 "chacha20poly1305",
69 "cipher",97 "cipher 0.4.4",
70 "cookie-factory",98 "cookie-factory",
71 "ctr",99 "ctr 0.9.2",
72 "curve25519-dalek",100 "curve25519-dalek 4.1.3",
73 "hmac",101 "hmac 0.12.1",
74 "i18n-embed",102 "i18n-embed",
75 "i18n-embed-fl",103 "i18n-embed-fl",
76 "lazy_static",104 "lazy_static",
77 "nom 7.1.3",105 "nom 7.1.3",
78 "num-traits",106 "num-traits",
79 "pin-project",107 "pin-project",
80 "rand 0.8.6",108 "rand 0.8.6",
81 "rsa",109 "rsa 0.9.10",
82 "rust-embed",110 "rust-embed",
83 "scrypt",111 "scrypt 0.11.0",
84 "sha2",112 "sha2 0.10.9",
85 "subtle",113 "subtle",
86 "which",114 "which",
87 "wsl",115 "wsl",
98 "base64 0.21.7",126 "base64 0.21.7",
99 "chacha20poly1305",127 "chacha20poly1305",
100 "cookie-factory",128 "cookie-factory",
101 "hkdf",129 "hkdf 0.12.4",
102 "io_tee",130 "io_tee",
103 "nom 7.1.3",131 "nom 7.1.3",
104 "rand 0.8.6",132 "rand 0.8.6",
105 "secrecy",133 "secrecy",
106 "sha2",134 "sha2 0.10.9",
107 "tempfile",135 "tempfile",
108]136]
109137
190 "rustversion",218 "rustversion",
191]219]
220
221[[package]]
222name = "argon2"
223version = "0.6.0-rc.8"
224source = "registry+https://github.com/rust-lang/crates.io-index"
225checksum = "7af50940b73bf4e16c15c448a2b121c63f2d68e3e54b6a8731673cb4aa0cdff5"
226dependencies = [
227 "base64ct",
228 "blake2",
229 "cpufeatures 0.3.0",
230 "password-hash",
231]
192232
193[[package]]233[[package]]
194name = "arrayvec"234name = "arrayvec"
197checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"237checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
198238
199[[package]]239[[package]]
200name = "async-stream"240name = "async-broadcast"
201version = "0.3.6"241version = "0.7.2"
202source = "registry+https://github.com/rust-lang/crates.io-index"242source = "registry+https://github.com/rust-lang/crates.io-index"
203checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"243checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
204dependencies = [244dependencies = [
245 "event-listener",
205 "async-stream-impl",246 "event-listener-strategy",
206 "futures-core",247 "futures-core",
207 "pin-project-lite",248 "pin-project-lite",
208]249]
250
251[[package]]
252name = "async-channel"
253version = "2.5.0"
254source = "registry+https://github.com/rust-lang/crates.io-index"
255checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
256dependencies = [
257 "concurrent-queue",
258 "event-listener-strategy",
259 "futures-core",
260 "pin-project-lite",
261]
262
263[[package]]
264name = "async-executor"
265version = "1.14.0"
266source = "registry+https://github.com/rust-lang/crates.io-index"
267checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
268dependencies = [
269 "async-task",
270 "concurrent-queue",
271 "fastrand",
272 "futures-lite",
273 "pin-project-lite",
274 "slab",
275]
276
277[[package]]
278name = "async-io"
279version = "2.6.0"
280source = "registry+https://github.com/rust-lang/crates.io-index"
281checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
282dependencies = [
283 "autocfg",
284 "cfg-if",
285 "concurrent-queue",
286 "futures-io",
287 "futures-lite",
288 "parking",
289 "polling",
290 "rustix 1.1.4",
291 "slab",
292 "windows-sys 0.61.2",
293]
294
295[[package]]
296name = "async-lock"
297version = "3.4.2"
298source = "registry+https://github.com/rust-lang/crates.io-index"
299checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
300dependencies = [
301 "event-listener",
302 "event-listener-strategy",
303 "pin-project-lite",
304]
305
306[[package]]
307name = "async-process"
308version = "2.5.0"
309source = "registry+https://github.com/rust-lang/crates.io-index"
310checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
311dependencies = [
312 "async-channel",
313 "async-io",
314 "async-lock",
315 "async-signal",
316 "async-task",
317 "blocking",
318 "cfg-if",
319 "event-listener",
320 "futures-lite",
321 "rustix 1.1.4",
322]
209323
210[[package]]324[[package]]
211name = "async-stream-impl"325name = "async-recursion"
212version = "0.3.6"326version = "1.1.1"
213source = "registry+https://github.com/rust-lang/crates.io-index"327source = "registry+https://github.com/rust-lang/crates.io-index"
214checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"328checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
215dependencies = [329dependencies = [
216 "proc-macro2",330 "proc-macro2",
217 "quote",331 "quote",
218 "syn",332 "syn 2.0.117",
219]333]
334
335[[package]]
336name = "async-signal"
337version = "0.2.14"
338source = "registry+https://github.com/rust-lang/crates.io-index"
339checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
340dependencies = [
341 "async-io",
342 "async-lock",
343 "atomic-waker",
344 "cfg-if",
345 "futures-core",
346 "futures-io",
347 "rustix 1.1.4",
348 "signal-hook-registry",
349 "slab",
350 "windows-sys 0.61.2",
351]
352
353[[package]]
354name = "async-task"
355version = "4.7.1"
356source = "registry+https://github.com/rust-lang/crates.io-index"
357checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
220358
221[[package]]359[[package]]
222name = "async-trait"360name = "async-trait"
226dependencies = [364dependencies = [
227 "proc-macro2",365 "proc-macro2",
228 "quote",366 "quote",
229 "syn",367 "syn 2.0.117",
230]368]
369
370[[package]]
371name = "async_fn_traits"
372version = "0.1.1"
373source = "registry+https://github.com/rust-lang/crates.io-index"
374checksum = "bc58d489c5f2d2c5be31b9004cec7af25a70d23df4d8111715eee736234cf217"
375dependencies = [
376 "paste",
377]
231378
232[[package]]379[[package]]
233name = "atomic-waker"380name = "atomic-waker"
237384
238[[package]]385[[package]]
239name = "autocfg"386name = "autocfg"
240version = "1.5.0"387version = "1.5.1"
241source = "registry+https://github.com/rust-lang/crates.io-index"388source = "registry+https://github.com/rust-lang/crates.io-index"
242checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"389checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
243
244[[package]]
245name = "axum"
246version = "0.7.9"
247source = "registry+https://github.com/rust-lang/crates.io-index"
248checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
249dependencies = [
250 "async-trait",
251 "axum-core",
252 "bytes",
253 "futures-util",
254 "http",
255 "http-body",
256 "http-body-util",
257 "itoa",
258 "matchit",
259 "memchr",
260 "mime",
261 "percent-encoding",
262 "pin-project-lite",
263 "rustversion",
264 "serde",
265 "sync_wrapper",
266 "tower 0.5.3",
267 "tower-layer",
268 "tower-service",
269]
270390
271[[package]]391[[package]]
272name = "axum-core"392name = "base16ct"
273version = "0.4.5"393version = "1.0.0"
274source = "registry+https://github.com/rust-lang/crates.io-index"394source = "registry+https://github.com/rust-lang/crates.io-index"
275checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199"395checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6"
276dependencies = [
277 "async-trait",
278 "bytes",
279 "futures-util",
280 "http",
281 "http-body",
282 "http-body-util",
283 "mime",
284 "pin-project-lite",
285 "rustversion",
286 "sync_wrapper",
287 "tower-layer",
288 "tower-service",
289]
290396
291[[package]]397[[package]]
292name = "base64"398name = "base64"
321source = "registry+https://github.com/rust-lang/crates.io-index"427source = "registry+https://github.com/rust-lang/crates.io-index"
322checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"428checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"
323dependencies = [429dependencies = [
324 "blowfish",430 "blowfish 0.9.1",
325 "pbkdf2",431 "pbkdf2 0.12.2",
326 "sha2",432 "sha2 0.10.9",
327]433]
434
435[[package]]
436name = "bcrypt-pbkdf"
437version = "0.11.0"
438source = "registry+https://github.com/rust-lang/crates.io-index"
439checksum = "144e573728da132683b9488acd528274c790e07fc06ff81ee29f9d8f8b1041e0"
440dependencies = [
441 "blowfish 0.10.0",
442 "pbkdf2 0.13.0",
443 "sha2 0.11.0",
444]
328445
329[[package]]446[[package]]
330name = "bech32"447name = "bech32"
333checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"450checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"
334451
335[[package]]452[[package]]
336name = "better-command"453name = "bifrostlink"
337version = "0.1.0"454version = "0.2.6"
455source = "registry+https://github.com/rust-lang/crates.io-index"
456checksum = "2fb01af731c11dd31b23783a83a36a29f644cc1972481f6fa4f4fabc709079eb"
338dependencies = [457dependencies = [
458 "async-trait",
459 "async_fn_traits",
460 "bifrostlink-macros",
339 "regex",461 "bytes",
462 "derivative",
463 "futures",
340 "serde",464 "serde",
341 "serde_json",465 "serde_json",
466 "tokio",
342 "tracing",467 "tracing",
343 "tracing-indicatif",468 "uuid",
344]469]
470
471[[package]]
472name = "bifrostlink-macros"
473version = "0.2.6"
474source = "registry+https://github.com/rust-lang/crates.io-index"
475checksum = "8c4b7a5fb38b36bd81910c17ebf369f9296e508d92b1277a768a63c8a2254fdb"
476dependencies = [
477 "proc-macro2",
478 "quote",
479 "syn 2.0.117",
480]
481
482[[package]]
483name = "bifrostlink-ports"
484version = "0.2.6"
485source = "registry+https://github.com/rust-lang/crates.io-index"
486checksum = "977acfcb8ed3c24ab7c2f76fb3eeebff1533c72708733ce6020f2501980b7cf2"
487dependencies = [
488 "bifrostlink",
489 "bytes",
490 "tokio",
491 "tracing",
492]
345493
346[[package]]494[[package]]
347name = "bindgen"495name = "bindgen"
359 "quote",507 "quote",
360 "regex",508 "regex",
361 "rustc-hash 2.1.2",509 "rustc-hash 2.1.2",
362 "shlex",510 "shlex 1.3.0",
363 "syn",511 "syn 2.0.117",
364]512]
365513
366[[package]]514[[package]]
367name = "bitflags"515name = "bitflags"
368version = "2.11.1"516version = "2.13.0"
369source = "registry+https://github.com/rust-lang/crates.io-index"517source = "registry+https://github.com/rust-lang/crates.io-index"
370checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"518checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
519
520[[package]]
521name = "blake2"
522version = "0.11.0-rc.6"
523source = "registry+https://github.com/rust-lang/crates.io-index"
524checksum = "061f1a09225e328e1ffbb378d2d49923c0ca5fee19fb5ac1cc9c1e9d52b93690"
525dependencies = [
526 "digest 0.11.3",
527]
371528
372[[package]]529[[package]]
373name = "block-buffer"530name = "block-buffer"
374version = "0.10.4"531version = "0.10.4"
375source = "registry+https://github.com/rust-lang/crates.io-index"532source = "registry+https://github.com/rust-lang/crates.io-index"
376checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"533checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
377dependencies = [534dependencies = [
378 "generic-array",535 "generic-array 0.14.7",
379]536]
537
538[[package]]
539name = "block-buffer"
540version = "0.12.1"
541source = "registry+https://github.com/rust-lang/crates.io-index"
542checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
543dependencies = [
544 "hybrid-array",
545 "zeroize",
546]
380547
381[[package]]548[[package]]
382name = "block-padding"549name = "block-padding"
383version = "0.3.3"550version = "0.3.3"
384source = "registry+https://github.com/rust-lang/crates.io-index"551source = "registry+https://github.com/rust-lang/crates.io-index"
385checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"552checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
386dependencies = [553dependencies = [
387 "generic-array",554 "generic-array 0.14.7",
388]555]
556
557[[package]]
558name = "block-padding"
559version = "0.4.2"
560source = "registry+https://github.com/rust-lang/crates.io-index"
561checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b"
562dependencies = [
563 "hybrid-array",
564]
565
566[[package]]
567name = "blocking"
568version = "1.6.2"
569source = "registry+https://github.com/rust-lang/crates.io-index"
570checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
571dependencies = [
572 "async-channel",
573 "async-task",
574 "futures-io",
575 "futures-lite",
576 "piper",
577]
389578
390[[package]]579[[package]]
391name = "blowfish"580name = "blowfish"
394checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"583checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
395dependencies = [584dependencies = [
396 "byteorder",585 "byteorder",
397 "cipher",586 "cipher 0.4.4",
398]587]
588
589[[package]]
590name = "blowfish"
591version = "0.10.0"
592source = "registry+https://github.com/rust-lang/crates.io-index"
593checksum = "62ce3946557b35e71d1bbe07ec385073ce9eda05043f95de134eb578fcf1a298"
594dependencies = [
595 "byteorder",
596 "cipher 0.5.2",
597]
598
599[[package]]
600name = "bstr"
601version = "1.12.1"
602source = "registry+https://github.com/rust-lang/crates.io-index"
603checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
604dependencies = [
605 "memchr",
606 "serde",
607]
399608
400[[package]]609[[package]]
401name = "bumpalo"610name = "bumpalo"
402version = "3.20.2"611version = "3.20.3"
403source = "registry+https://github.com/rust-lang/crates.io-index"612source = "registry+https://github.com/rust-lang/crates.io-index"
404checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"613checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
405614
406[[package]]615[[package]]
407name = "bytecount"616name = "bytecount"
421source = "registry+https://github.com/rust-lang/crates.io-index"630source = "registry+https://github.com/rust-lang/crates.io-index"
422checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"631checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
632
633[[package]]
634name = "camino"
635version = "1.2.2"
636source = "registry+https://github.com/rust-lang/crates.io-index"
637checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48"
638dependencies = [
639 "serde_core",
640]
423641
424[[package]]642[[package]]
425name = "cbc"643name = "cbc"
426version = "0.1.2"644version = "0.1.2"
427source = "registry+https://github.com/rust-lang/crates.io-index"645source = "registry+https://github.com/rust-lang/crates.io-index"
428checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"646checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
429dependencies = [647dependencies = [
430 "cipher",648 "cipher 0.4.4",
431]649]
650
651[[package]]
652name = "cbc"
653version = "0.2.1"
654source = "registry+https://github.com/rust-lang/crates.io-index"
655checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896"
656dependencies = [
657 "cipher 0.5.2",
658]
432659
433[[package]]660[[package]]
434name = "cc"661name = "cc"
435version = "1.2.60"662version = "1.2.64"
436source = "registry+https://github.com/rust-lang/crates.io-index"663source = "registry+https://github.com/rust-lang/crates.io-index"
437checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"664checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f"
438dependencies = [665dependencies = [
439 "find-msvc-tools",666 "find-msvc-tools",
440 "shlex",667 "shlex 2.0.1",
441]668]
442669
443[[package]]670[[package]]
468checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"695checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
469dependencies = [696dependencies = [
470 "cfg-if",697 "cfg-if",
471 "cipher",698 "cipher 0.4.4",
472 "cpufeatures 0.2.17",699 "cpufeatures 0.2.17",
473]700]
474701
479checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"706checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
480dependencies = [707dependencies = [
481 "cfg-if",708 "cfg-if",
709 "cipher 0.5.2",
482 "cpufeatures 0.3.0",710 "cpufeatures 0.3.0",
483 "rand_core 0.10.1",711 "rand_core 0.10.1",
712 "zeroize",
484]713]
485714
486[[package]]715[[package]]
489source = "registry+https://github.com/rust-lang/crates.io-index"718source = "registry+https://github.com/rust-lang/crates.io-index"
490checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"719checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
491dependencies = [720dependencies = [
492 "aead",721 "aead 0.5.2",
493 "chacha20 0.9.1",722 "chacha20 0.9.1",
494 "cipher",723 "cipher 0.4.4",
495 "poly1305",724 "poly1305 0.8.0",
496 "zeroize",725 "zeroize",
497]726]
498727
499[[package]]728[[package]]
500name = "chrono"729name = "chrono"
501version = "0.4.44"730version = "0.4.45"
502source = "registry+https://github.com/rust-lang/crates.io-index"731source = "registry+https://github.com/rust-lang/crates.io-index"
503checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"732checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
504dependencies = [733dependencies = [
505 "iana-time-zone",734 "iana-time-zone",
506 "js-sys",735 "js-sys",
516source = "registry+https://github.com/rust-lang/crates.io-index"745source = "registry+https://github.com/rust-lang/crates.io-index"
517checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"746checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
518dependencies = [747dependencies = [
519 "crypto-common",748 "crypto-common 0.1.7",
520 "inout",749 "inout 0.1.4",
521 "zeroize",750 "zeroize",
522]751]
752
753[[package]]
754name = "cipher"
755version = "0.5.2"
756source = "registry+https://github.com/rust-lang/crates.io-index"
757checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c"
758dependencies = [
759 "block-buffer 0.12.1",
760 "crypto-common 0.2.2",
761 "inout 0.2.2",
762 "zeroize",
763]
523764
524[[package]]765[[package]]
525name = "clang-sys"766name = "clang-sys"
559800
560[[package]]801[[package]]
561name = "clap_complete"802name = "clap_complete"
562version = "4.6.2"803version = "4.6.5"
563source = "registry+https://github.com/rust-lang/crates.io-index"804source = "registry+https://github.com/rust-lang/crates.io-index"
564checksum = "3ff7a1dccbdd8b078c2bdebff47e404615151534d5043da397ec50286816f9cb"805checksum = "e0a7a9bfdb35811f9e59832f0f05975114d2251b415fb534108e6f34060fd772"
565dependencies = [806dependencies = [
566 "clap",807 "clap",
567]808]
575 "heck",816 "heck",
576 "proc-macro2",817 "proc-macro2",
577 "quote",818 "quote",
578 "syn",819 "syn 2.0.117",
579]820]
580821
581[[package]]822[[package]]
584source = "registry+https://github.com/rust-lang/crates.io-index"825source = "registry+https://github.com/rust-lang/crates.io-index"
585checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"826checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
827
828[[package]]
829name = "cmov"
830version = "0.5.4"
831source = "registry+https://github.com/rust-lang/crates.io-index"
832checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
586833
587[[package]]834[[package]]
588name = "codespan-reporting"835name = "codespan-reporting"
601source = "registry+https://github.com/rust-lang/crates.io-index"848source = "registry+https://github.com/rust-lang/crates.io-index"
602checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"849checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
850
851[[package]]
852name = "concurrent-queue"
853version = "2.5.0"
854source = "registry+https://github.com/rust-lang/crates.io-index"
855checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
856dependencies = [
857 "crossbeam-utils",
858]
603859
604[[package]]860[[package]]
605name = "console"861name = "console"
615871
616[[package]]872[[package]]
617name = "const-hex"873name = "const-hex"
618version = "1.18.1"874version = "1.19.1"
619source = "registry+https://github.com/rust-lang/crates.io-index"875source = "registry+https://github.com/rust-lang/crates.io-index"
620checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b"876checksum = "33e2a781ebdf4467d1428dc4593067825fb646f6871475098d8577421af73558"
621dependencies = [877dependencies = [
622 "cfg-if",878 "cfg-if",
623 "cpufeatures 0.2.17",879 "cpufeatures 0.2.17",
631source = "registry+https://github.com/rust-lang/crates.io-index"887source = "registry+https://github.com/rust-lang/crates.io-index"
632checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"888checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
889
890[[package]]
891name = "const-oid"
892version = "0.10.2"
893source = "registry+https://github.com/rust-lang/crates.io-index"
894checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
633895
634[[package]]896[[package]]
635name = "cookie-factory"897name = "cookie-factory"
656source = "registry+https://github.com/rust-lang/crates.io-index"918source = "registry+https://github.com/rust-lang/crates.io-index"
657checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"919checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
920
921[[package]]
922name = "cpubits"
923version = "0.1.1"
924source = "registry+https://github.com/rust-lang/crates.io-index"
925checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"
658926
659[[package]]927[[package]]
660name = "cpufeatures"928name = "cpufeatures"
683 "cfg-if",951 "cfg-if",
684]952]
953
954[[package]]
955name = "crossbeam-utils"
956version = "0.8.21"
957source = "registry+https://github.com/rust-lang/crates.io-index"
958checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
959
960[[package]]
961name = "crypto-bigint"
962version = "0.7.3"
963source = "registry+https://github.com/rust-lang/crates.io-index"
964checksum = "42a0d26b245348befa0c121944541476763dcc46ede886c88f9d12e1697d27c3"
965dependencies = [
966 "cpubits",
967 "ctutils",
968 "getrandom 0.4.2",
969 "hybrid-array",
970 "num-traits",
971 "rand_core 0.10.1",
972 "serdect",
973 "subtle",
974 "zeroize",
975]
685976
686[[package]]977[[package]]
687name = "crypto-common"978name = "crypto-common"
688version = "0.1.7"979version = "0.1.7"
689source = "registry+https://github.com/rust-lang/crates.io-index"980source = "registry+https://github.com/rust-lang/crates.io-index"
690checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"981checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
691dependencies = [982dependencies = [
692 "generic-array",983 "generic-array 0.14.7",
693 "rand_core 0.6.4",984 "rand_core 0.6.4",
694 "typenum",985 "typenum",
695]986]
987
988[[package]]
989name = "crypto-common"
990version = "0.2.2"
991source = "registry+https://github.com/rust-lang/crates.io-index"
992checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
993dependencies = [
994 "getrandom 0.4.2",
995 "hybrid-array",
996 "rand_core 0.10.1",
997]
998
999[[package]]
1000name = "crypto-primes"
1001version = "0.7.2"
1002source = "registry+https://github.com/rust-lang/crates.io-index"
1003checksum = "3633a51a39c69ebbaa4feaa694bd83d241e4093901c84a0963b19d9bb3f0cf8f"
1004dependencies = [
1005 "crypto-bigint",
1006 "rand_core 0.10.1",
1007]
6961008
697[[package]]1009[[package]]
698name = "ctr"1010name = "ctr"
699version = "0.9.2"1011version = "0.9.2"
700source = "registry+https://github.com/rust-lang/crates.io-index"1012source = "registry+https://github.com/rust-lang/crates.io-index"
701checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"1013checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
702dependencies = [1014dependencies = [
703 "cipher",1015 "cipher 0.4.4",
704]1016]
1017
1018[[package]]
1019name = "ctr"
1020version = "0.10.1"
1021source = "registry+https://github.com/rust-lang/crates.io-index"
1022checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21"
1023dependencies = [
1024 "cipher 0.5.2",
1025]
1026
1027[[package]]
1028name = "ctutils"
1029version = "0.4.2"
1030source = "registry+https://github.com/rust-lang/crates.io-index"
1031checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"
1032dependencies = [
1033 "cmov",
1034 "subtle",
1035]
7051036
706[[package]]1037[[package]]
707name = "cursor-icon"1038name = "cursor-icon"
718 "cfg-if",1049 "cfg-if",
719 "cpufeatures 0.2.17",1050 "cpufeatures 0.2.17",
720 "curve25519-dalek-derive",1051 "curve25519-dalek-derive",
721 "digest",1052 "digest 0.10.7",
722 "fiat-crypto",1053 "fiat-crypto 0.2.9",
723 "rustc_version",1054 "rustc_version",
724 "subtle",1055 "subtle",
725 "zeroize",1056 "zeroize",
726]1057]
1058
1059[[package]]
1060name = "curve25519-dalek"
1061version = "5.0.0-rc.0"
1062source = "registry+https://github.com/rust-lang/crates.io-index"
1063checksum = "4f359e08ca85e7bd759e1fd933ff2bccd81864c60a8fba0e259c7f822b0924bf"
1064dependencies = [
1065 "cfg-if",
1066 "cpufeatures 0.3.0",
1067 "curve25519-dalek-derive",
1068 "digest 0.11.3",
1069 "fiat-crypto 0.3.0",
1070 "rustc_version",
1071 "subtle",
1072 "zeroize",
1073]
7271074
728[[package]]1075[[package]]
729name = "curve25519-dalek-derive"1076name = "curve25519-dalek-derive"
733dependencies = [1080dependencies = [
734 "proc-macro2",1081 "proc-macro2",
735 "quote",1082 "quote",
736 "syn",1083 "syn 2.0.117",
737]1084]
7381085
739[[package]]1086[[package]]
759dependencies = [1106dependencies = [
760 "cc",1107 "cc",
761 "codespan-reporting",1108 "codespan-reporting",
762 "indexmap 2.14.0",1109 "indexmap",
763 "proc-macro2",1110 "proc-macro2",
764 "quote",1111 "quote",
765 "scratch",1112 "scratch",
766 "syn",1113 "syn 2.0.117",
767]1114]
7681115
769[[package]]1116[[package]]
774dependencies = [1121dependencies = [
775 "clap",1122 "clap",
776 "codespan-reporting",1123 "codespan-reporting",
777 "indexmap 2.14.0",1124 "indexmap",
778 "proc-macro2",1125 "proc-macro2",
779 "quote",1126 "quote",
780 "syn",1127 "syn 2.0.117",
781]1128]
7821129
783[[package]]1130[[package]]
792source = "registry+https://github.com/rust-lang/crates.io-index"1139source = "registry+https://github.com/rust-lang/crates.io-index"
793checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf"1140checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf"
794dependencies = [1141dependencies = [
795 "indexmap 2.14.0",1142 "indexmap",
796 "proc-macro2",1143 "proc-macro2",
797 "quote",1144 "quote",
798 "syn",1145 "syn 2.0.117",
799]1146]
1147
1148[[package]]
1149name = "data-encoding"
1150version = "2.11.0"
1151source = "registry+https://github.com/rust-lang/crates.io-index"
1152checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
1153
1154[[package]]
1155name = "delegate"
1156version = "0.13.5"
1157source = "registry+https://github.com/rust-lang/crates.io-index"
1158checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370"
1159dependencies = [
1160 "proc-macro2",
1161 "quote",
1162 "syn 2.0.117",
1163]
8001164
801[[package]]1165[[package]]
802name = "der"1166name = "der"
803version = "0.7.10"1167version = "0.7.10"
804source = "registry+https://github.com/rust-lang/crates.io-index"1168source = "registry+https://github.com/rust-lang/crates.io-index"
805checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"1169checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
806dependencies = [1170dependencies = [
807 "const-oid",1171 "const-oid 0.9.6",
808 "zeroize",1172 "zeroize",
809]1173]
8101174
811[[package]]1175[[package]]
1176name = "der"
1177version = "0.8.0"
1178source = "registry+https://github.com/rust-lang/crates.io-index"
1179checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b"
1180dependencies = [
1181 "const-oid 0.10.2",
1182 "pem-rfc7468",
1183 "zeroize",
1184]
1185
1186[[package]]
812name = "deranged"1187name = "deranged"
813version = "0.5.8"1188version = "0.5.8"
814source = "registry+https://github.com/rust-lang/crates.io-index"1189source = "registry+https://github.com/rust-lang/crates.io-index"
815checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"1190checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
1191
1192[[package]]
1193name = "derivative"
1194version = "2.2.0"
1195source = "registry+https://github.com/rust-lang/crates.io-index"
1196checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
816dependencies = [1197dependencies = [
817 "powerfmt",1198 "proc-macro2",
818 "serde_core",1199 "quote",
1200 "syn 1.0.109",
819]1201]
1202
1203[[package]]
1204name = "des"
1205version = "0.9.0"
1206source = "registry+https://github.com/rust-lang/crates.io-index"
1207checksum = "916a94e407b54f9034d71dd748234cd1e516ced6284009906ae246f177eafe5a"
1208dependencies = [
1209 "cipher 0.5.2",
1210]
8201211
821[[package]]1212[[package]]
822name = "digest"1213name = "digest"
823version = "0.10.7"1214version = "0.10.7"
824source = "registry+https://github.com/rust-lang/crates.io-index"1215source = "registry+https://github.com/rust-lang/crates.io-index"
825checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"1216checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
826dependencies = [1217dependencies = [
827 "block-buffer",1218 "block-buffer 0.10.4",
828 "const-oid",1219 "const-oid 0.9.6",
829 "crypto-common",1220 "crypto-common 0.1.7",
830 "subtle",1221 "subtle",
831]1222]
1223
1224[[package]]
1225name = "digest"
1226version = "0.11.3"
1227source = "registry+https://github.com/rust-lang/crates.io-index"
1228checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
1229dependencies = [
1230 "block-buffer 0.12.1",
1231 "const-oid 0.10.2",
1232 "crypto-common 0.2.2",
1233 "ctutils",
1234]
8321235
833[[package]]1236[[package]]
834name = "displaydoc"1237name = "displaydoc"
835version = "0.2.5"1238version = "0.2.6"
836source = "registry+https://github.com/rust-lang/crates.io-index"1239source = "registry+https://github.com/rust-lang/crates.io-index"
837checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"1240checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
838dependencies = [1241dependencies = [
839 "proc-macro2",1242 "proc-macro2",
840 "quote",1243 "quote",
841 "syn",1244 "syn 2.0.117",
842]1245]
1246
1247[[package]]
1248name = "ecdsa"
1249version = "0.17.0-rc.18"
1250source = "registry+https://github.com/rust-lang/crates.io-index"
1251checksum = "54fb064faabbee66e1fc8e5c5a9458d4269dc2d8b638fe86a425adb2510d1a96"
1252dependencies = [
1253 "der 0.8.0",
1254 "digest 0.11.3",
1255 "elliptic-curve",
1256 "rfc6979",
1257 "signature 3.0.0",
1258 "spki 0.8.0",
1259 "zeroize",
1260]
8431261
844[[package]]1262[[package]]
845name = "ed25519"1263name = "ed25519"
846version = "2.2.3"1264version = "2.2.3"
847source = "registry+https://github.com/rust-lang/crates.io-index"1265source = "registry+https://github.com/rust-lang/crates.io-index"
848checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"1266checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
849dependencies = [1267dependencies = [
850 "pkcs8",1268 "pkcs8 0.10.2",
851 "signature",1269 "signature 2.2.0",
852]1270]
1271
1272[[package]]
1273name = "ed25519"
1274version = "3.0.0"
1275source = "registry+https://github.com/rust-lang/crates.io-index"
1276checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a"
1277dependencies = [
1278 "pkcs8 0.11.0",
1279 "signature 3.0.0",
1280]
8531281
854[[package]]1282[[package]]
855name = "ed25519-dalek"1283name = "ed25519-dalek"
856version = "2.2.0"1284version = "2.2.0"
857source = "registry+https://github.com/rust-lang/crates.io-index"1285source = "registry+https://github.com/rust-lang/crates.io-index"
858checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"1286checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
859dependencies = [1287dependencies = [
860 "curve25519-dalek",1288 "curve25519-dalek 4.1.3",
861 "ed25519",1289 "ed25519 2.2.3",
862 "serde",1290 "serde",
863 "sha2",1291 "sha2 0.10.9",
864 "subtle",1292 "subtle",
865 "zeroize",1293 "zeroize",
866]1294]
1295
1296[[package]]
1297name = "ed25519-dalek"
1298version = "3.0.0-rc.0"
1299source = "registry+https://github.com/rust-lang/crates.io-index"
1300checksum = "b011170fe4f04665565b4110afef66774fe9ffff278f3eb5b81cc73d26e27d60"
1301dependencies = [
1302 "curve25519-dalek 5.0.0-rc.0",
1303 "ed25519 3.0.0",
1304 "rand_core 0.10.1",
1305 "serde",
1306 "sha2 0.11.0",
1307 "signature 3.0.0",
1308 "subtle",
1309 "zeroize",
1310]
8671311
868[[package]]1312[[package]]
869name = "either"1313name = "either"
870version = "1.15.0"1314version = "1.16.0"
871source = "registry+https://github.com/rust-lang/crates.io-index"1315source = "registry+https://github.com/rust-lang/crates.io-index"
872checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"1316checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
1317
1318[[package]]
1319name = "elliptic-curve"
1320version = "0.14.0-rc.33"
1321source = "registry+https://github.com/rust-lang/crates.io-index"
1322checksum = "102d3643d30dd8b559613c5cced68317199597fffb278cdc88daa2ef7fafc935"
1323dependencies = [
1324 "base16ct",
1325 "crypto-bigint",
1326 "crypto-common 0.2.2",
1327 "digest 0.11.3",
1328 "ff",
1329 "group",
1330 "hkdf 0.13.0",
1331 "hybrid-array",
1332 "once_cell",
1333 "pem-rfc7468",
1334 "pkcs8 0.11.0",
1335 "rand_core 0.10.1",
1336 "sec1",
1337 "subtle",
1338 "zeroize",
1339]
8731340
874[[package]]1341[[package]]
875name = "encode_unicode"1342name = "encode_unicode"
876version = "1.0.0"1343version = "1.0.0"
877source = "registry+https://github.com/rust-lang/crates.io-index"1344source = "registry+https://github.com/rust-lang/crates.io-index"
878checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"1345checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
1346
1347[[package]]
1348name = "endi"
1349version = "1.1.1"
1350source = "registry+https://github.com/rust-lang/crates.io-index"
1351checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
1352
1353[[package]]
1354name = "enum_dispatch"
1355version = "0.3.13"
1356source = "registry+https://github.com/rust-lang/crates.io-index"
1357checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd"
1358dependencies = [
1359 "once_cell",
1360 "proc-macro2",
1361 "quote",
1362 "syn 2.0.117",
1363]
1364
1365[[package]]
1366name = "enumflags2"
1367version = "0.7.12"
1368source = "registry+https://github.com/rust-lang/crates.io-index"
1369checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
1370dependencies = [
1371 "enumflags2_derive",
1372 "serde",
1373]
1374
1375[[package]]
1376name = "enumflags2_derive"
1377version = "0.7.12"
1378source = "registry+https://github.com/rust-lang/crates.io-index"
1379checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
1380dependencies = [
1381 "proc-macro2",
1382 "quote",
1383 "syn 2.0.117",
1384]
8791385
880[[package]]1386[[package]]
881name = "env_filter"1387name = "env_filter"
914 "windows-sys 0.61.2",1420 "windows-sys 0.61.2",
915]1421]
1422
1423[[package]]
1424name = "event-listener"
1425version = "5.4.1"
1426source = "registry+https://github.com/rust-lang/crates.io-index"
1427checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
1428dependencies = [
1429 "concurrent-queue",
1430 "parking",
1431 "pin-project-lite",
1432]
1433
1434[[package]]
1435name = "event-listener-strategy"
1436version = "0.5.4"
1437source = "registry+https://github.com/rust-lang/crates.io-index"
1438checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
1439dependencies = [
1440 "event-listener",
1441 "pin-project-lite",
1442]
9161443
917[[package]]1444[[package]]
918name = "fastrand"1445name = "fastrand"
919version = "2.4.1"1446version = "2.4.1"
920source = "registry+https://github.com/rust-lang/crates.io-index"1447source = "registry+https://github.com/rust-lang/crates.io-index"
921checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"1448checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
1449
1450[[package]]
1451name = "ff"
1452version = "0.14.0"
1453source = "registry+https://github.com/rust-lang/crates.io-index"
1454checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f"
1455dependencies = [
1456 "rand_core 0.10.1",
1457 "subtle",
1458]
9221459
923[[package]]1460[[package]]
924name = "fiat-crypto"1461name = "fiat-crypto"
925version = "0.2.9"1462version = "0.2.9"
926source = "registry+https://github.com/rust-lang/crates.io-index"1463source = "registry+https://github.com/rust-lang/crates.io-index"
927checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"1464checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
1465
1466[[package]]
1467name = "fiat-crypto"
1468version = "0.3.0"
1469source = "registry+https://github.com/rust-lang/crates.io-index"
1470checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"
9281471
929[[package]]1472[[package]]
930name = "find-crate"1473name = "find-crate"
941source = "registry+https://github.com/rust-lang/crates.io-index"1484source = "registry+https://github.com/rust-lang/crates.io-index"
942checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"1485checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
943
944[[package]]
945name = "fixedbitset"
946version = "0.5.7"
947source = "registry+https://github.com/rust-lang/crates.io-index"
948checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
9491486
950[[package]]1487[[package]]
951name = "flate2"1488name = "flate2"
961name = "fleet"1498name = "fleet"
962version = "0.2.0"1499version = "0.2.0"
963dependencies = [1500dependencies = [
964 "abort-on-drop",
965 "age",
966 "age-core",
967 "anyhow",1501 "anyhow",
968 "async-trait",
969 "base64 0.22.1",
970 "better-command",
971 "chrono",1502 "camino",
972 "clap",1503 "clap",
973 "clap_complete",1504 "clap_complete",
974 "fleet-base",1505 "fleet-base",
975 "fleet-shared",
976 "futures",1506 "futures",
977 "hostname",
978 "human-repr",1507 "human-repr",
979 "indicatif",1508 "indicatif",
980 "itertools 0.14.0",1509 "itertools 0.14.0",
981 "nix-eval",1510 "nix-eval",
982 "nixlike",
983 "nom 8.0.0",
984 "openssh",
985 "opentelemetry",1511 "opentelemetry",
986 "opentelemetry-appender-tracing",1512 "opentelemetry-appender-tracing",
987 "opentelemetry-exporter-env",1513 "opentelemetry-exporter-env",
988 "opentelemetry_sdk",1514 "opentelemetry_sdk",
989 "peg",
990 "regex",1515 "remowt-fleet",
991 "serde",1516 "serde",
992 "serde_json",1517 "serde_json",
993 "shlex",1518 "shlex 1.3.0",
994 "tabled",1519 "tabled",
995 "tempfile",1520 "tempfile",
996 "thiserror 2.0.18",
997 "time",
998 "tokio",1521 "tokio",
999 "tokio-util",
1000 "tracing",1522 "tracing",
1001 "tracing-indicatif",1523 "tracing-indicatif",
1002 "tracing-opentelemetry",1524 "tracing-opentelemetry",
1009dependencies = [1531dependencies = [
1010 "age",1532 "age",
1011 "anyhow",1533 "anyhow",
1012 "better-command",1534 "camino",
1013 "chrono",1535 "chrono",
1014 "clap",1536 "clap",
1015 "fleet-shared",1537 "fleet-shared",
1020 "nix-eval",1542 "nix-eval",
1021 "nixlike",1543 "nixlike",
1022 "nom 8.0.0",1544 "nom 8.0.0",
1023 "openssh",
1024 "rand 0.10.1",1545 "rand 0.10.1",
1546 "remowt-client",
1547 "remowt-endpoints",
1548 "remowt-fleet",
1549 "remowt-link-shared",
1550 "remowt-ui-prompt",
1025 "serde",1551 "serde",
1026 "serde_json",1552 "serde_json",
1027 "tabled",1553 "tabled",
1028 "tempfile",1554 "tempfile",
1029 "thiserror 2.0.18",
1030 "time",1555 "time",
1031 "tokio",1556 "tokio",
1032 "tokio-util",
1033 "toml_edit",
1034 "tracing",1557 "tracing",
1035]1558]
10361559
1042 "anyhow",1565 "anyhow",
1043 "base64 0.22.1",1566 "base64 0.22.1",
1044 "clap",1567 "clap",
1045 "ed25519-dalek",1568 "ed25519-dalek 2.2.0",
1046 "fleet-shared",1569 "fleet-shared",
1047 "hex",1570 "hex",
1048 "hmac",1571 "hmac 0.12.1",
1049 "pbkdf2",1572 "pbkdf2 0.12.2",
1050 "rand 0.10.1",1573 "rand 0.10.1",
1051 "sha2",1574 "sha2 0.10.9",
1052 "x25519-dalek",1575 "x25519-dalek",
1053]1576]
10541577
1196source = "registry+https://github.com/rust-lang/crates.io-index"1719source = "registry+https://github.com/rust-lang/crates.io-index"
1197checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"1720checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
1721
1722[[package]]
1723name = "futures-lite"
1724version = "2.6.1"
1725source = "registry+https://github.com/rust-lang/crates.io-index"
1726checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1727dependencies = [
1728 "fastrand",
1729 "futures-core",
1730 "futures-io",
1731 "parking",
1732 "pin-project-lite",
1733]
11981734
1199[[package]]1735[[package]]
1200name = "futures-macro"1736name = "futures-macro"
1204dependencies = [1740dependencies = [
1205 "proc-macro2",1741 "proc-macro2",
1206 "quote",1742 "quote",
1207 "syn",1743 "syn 2.0.117",
1208]1744]
12091745
1210[[package]]1746[[package]]
1246 "version_check",1782 "version_check",
1247]1783]
1784
1785[[package]]
1786name = "generic-array"
1787version = "1.4.3"
1788source = "registry+https://github.com/rust-lang/crates.io-index"
1789checksum = "c2e55f16dcf0e9c00efbe2e655ffe45fc98e7066b52bc92f8a79e64060a79351"
1790dependencies = [
1791 "generic-array 0.14.7",
1792 "rustversion",
1793 "typenum",
1794]
12481795
1249[[package]]1796[[package]]
1250name = "getrandom"1797name = "getrandom"
1280checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"1827checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
1281dependencies = [1828dependencies = [
1282 "cfg-if",1829 "cfg-if",
1830 "js-sys",
1283 "libc",1831 "libc",
1284 "r-efi 6.0.0",1832 "r-efi 6.0.0",
1285 "rand_core 0.10.1",1833 "rand_core 0.10.1",
1286 "wasip2",1834 "wasip2",
1287 "wasip3",1835 "wasip3",
1836 "wasm-bindgen",
1288]1837]
12891838
1290[[package]]1839[[package]]
1294checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1"1843checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1"
1295dependencies = [1844dependencies = [
1296 "opaque-debug",1845 "opaque-debug",
1297 "polyval",1846 "polyval 0.6.2",
1298]1847]
1848
1849[[package]]
1850name = "ghash"
1851version = "0.6.0"
1852source = "registry+https://github.com/rust-lang/crates.io-index"
1853checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5"
1854dependencies = [
1855 "polyval 0.7.1",
1856]
12991857
1300[[package]]1858[[package]]
1301name = "glob"1859name = "glob"
1304checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"1862checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
13051863
1306[[package]]1864[[package]]
1307name = "h2"1865name = "globset"
1308version = "0.4.13"1866version = "0.4.18"
1309source = "registry+https://github.com/rust-lang/crates.io-index"1867source = "registry+https://github.com/rust-lang/crates.io-index"
1310checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"1868checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3"
1311dependencies = [1869dependencies = [
1312 "atomic-waker",1870 "aho-corasick",
1313 "bytes",1871 "bstr",
1314 "fnv",
1315 "futures-core",
1316 "futures-sink",
1317 "http",
1318 "indexmap 2.14.0",
1319 "slab",1872 "log",
1320 "tokio",1873 "regex-automata",
1321 "tokio-util",1874 "regex-syntax",
1322 "tracing",
1323]1875]
13241876
1325[[package]]1877[[package]]
1326name = "hashbrown"1878name = "group"
1327version = "0.12.3"1879version = "0.14.0"
1328source = "registry+https://github.com/rust-lang/crates.io-index"1880source = "registry+https://github.com/rust-lang/crates.io-index"
1329checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"1881checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4"
1882dependencies = [
1883 "ff",
1884 "rand_core 0.10.1",
1885 "subtle",
1886]
1887
1888[[package]]
1889name = "h2"
1890version = "0.4.14"
1891source = "registry+https://github.com/rust-lang/crates.io-index"
1892checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733"
1893dependencies = [
1894 "atomic-waker",
1895 "bytes",
1896 "fnv",
1897 "futures-core",
1898 "futures-sink",
1899 "http",
1900 "indexmap",
1901 "slab",
1902 "tokio",
1903 "tokio-util",
1904 "tracing",
1905]
13301906
1331[[package]]1907[[package]]
1332name = "hashbrown"1908name = "hashbrown"
13391915
1340[[package]]1916[[package]]
1341name = "hashbrown"1917name = "hashbrown"
1342version = "0.17.0"1918version = "0.17.1"
1343source = "registry+https://github.com/rust-lang/crates.io-index"1919source = "registry+https://github.com/rust-lang/crates.io-index"
1344checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"1920checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
13451921
1346[[package]]1922[[package]]
1347name = "heck"1923name = "heck"
1348version = "0.5.0"1924version = "0.5.0"
1349source = "registry+https://github.com/rust-lang/crates.io-index"1925source = "registry+https://github.com/rust-lang/crates.io-index"
1350checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"1926checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1927
1928[[package]]
1929name = "hermit-abi"
1930version = "0.5.2"
1931source = "registry+https://github.com/rust-lang/crates.io-index"
1932checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
13511933
1352[[package]]1934[[package]]
1353name = "hex"1935name = "hex"
1354version = "0.4.3"1936version = "0.4.3"
1355source = "registry+https://github.com/rust-lang/crates.io-index"1937source = "registry+https://github.com/rust-lang/crates.io-index"
1356checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"1938checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1939
1940[[package]]
1941name = "hex-literal"
1942version = "1.1.0"
1943source = "registry+https://github.com/rust-lang/crates.io-index"
1944checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1"
13571945
1358[[package]]1946[[package]]
1359name = "hkdf"1947name = "hkdf"
1360version = "0.12.4"1948version = "0.12.4"
1361source = "registry+https://github.com/rust-lang/crates.io-index"1949source = "registry+https://github.com/rust-lang/crates.io-index"
1362checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"1950checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
1363dependencies = [1951dependencies = [
1364 "hmac",1952 "hmac 0.12.1",
1365]1953]
1954
1955[[package]]
1956name = "hkdf"
1957version = "0.13.0"
1958source = "registry+https://github.com/rust-lang/crates.io-index"
1959checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018"
1960dependencies = [
1961 "hmac 0.13.0",
1962]
13661963
1367[[package]]1964[[package]]
1368name = "hmac"1965name = "hmac"
1369version = "0.12.1"1966version = "0.12.1"
1370source = "registry+https://github.com/rust-lang/crates.io-index"1967source = "registry+https://github.com/rust-lang/crates.io-index"
1371checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"1968checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1372dependencies = [1969dependencies = [
1373 "digest",1970 "digest 0.10.7",
1374]1971]
1972
1973[[package]]
1974name = "hmac"
1975version = "0.13.0"
1976source = "registry+https://github.com/rust-lang/crates.io-index"
1977checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
1978dependencies = [
1979 "digest 0.11.3",
1980]
13751981
1376[[package]]1982[[package]]
1377name = "home"1983name = "home"
13952001
1396[[package]]2002[[package]]
1397name = "http"2003name = "http"
1398version = "1.4.0"2004version = "1.4.2"
1399source = "registry+https://github.com/rust-lang/crates.io-index"2005source = "registry+https://github.com/rust-lang/crates.io-index"
1400checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"2006checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
1401dependencies = [2007dependencies = [
1402 "bytes",2008 "bytes",
1403 "itoa",2009 "itoa",
1432source = "registry+https://github.com/rust-lang/crates.io-index"2038source = "registry+https://github.com/rust-lang/crates.io-index"
1433checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"2039checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1434
1435[[package]]
1436name = "httpdate"
1437version = "1.0.3"
1438source = "registry+https://github.com/rust-lang/crates.io-index"
1439checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
14402040
1441[[package]]2041[[package]]
1442name = "human-repr"2042name = "human-repr"
1443version = "1.1.0"2043version = "1.1.0"
1444source = "registry+https://github.com/rust-lang/crates.io-index"2044source = "registry+https://github.com/rust-lang/crates.io-index"
1445checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1"2045checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1"
2046
2047[[package]]
2048name = "hybrid-array"
2049version = "0.4.12"
2050source = "registry+https://github.com/rust-lang/crates.io-index"
2051checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
2052dependencies = [
2053 "ctutils",
2054 "subtle",
2055 "typenum",
2056 "zeroize",
2057]
14462058
1447[[package]]2059[[package]]
1448name = "hyper"2060name = "hyper"
1449version = "1.9.0"2061version = "1.10.1"
1450source = "registry+https://github.com/rust-lang/crates.io-index"2062source = "registry+https://github.com/rust-lang/crates.io-index"
1451checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"2063checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498"
1452dependencies = [2064dependencies = [
1453 "atomic-waker",2065 "atomic-waker",
1454 "bytes",2066 "bytes",
1458 "http",2070 "http",
1459 "http-body",2071 "http-body",
1460 "httparse",2072 "httparse",
1461 "httpdate",
1462 "itoa",2073 "itoa",
1463 "pin-project-lite",2074 "pin-project-lite",
1464 "smallvec",2075 "smallvec",
1512 "libc",2123 "libc",
1513 "percent-encoding",2124 "percent-encoding",
1514 "pin-project-lite",2125 "pin-project-lite",
1515 "socket2 0.6.3",2126 "socket2",
1516 "tokio",2127 "tokio",
1517 "tower-service",2128 "tower-service",
1518 "tracing",2129 "tracing",
1567 "proc-macro2",2178 "proc-macro2",
1568 "quote",2179 "quote",
1569 "strsim",2180 "strsim",
1570 "syn",2181 "syn 2.0.117",
1571 "unic-langid",2182 "unic-langid",
1572]2183]
15732184
1581 "i18n-config",2192 "i18n-config",
1582 "proc-macro2",2193 "proc-macro2",
1583 "quote",2194 "quote",
1584 "syn",2195 "syn 2.0.117",
1585]2196]
15862197
1587[[package]]2198[[package]]
17092320
1710[[package]]2321[[package]]
1711name = "idna_adapter"2322name = "idna_adapter"
1712version = "1.2.1"2323version = "1.2.2"
1713source = "registry+https://github.com/rust-lang/crates.io-index"2324source = "registry+https://github.com/rust-lang/crates.io-index"
1714checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"2325checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
1715dependencies = [2326dependencies = [
1716 "icu_normalizer",2327 "icu_normalizer",
1717 "icu_properties",2328 "icu_properties",
1718]2329]
1719
1720[[package]]
1721name = "indexmap"
1722version = "1.9.3"
1723source = "registry+https://github.com/rust-lang/crates.io-index"
1724checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
1725dependencies = [
1726 "autocfg",
1727 "hashbrown 0.12.3",
1728]
17292330
1730[[package]]2331[[package]]
1731name = "indexmap"2332name = "indexmap"
1734checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"2335checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
1735dependencies = [2336dependencies = [
1736 "equivalent",2337 "equivalent",
1737 "hashbrown 0.17.0",2338 "hashbrown 0.17.1",
1738 "serde",2339 "serde",
1739 "serde_core",2340 "serde_core",
1740]2341]
1768source = "registry+https://github.com/rust-lang/crates.io-index"2369source = "registry+https://github.com/rust-lang/crates.io-index"
1769checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"2370checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
1770dependencies = [2371dependencies = [
1771 "block-padding",2372 "block-padding 0.3.3",
1772 "generic-array",2373 "generic-array 0.14.7",
1773]2374]
2375
2376[[package]]
2377name = "inout"
2378version = "0.2.2"
2379source = "registry+https://github.com/rust-lang/crates.io-index"
2380checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"
2381dependencies = [
2382 "block-padding 0.4.2",
2383 "hybrid-array",
2384]
2385
2386[[package]]
2387name = "internal-russh-num-bigint"
2388version = "0.5.0"
2389source = "registry+https://github.com/rust-lang/crates.io-index"
2390checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8"
2391dependencies = [
2392 "num-integer",
2393 "num-traits",
2394 "rand 0.10.1",
2395 "rand_core 0.10.1",
2396]
17742397
1775[[package]]2398[[package]]
1776name = "intl-memoizer"2399name = "intl-memoizer"
1803source = "registry+https://github.com/rust-lang/crates.io-index"2426source = "registry+https://github.com/rust-lang/crates.io-index"
1804checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"2427checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
1805
1806[[package]]
1807name = "iri-string"
1808version = "0.7.12"
1809source = "registry+https://github.com/rust-lang/crates.io-index"
1810checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
1811dependencies = [
1812 "memchr",
1813 "serde",
1814]
18152428
1816[[package]]2429[[package]]
1817name = "is_terminal_polyfill"2430name = "is_terminal_polyfill"
18452458
1846[[package]]2459[[package]]
1847name = "js-sys"2460name = "js-sys"
1848version = "0.3.95"2461version = "0.3.102"
1849source = "registry+https://github.com/rust-lang/crates.io-index"2462source = "registry+https://github.com/rust-lang/crates.io-index"
1850checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"2463checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
1851dependencies = [2464dependencies = [
1852 "cfg-if",2465 "cfg-if",
1853 "futures-util",2466 "futures-util",
1854 "once_cell",
1855 "wasm-bindgen",2467 "wasm-bindgen",
1856]2468]
2469
2470[[package]]
2471name = "keccak"
2472version = "0.2.0"
2473source = "registry+https://github.com/rust-lang/crates.io-index"
2474checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa"
2475dependencies = [
2476 "cfg-if",
2477 "cpufeatures 0.3.0",
2478]
2479
2480[[package]]
2481name = "kem"
2482version = "0.3.0"
2483source = "registry+https://github.com/rust-lang/crates.io-index"
2484checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd"
2485dependencies = [
2486 "crypto-common 0.2.2",
2487 "rand_core 0.10.1",
2488]
18572489
1858[[package]]2490[[package]]
1859name = "lazy_static"2491name = "lazy_static"
18722504
1873[[package]]2505[[package]]
1874name = "libc"2506name = "libc"
1875version = "0.2.185"2507version = "0.2.186"
1876source = "registry+https://github.com/rust-lang/crates.io-index"2508source = "registry+https://github.com/rust-lang/crates.io-index"
1877checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"2509checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
18782510
1879[[package]]2511[[package]]
1880name = "libloading"2512name = "libloading"
1892source = "registry+https://github.com/rust-lang/crates.io-index"2524source = "registry+https://github.com/rust-lang/crates.io-index"
1893checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"2525checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
2526
2527[[package]]
2528name = "libredox"
2529version = "0.1.17"
2530source = "registry+https://github.com/rust-lang/crates.io-index"
2531checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
2532dependencies = [
2533 "bitflags",
2534 "libc",
2535 "plain",
2536 "redox_syscall 0.8.1",
2537]
18942538
1895[[package]]2539[[package]]
1896name = "link-cplusplus"2540name = "link-cplusplus"
19362580
1937[[package]]2581[[package]]
1938name = "log"2582name = "log"
1939version = "0.4.29"2583version = "0.4.32"
1940source = "registry+https://github.com/rust-lang/crates.io-index"2584source = "registry+https://github.com/rust-lang/crates.io-index"
1941checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"2585checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
19422586
1943[[package]]2587[[package]]
1944name = "lru-slab"2588name = "lru-slab"
1956]2600]
19572601
1958[[package]]2602[[package]]
1959name = "matchit"2603name = "md5"
1960version = "0.7.3"2604version = "0.8.0"
1961source = "registry+https://github.com/rust-lang/crates.io-index"2605source = "registry+https://github.com/rust-lang/crates.io-index"
1962checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"2606checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
19632607
1964[[package]]2608[[package]]
1965name = "memchr"2609name = "memchr"
1966version = "2.8.0"2610version = "2.8.2"
1967source = "registry+https://github.com/rust-lang/crates.io-index"2611source = "registry+https://github.com/rust-lang/crates.io-index"
1968checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"2612checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
19692613
1970[[package]]2614[[package]]
1971name = "mime"2615name = "memoffset"
1972version = "0.3.17"2616version = "0.9.1"
1973source = "registry+https://github.com/rust-lang/crates.io-index"2617source = "registry+https://github.com/rust-lang/crates.io-index"
1974checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"2618checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
2619dependencies = [
2620 "autocfg",
2621]
19752622
1976[[package]]2623[[package]]
1977name = "minimal-lexical"2624name = "minimal-lexical"
19912638
1992[[package]]2639[[package]]
1993name = "mio"2640name = "mio"
1994version = "1.2.0"2641version = "1.2.1"
1995source = "registry+https://github.com/rust-lang/crates.io-index"2642source = "registry+https://github.com/rust-lang/crates.io-index"
1996checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"2643checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
1997dependencies = [2644dependencies = [
1998 "libc",2645 "libc",
1999 "wasi",2646 "wasi",
2000 "windows-sys 0.61.2",2647 "windows-sys 0.61.2",
2001]2648]
20022649
2003[[package]]2650[[package]]
2004name = "multimap"2651name = "ml-kem"
2005version = "0.10.1"2652version = "0.3.2"
2006source = "registry+https://github.com/rust-lang/crates.io-index"2653source = "registry+https://github.com/rust-lang/crates.io-index"
2007checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"2654checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66"
2655dependencies = [
2656 "hybrid-array",
2657 "kem",
2658 "module-lattice",
2659 "pkcs8 0.11.0",
2660 "rand_core 0.10.1",
2661 "sha3",
2662]
2663
2664[[package]]
2665name = "module-lattice"
2666version = "0.2.3"
2667source = "registry+https://github.com/rust-lang/crates.io-index"
2668checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe"
2669dependencies = [
2670 "ctutils",
2671 "hybrid-array",
2672 "num-traits",
2673]
20082674
2009[[package]]2675[[package]]
2010name = "nix"2676name = "nix"
2011version = "0.31.2"2677version = "0.31.3"
2012source = "registry+https://github.com/rust-lang/crates.io-index"2678source = "registry+https://github.com/rust-lang/crates.io-index"
2013checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3"2679checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
2014dependencies = [2680dependencies = [
2015 "bitflags",2681 "bitflags",
2016 "cfg-if",2682 "cfg-if",
2024dependencies = [2690dependencies = [
2025 "anyhow",2691 "anyhow",
2026 "bindgen",2692 "bindgen",
2693 "camino",
2027 "cxx",2694 "cxx",
2028 "cxx-build",2695 "cxx-build",
2696 "futures",
2029 "itertools 0.14.0",2697 "itertools 0.14.0",
2030 "nixlike",2698 "nixlike",
2031 "pkg-config",2699 "pkg-config",
2032 "serde",2700 "serde",
2033 "serde_json",2701 "serde_json",
2034 "test-log",2702 "test-log",
2035 "thiserror 2.0.18",
2036 "tokio",2703 "tokio",
2037 "tracing",2704 "tracing",
2038 "tracing-indicatif",2705 "tracing-indicatif",
2039 "vte",2706 "vte",
2040]2707]
2708
2709[[package]]
2710name = "nix-plugin-fleet"
2711version = "0.1.0"
2712dependencies = [
2713 "fleet-base",
2714]
20412715
2042[[package]]2716[[package]]
2043name = "nixlike"2717name = "nixlike"
2047 "linked-hash-map",2721 "linked-hash-map",
2048 "peg",2722 "peg",
2049 "serde",2723 "serde",
2050 "serde-transcode",
2051 "serde_json",
2052 "thiserror 2.0.18",2724 "thiserror 2.0.18",
2053]2725]
20542726
2080 "windows-sys 0.61.2",2752 "windows-sys 0.61.2",
2081]2753]
2754
2755[[package]]
2756name = "num-bigint"
2757version = "0.4.6"
2758source = "registry+https://github.com/rust-lang/crates.io-index"
2759checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
2760dependencies = [
2761 "num-integer",
2762 "num-traits",
2763]
20822764
2083[[package]]2765[[package]]
2084name = "num-bigint-dig"2766name = "num-bigint-dig"
20982780
2099[[package]]2781[[package]]
2100name = "num-conv"2782name = "num-conv"
2101version = "0.2.1"2783version = "0.2.2"
2102source = "registry+https://github.com/rust-lang/crates.io-index"2784source = "registry+https://github.com/rust-lang/crates.io-index"
2103checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"2785checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
21042786
2105[[package]]2787[[package]]
2106name = "num-integer"2788name = "num-integer"
2150source = "registry+https://github.com/rust-lang/crates.io-index"2832source = "registry+https://github.com/rust-lang/crates.io-index"
2151checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"2833checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
2152
2153[[package]]
2154name = "openssh"
2155version = "0.11.6"
2156source = "registry+https://github.com/rust-lang/crates.io-index"
2157checksum = "d534c4bfecb0ed71dea4db444a5922a294d15cf40e700548f27295e1feb0ef18"
2158dependencies = [
2159 "libc",
2160 "once_cell",
2161 "shell-escape",
2162 "tempfile",
2163 "thiserror 2.0.18",
2164 "tokio",
2165]
21662834
2167[[package]]2835[[package]]
2168name = "openssl-probe"2836name = "openssl-probe"
2229 "opentelemetry-http",2897 "opentelemetry-http",
2230 "opentelemetry-proto",2898 "opentelemetry-proto",
2231 "opentelemetry_sdk",2899 "opentelemetry_sdk",
2232 "prost 0.14.3",2900 "prost",
2233 "reqwest",2901 "reqwest",
2234 "serde_json",2902 "serde_json",
2235 "thiserror 2.0.18",2903 "thiserror 2.0.18",
2236 "tokio",2904 "tokio",
2237 "tonic 0.14.5",2905 "tonic",
2238 "tracing",2906 "tracing",
2239]2907]
22402908
2248 "const-hex",2916 "const-hex",
2249 "opentelemetry",2917 "opentelemetry",
2250 "opentelemetry_sdk",2918 "opentelemetry_sdk",
2251 "prost 0.14.3",2919 "prost",
2252 "serde",2920 "serde",
2253 "serde_json",2921 "serde_json",
2254 "tonic 0.14.5",2922 "tonic",
2255 "tonic-prost",2923 "tonic-prost",
2256]2924]
22572925
2270 "thiserror 2.0.18",2938 "thiserror 2.0.18",
2271]2939]
2940
2941[[package]]
2942name = "ordered-stream"
2943version = "0.2.0"
2944source = "registry+https://github.com/rust-lang/crates.io-index"
2945checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
2946dependencies = [
2947 "futures-core",
2948 "pin-project-lite",
2949]
2950
2951[[package]]
2952name = "p256"
2953version = "0.14.0-rc.10"
2954source = "registry+https://github.com/rust-lang/crates.io-index"
2955checksum = "41adc63effe99d48837a8cc0e6d7a77e32ae6a07f6000df466178dbc2193093e"
2956dependencies = [
2957 "ecdsa",
2958 "elliptic-curve",
2959 "primefield",
2960 "primeorder",
2961 "sha2 0.11.0",
2962]
2963
2964[[package]]
2965name = "p384"
2966version = "0.14.0-rc.10"
2967source = "registry+https://github.com/rust-lang/crates.io-index"
2968checksum = "9bd5333afa5ae0347f39e6a0f2c9c155da431583fd71fe5555bd0521b4ccaf02"
2969dependencies = [
2970 "ecdsa",
2971 "elliptic-curve",
2972 "fiat-crypto 0.3.0",
2973 "primefield",
2974 "primeorder",
2975 "sha2 0.11.0",
2976]
2977
2978[[package]]
2979name = "p521"
2980version = "0.14.0-rc.10"
2981source = "registry+https://github.com/rust-lang/crates.io-index"
2982checksum = "a3a5297f53dc16d35909060ba3032cff7867e8809f01e273ff325579d5f0ceae"
2983dependencies = [
2984 "base16ct",
2985 "ecdsa",
2986 "elliptic-curve",
2987 "primefield",
2988 "primeorder",
2989 "sha2 0.11.0",
2990]
2991
2992[[package]]
2993name = "pageant"
2994version = "0.2.1"
2995source = "registry+https://github.com/rust-lang/crates.io-index"
2996checksum = "4f3a5ae18f65a85c67a77d18d42d3606c07948e3c17c1e5f74852b26589e88a5"
2997dependencies = [
2998 "base16ct",
2999 "byteorder",
3000 "bytes",
3001 "delegate",
3002 "futures",
3003 "log",
3004 "rand 0.10.1",
3005 "sha2 0.11.0",
3006 "thiserror 2.0.18",
3007 "tokio",
3008 "windows",
3009 "windows-strings",
3010]
22723011
2273[[package]]3012[[package]]
2274name = "papergrid"3013name = "papergrid"
2281 "unicode-width",3020 "unicode-width",
2282]3021]
3022
3023[[package]]
3024name = "parking"
3025version = "2.2.1"
3026source = "registry+https://github.com/rust-lang/crates.io-index"
3027checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
22833028
2284[[package]]3029[[package]]
2285name = "parking_lot"3030name = "parking_lot"
2299dependencies = [3044dependencies = [
2300 "cfg-if",3045 "cfg-if",
2301 "libc",3046 "libc",
2302 "redox_syscall",3047 "redox_syscall 0.5.18",
2303 "smallvec",3048 "smallvec",
2304 "windows-link",3049 "windows-link",
2305]3050]
3051
3052[[package]]
3053name = "password-hash"
3054version = "0.6.1"
3055source = "registry+https://github.com/rust-lang/crates.io-index"
3056checksum = "aab41826031698d6ffcd9cff78ef56ef998e39dc7e5067cdfebe373842d4723b"
3057dependencies = [
3058 "phc",
3059]
3060
3061[[package]]
3062name = "paste"
3063version = "1.0.15"
3064source = "registry+https://github.com/rust-lang/crates.io-index"
3065checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
23063066
2307[[package]]3067[[package]]
2308name = "pbkdf2"3068name = "pbkdf2"
2309version = "0.12.2"3069version = "0.12.2"
2310source = "registry+https://github.com/rust-lang/crates.io-index"3070source = "registry+https://github.com/rust-lang/crates.io-index"
2311checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"3071checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
2312dependencies = [3072dependencies = [
2313 "digest",3073 "digest 0.10.7",
2314 "hmac",3074 "hmac 0.12.1",
2315]3075]
3076
3077[[package]]
3078name = "pbkdf2"
3079version = "0.13.0"
3080source = "registry+https://github.com/rust-lang/crates.io-index"
3081checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629"
3082dependencies = [
3083 "digest 0.11.3",
3084 "hmac 0.13.0",
3085]
23163086
2317[[package]]3087[[package]]
2318name = "peg"3088name = "peg"
2319version = "0.8.5"3089version = "0.8.6"
2320source = "registry+https://github.com/rust-lang/crates.io-index"3090source = "registry+https://github.com/rust-lang/crates.io-index"
2321checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477"3091checksum = "0aad070be5b63aa72103f2fcdd70a83adbd5e90112ce5b574171ff1c65501773"
2322dependencies = [3092dependencies = [
2323 "peg-macros",3093 "peg-macros",
2324 "peg-runtime",3094 "peg-runtime",
2325]3095]
23263096
2327[[package]]3097[[package]]
2328name = "peg-macros"3098name = "peg-macros"
2329version = "0.8.5"3099version = "0.8.6"
2330source = "registry+https://github.com/rust-lang/crates.io-index"3100source = "registry+https://github.com/rust-lang/crates.io-index"
2331checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71"3101checksum = "ddd8ef6825cae95355031ae26a99b616a2a21f22ba2de0197c43dfb05acbe7ee"
2332dependencies = [3102dependencies = [
2333 "peg-runtime",3103 "peg-runtime",
2334 "proc-macro2",3104 "proc-macro2",
23373107
2338[[package]]3108[[package]]
2339name = "peg-runtime"3109name = "peg-runtime"
2340version = "0.8.5"3110version = "0.8.6"
2341source = "registry+https://github.com/rust-lang/crates.io-index"3111source = "registry+https://github.com/rust-lang/crates.io-index"
2342checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca"3112checksum = "7011d97b484a5ebdc4b1fdb3b12d5e4bbbea56e9d22b688f2e79e04b65a7d8a6"
23433113
2344[[package]]3114[[package]]
2345name = "pem"3115name = "pem-rfc7468"
2346version = "3.0.6"3116version = "1.0.0"
2347source = "registry+https://github.com/rust-lang/crates.io-index"3117source = "registry+https://github.com/rust-lang/crates.io-index"
2348checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be"3118checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9"
2349dependencies = [3119dependencies = [
2350 "base64 0.22.1",3120 "base64ct",
2351 "serde_core",
2352]3121]
23533122
2354[[package]]3123[[package]]
2358checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"3127checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
23593128
2360[[package]]3129[[package]]
2361name = "petgraph"3130name = "phc"
2362version = "0.7.1"3131version = "0.6.1"
2363source = "registry+https://github.com/rust-lang/crates.io-index"3132source = "registry+https://github.com/rust-lang/crates.io-index"
2364checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"3133checksum = "44dc769b75f93afdddd8c7fa12d685292ddeff1e66f7f0f3a234cf1818afe892"
2365dependencies = [3134dependencies = [
2366 "fixedbitset",3135 "base64ct",
2367 "indexmap 2.14.0",3136 "ctutils",
2368]3137]
23693138
2370[[package]]3139[[package]]
2371name = "pin-project"3140name = "pin-project"
2372version = "1.1.11"3141version = "1.1.13"
2373source = "registry+https://github.com/rust-lang/crates.io-index"3142source = "registry+https://github.com/rust-lang/crates.io-index"
2374checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"3143checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
2375dependencies = [3144dependencies = [
2376 "pin-project-internal",3145 "pin-project-internal",
2377]3146]
23783147
2379[[package]]3148[[package]]
2380name = "pin-project-internal"3149name = "pin-project-internal"
2381version = "1.1.11"3150version = "1.1.13"
2382source = "registry+https://github.com/rust-lang/crates.io-index"3151source = "registry+https://github.com/rust-lang/crates.io-index"
2383checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"3152checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
2384dependencies = [3153dependencies = [
2385 "proc-macro2",3154 "proc-macro2",
2386 "quote",3155 "quote",
2387 "syn",3156 "syn 2.0.117",
2388]3157]
23893158
2390[[package]]3159[[package]]
2393source = "registry+https://github.com/rust-lang/crates.io-index"3162source = "registry+https://github.com/rust-lang/crates.io-index"
2394checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"3163checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
3164
3165[[package]]
3166name = "piper"
3167version = "0.2.5"
3168source = "registry+https://github.com/rust-lang/crates.io-index"
3169checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
3170dependencies = [
3171 "atomic-waker",
3172 "fastrand",
3173 "futures-io",
3174]
23953175
2396[[package]]3176[[package]]
2397name = "pkcs1"3177name = "pkcs1"
2398version = "0.7.5"3178version = "0.7.5"
2399source = "registry+https://github.com/rust-lang/crates.io-index"3179source = "registry+https://github.com/rust-lang/crates.io-index"
2400checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"3180checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
2401dependencies = [3181dependencies = [
2402 "der",3182 "der 0.7.10",
2403 "pkcs8",3183 "pkcs8 0.10.2",
2404 "spki",3184 "spki 0.7.3",
2405]3185]
3186
3187[[package]]
3188name = "pkcs1"
3189version = "0.8.0-rc.4"
3190source = "registry+https://github.com/rust-lang/crates.io-index"
3191checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e"
3192dependencies = [
3193 "der 0.8.0",
3194 "spki 0.8.0",
3195]
3196
3197[[package]]
3198name = "pkcs5"
3199version = "0.8.0"
3200source = "registry+https://github.com/rust-lang/crates.io-index"
3201checksum = "279a91971a1d8eb1260a30938eae3be9cb67b472dffecb222fbbbe2fd2dc1453"
3202dependencies = [
3203 "aes 0.9.1",
3204 "cbc 0.2.1",
3205 "der 0.8.0",
3206 "pbkdf2 0.13.0",
3207 "rand_core 0.10.1",
3208 "scrypt 0.12.0",
3209 "sha2 0.11.0",
3210 "spki 0.8.0",
3211]
24063212
2407[[package]]3213[[package]]
2408name = "pkcs8"3214name = "pkcs8"
2409version = "0.10.2"3215version = "0.10.2"
2410source = "registry+https://github.com/rust-lang/crates.io-index"3216source = "registry+https://github.com/rust-lang/crates.io-index"
2411checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"3217checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
2412dependencies = [3218dependencies = [
2413 "der",3219 "der 0.7.10",
2414 "spki",3220 "spki 0.7.3",
2415]3221]
3222
3223[[package]]
3224name = "pkcs8"
3225version = "0.11.0"
3226source = "registry+https://github.com/rust-lang/crates.io-index"
3227checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7"
3228dependencies = [
3229 "der 0.8.0",
3230 "pkcs5",
3231 "rand_core 0.10.1",
3232 "spki 0.8.0",
3233]
24163234
2417[[package]]3235[[package]]
2418name = "pkg-config"3236name = "pkg-config"
2419version = "0.3.33"3237version = "0.3.33"
2420source = "registry+https://github.com/rust-lang/crates.io-index"3238source = "registry+https://github.com/rust-lang/crates.io-index"
2421checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"3239checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
3240
3241[[package]]
3242name = "plain"
3243version = "0.2.3"
3244source = "registry+https://github.com/rust-lang/crates.io-index"
3245checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
3246
3247[[package]]
3248name = "polling"
3249version = "3.11.0"
3250source = "registry+https://github.com/rust-lang/crates.io-index"
3251checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
3252dependencies = [
3253 "cfg-if",
3254 "concurrent-queue",
3255 "hermit-abi",
3256 "pin-project-lite",
3257 "rustix 1.1.4",
3258 "windows-sys 0.61.2",
3259]
24223260
2423[[package]]3261[[package]]
2424name = "poly1305"3262name = "poly1305"
2428dependencies = [3266dependencies = [
2429 "cpufeatures 0.2.17",3267 "cpufeatures 0.2.17",
2430 "opaque-debug",3268 "opaque-debug",
2431 "universal-hash",3269 "universal-hash 0.5.1",
2432]3270]
3271
3272[[package]]
3273name = "poly1305"
3274version = "0.9.0"
3275source = "registry+https://github.com/rust-lang/crates.io-index"
3276checksum = "a00baa632505d05512f48a963e16051c54fda9a95cc9acea1a4e3c90991c4a2e"
3277dependencies = [
3278 "cpufeatures 0.3.0",
3279 "universal-hash 0.6.1",
3280 "zeroize",
3281]
24333282
2434[[package]]3283[[package]]
2435name = "polyval"3284name = "polyval"
2440 "cfg-if",3289 "cfg-if",
2441 "cpufeatures 0.2.17",3290 "cpufeatures 0.2.17",
2442 "opaque-debug",3291 "opaque-debug",
2443 "universal-hash",3292 "universal-hash 0.5.1",
2444]3293]
3294
3295[[package]]
3296name = "polyval"
3297version = "0.7.1"
3298source = "registry+https://github.com/rust-lang/crates.io-index"
3299checksum = "7dfc63250416fea14f5749b90725916a6c903f599d51cb635aa7a52bfd03eede"
3300dependencies = [
3301 "cpubits",
3302 "cpufeatures 0.3.0",
3303 "universal-hash 0.6.1",
3304]
24453305
2446[[package]]3306[[package]]
2447name = "portable-atomic"3307name = "portable-atomic"
2480checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"3340checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
2481dependencies = [3341dependencies = [
2482 "proc-macro2",3342 "proc-macro2",
2483 "syn",3343 "syn 2.0.117",
2484]3344]
3345
3346[[package]]
3347name = "primefield"
3348version = "0.14.0-rc.11"
3349source = "registry+https://github.com/rust-lang/crates.io-index"
3350checksum = "b1d7e42f46a29abc16fb621a3466ee453358ebaae48a9e515f287e0af052ed8f"
3351dependencies = [
3352 "crypto-bigint",
3353 "crypto-common 0.2.2",
3354 "ff",
3355 "rand_core 0.10.1",
3356 "subtle",
3357 "zeroize",
3358]
3359
3360[[package]]
3361name = "primeorder"
3362version = "0.14.0-rc.10"
3363source = "registry+https://github.com/rust-lang/crates.io-index"
3364checksum = "7d2793f22b9b6fd11ef3ac1d59bf003c2573593e4968702341605c2748fd90bf"
3365dependencies = [
3366 "elliptic-curve",
3367]
3368
3369[[package]]
3370name = "proc-macro-crate"
3371version = "3.5.0"
3372source = "registry+https://github.com/rust-lang/crates.io-index"
3373checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
3374dependencies = [
3375 "toml_edit",
3376]
24853377
2486[[package]]3378[[package]]
2487name = "proc-macro-error-attr2"3379name = "proc-macro-error-attr2"
2502 "proc-macro-error-attr2",3394 "proc-macro-error-attr2",
2503 "proc-macro2",3395 "proc-macro2",
2504 "quote",3396 "quote",
2505 "syn",3397 "syn 2.0.117",
2506]3398]
25073399
2508[[package]]3400[[package]]
2529 "unarray",3421 "unarray",
2530]3422]
2531
2532[[package]]
2533name = "prost"
2534version = "0.13.5"
2535source = "registry+https://github.com/rust-lang/crates.io-index"
2536checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5"
2537dependencies = [
2538 "bytes",
2539 "prost-derive 0.13.5",
2540]
25413423
2542[[package]]3424[[package]]
2543name = "prost"3425name = "prost"
2544version = "0.14.3"3426version = "0.14.4"
2545source = "registry+https://github.com/rust-lang/crates.io-index"3427source = "registry+https://github.com/rust-lang/crates.io-index"
2546checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"3428checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1"
2547dependencies = [3429dependencies = [
2548 "bytes",3430 "bytes",
2549 "prost-derive 0.14.3",3431 "prost-derive",
2550]3432]
2551
2552[[package]]
2553name = "prost-build"
2554version = "0.13.5"
2555source = "registry+https://github.com/rust-lang/crates.io-index"
2556checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf"
2557dependencies = [
2558 "heck",
2559 "itertools 0.14.0",
2560 "log",
2561 "multimap",
2562 "once_cell",
2563 "petgraph",
2564 "prettyplease",
2565 "prost 0.13.5",
2566 "prost-types",
2567 "regex",
2568 "syn",
2569 "tempfile",
2570]
2571
2572[[package]]
2573name = "prost-derive"
2574version = "0.13.5"
2575source = "registry+https://github.com/rust-lang/crates.io-index"
2576checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d"
2577dependencies = [
2578 "anyhow",
2579 "itertools 0.14.0",
2580 "proc-macro2",
2581 "quote",
2582 "syn",
2583]
25843433
2585[[package]]3434[[package]]
2586name = "prost-derive"3435name = "prost-derive"
2587version = "0.14.3"3436version = "0.14.4"
2588source = "registry+https://github.com/rust-lang/crates.io-index"3437source = "registry+https://github.com/rust-lang/crates.io-index"
2589checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"3438checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
2590dependencies = [3439dependencies = [
2591 "anyhow",3440 "anyhow",
2592 "itertools 0.14.0",3441 "itertools 0.14.0",
2593 "proc-macro2",3442 "proc-macro2",
2594 "quote",3443 "quote",
2595 "syn",3444 "syn 2.0.117",
2596]3445]
2597
2598[[package]]
2599name = "prost-types"
2600version = "0.13.5"
2601source = "registry+https://github.com/rust-lang/crates.io-index"
2602checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16"
2603dependencies = [
2604 "prost 0.13.5",
2605]
26063446
2607[[package]]3447[[package]]
2608name = "quinn"3448name = "quinn"
2617 "quinn-udp",3457 "quinn-udp",
2618 "rustc-hash 2.1.2",3458 "rustc-hash 2.1.2",
2619 "rustls",3459 "rustls",
2620 "socket2 0.6.3",3460 "socket2",
2621 "thiserror 2.0.18",3461 "thiserror 2.0.18",
2622 "tokio",3462 "tokio",
2623 "tracing",3463 "tracing",
2654 "cfg_aliases",3494 "cfg_aliases",
2655 "libc",3495 "libc",
2656 "once_cell",3496 "once_cell",
2657 "socket2 0.6.3",3497 "socket2",
2658 "tracing",3498 "tracing",
2659 "windows-sys 0.60.2",3499 "windows-sys 0.60.2",
2660]3500]
2765 "rand_core 0.9.5",3605 "rand_core 0.9.5",
2766]3606]
2767
2768[[package]]
2769name = "rcgen"
2770version = "0.13.2"
2771source = "registry+https://github.com/rust-lang/crates.io-index"
2772checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2"
2773dependencies = [
2774 "pem",
2775 "ring",
2776 "rustls-pki-types",
2777 "time",
2778 "yasna",
2779]
27803607
2781[[package]]3608[[package]]
2782name = "redox_syscall"3609name = "redox_syscall"
2787 "bitflags",3614 "bitflags",
2788]3615]
3616
3617[[package]]
3618name = "redox_syscall"
3619version = "0.8.1"
3620source = "registry+https://github.com/rust-lang/crates.io-index"
3621checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7"
3622dependencies = [
3623 "bitflags",
3624]
27893625
2790[[package]]3626[[package]]
2791name = "regex"3627name = "regex"
2792version = "1.12.3"3628version = "1.12.4"
2793source = "registry+https://github.com/rust-lang/crates.io-index"3629source = "registry+https://github.com/rust-lang/crates.io-index"
2794checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"3630checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
2795dependencies = [3631dependencies = [
2796 "aho-corasick",3632 "aho-corasick",
2797 "memchr",3633 "memchr",
28123648
2813[[package]]3649[[package]]
2814name = "regex-syntax"3650name = "regex-syntax"
2815version = "0.8.10"3651version = "0.8.11"
2816source = "registry+https://github.com/rust-lang/crates.io-index"3652source = "registry+https://github.com/rust-lang/crates.io-index"
2817checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"3653checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
3654
3655[[package]]
3656name = "remowt-client"
3657version = "0.1.7"
3658source = "registry+https://github.com/rust-lang/crates.io-index"
3659checksum = "34d59c0ce311b4b3c094b0b196a1004aa438b9947c3eace2ca4d2a0ac08fac59"
3660dependencies = [
3661 "anyhow",
3662 "bifrostlink",
3663 "bifrostlink-ports",
3664 "bytes",
3665 "camino",
3666 "futures",
3667 "remowt-endpoints",
3668 "remowt-link-shared",
3669 "russh",
3670 "russh-config",
3671 "serde",
3672 "serde_json",
3673 "tempfile",
3674 "tokio",
3675 "tokio-util",
3676 "tracing",
3677 "uuid",
3678]
3679
3680[[package]]
3681name = "remowt-endpoints"
3682version = "0.1.7"
3683source = "registry+https://github.com/rust-lang/crates.io-index"
3684checksum = "cb203856cd5cff27504bd2023c59195b1f1ce1cf5d8ea836598993894eb1b9c0"
3685dependencies = [
3686 "anyhow",
3687 "bifrostlink",
3688 "bifrostlink-macros",
3689 "camino",
3690 "nix",
3691 "serde",
3692 "tempfile",
3693 "thiserror 2.0.18",
3694 "tokio",
3695 "tracing",
3696 "uuid",
3697 "zbus",
3698]
3699
3700[[package]]
3701name = "remowt-fleet"
3702version = "0.1.0"
3703dependencies = [
3704 "anyhow",
3705 "bifrostlink",
3706 "camino",
3707 "nix-eval",
3708 "remowt-client",
3709 "remowt-endpoints",
3710 "serde",
3711 "thiserror 2.0.18",
3712 "tokio",
3713 "tracing",
3714 "uuid",
3715]
3716
3717[[package]]
3718name = "remowt-link-shared"
3719version = "0.1.7"
3720source = "registry+https://github.com/rust-lang/crates.io-index"
3721checksum = "98ebba5be028a2dfb7f1858bb0ff74037262753eaae4dc6e5d9ae241c4567668"
3722dependencies = [
3723 "bifrostlink",
3724 "bytes",
3725 "remowt-ui-prompt",
3726 "serde",
3727 "serde_json",
3728 "thiserror 2.0.18",
3729 "tokio",
3730 "tracing",
3731]
3732
3733[[package]]
3734name = "remowt-plugin"
3735version = "0.1.7"
3736source = "registry+https://github.com/rust-lang/crates.io-index"
3737checksum = "ef73ef3eea5bb6152d01019b5062e51ef258a1ac1c7a6f8cdcdf6fe1eb192cdd"
3738dependencies = [
3739 "anyhow",
3740 "bifrostlink",
3741 "bifrostlink-ports",
3742 "remowt-link-shared",
3743 "serde_json",
3744 "tokio",
3745 "tracing",
3746 "tracing-subscriber",
3747]
28183748
2819[[package]]3749[[package]]
2820name = "repl-plugin-unstable"3750name = "remowt-plugin-fleet"
2821version = "0.1.0"3751version = "0.1.0"
2822dependencies = [3752dependencies = [
3753 "anyhow",
2823 "fleet-base",3754 "remowt-fleet",
3755 "remowt-plugin",
2824]3756]
3757
3758[[package]]
3759name = "remowt-ui-prompt"
3760version = "0.1.7"
3761source = "registry+https://github.com/rust-lang/crates.io-index"
3762checksum = "acf28ba68e6f8087657157695e9ab42b82a21130e77f6dffd27781062109325d"
3763dependencies = [
3764 "anyhow",
3765 "bifrostlink",
3766 "bifrostlink-macros",
3767 "serde",
3768 "serde_json",
3769 "thiserror 2.0.18",
3770 "tokio",
3771 "tracing",
3772 "zbus",
3773]
28253774
2826[[package]]3775[[package]]
2827name = "reqwest"3776name = "reqwest"
2854 "sync_wrapper",3803 "sync_wrapper",
2855 "tokio",3804 "tokio",
2856 "tokio-rustls",3805 "tokio-rustls",
2857 "tower 0.5.3",3806 "tower",
2858 "tower-http 0.6.8",3807 "tower-http",
2859 "tower-service",3808 "tower-service",
2860 "url",3809 "url",
2861 "wasm-bindgen",3810 "wasm-bindgen",
2862 "wasm-bindgen-futures",3811 "wasm-bindgen-futures",
2863 "web-sys",3812 "web-sys",
2864]3813]
3814
3815[[package]]
3816name = "rfc6979"
3817version = "0.5.0"
3818source = "registry+https://github.com/rust-lang/crates.io-index"
3819checksum = "5236ce872cac07e0fb3969b0cbf468c7d2f37d432f1b627dcb7b8d34563fb0c3"
3820dependencies = [
3821 "hmac 0.13.0",
3822 "subtle",
3823]
28653824
2866[[package]]3825[[package]]
2867name = "ring"3826name = "ring"
2878]3837]
28793838
2880[[package]]3839[[package]]
2881name = "rmp"3840name = "rsa"
2882version = "0.8.15"3841version = "0.9.10"
2883source = "registry+https://github.com/rust-lang/crates.io-index"3842source = "registry+https://github.com/rust-lang/crates.io-index"
2884checksum = "4ba8be72d372b2c9b35542551678538b562e7cf86c3315773cae48dfbfe7790c"3843checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d"
2885dependencies = [3844dependencies = [
3845 "const-oid 0.9.6",
3846 "digest 0.10.7",
3847 "num-bigint-dig",
3848 "num-integer",
2886 "num-traits",3849 "num-traits",
3850 "pkcs1 0.7.5",
3851 "pkcs8 0.10.2",
3852 "rand_core 0.6.4",
3853 "signature 2.2.0",
3854 "spki 0.7.3",
3855 "subtle",
3856 "zeroize",
2887]3857]
28883858
2889[[package]]3859[[package]]
2890name = "rmp-serde"3860name = "rsa"
2891version = "1.3.1"3861version = "0.10.0-rc.18"
2892source = "registry+https://github.com/rust-lang/crates.io-index"3862source = "registry+https://github.com/rust-lang/crates.io-index"
2893checksum = "72f81bee8c8ef9b577d1681a70ebbc962c232461e397b22c208c43c04b67a155"3863checksum = "30b2aa4ba0d89f73d1e332df05be0eeab8840351c36ca5654341dfdb57bb3caf"
2894dependencies = [3864dependencies = [
3865 "const-oid 0.10.2",
2895 "rmp",3866 "crypto-bigint",
3867 "crypto-primes",
3868 "digest 0.11.3",
3869 "pkcs1 0.8.0-rc.4",
3870 "pkcs8 0.11.0",
3871 "rand_core 0.10.1",
3872 "sha2 0.11.0",
3873 "signature 3.0.0",
3874 "spki 0.8.0",
2896 "serde",3875 "zeroize",
2897]3876]
28983877
2899[[package]]3878[[package]]
2900name = "rsa"3879name = "russh"
2901version = "0.9.10"3880version = "0.61.2"
2902source = "registry+https://github.com/rust-lang/crates.io-index"3881source = "registry+https://github.com/rust-lang/crates.io-index"
2903checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d"3882checksum = "bbf893f64684e58da8a68d56a5e84d1cf0440226274c515770fe267707a7d0b0"
2904dependencies = [3883dependencies = [
3884 "aes 0.9.1",
3885 "bitflags",
3886 "block-padding 0.4.2",
3887 "byteorder",
3888 "bytes",
3889 "cbc 0.2.1",
3890 "cipher 0.5.2",
2905 "const-oid",3891 "crypto-bigint",
3892 "ctr 0.10.1",
3893 "curve25519-dalek 5.0.0-rc.0",
3894 "data-encoding",
3895 "delegate",
3896 "der 0.8.0",
2906 "digest",3897 "digest 0.11.3",
3898 "ecdsa",
3899 "ed25519-dalek 3.0.0-rc.0",
3900 "elliptic-curve",
2907 "num-bigint-dig",3901 "enum_dispatch",
3902 "flate2",
2908 "num-integer",3903 "futures",
3904 "generic-array 1.4.3",
3905 "getrandom 0.4.2",
3906 "ghash 0.6.0",
3907 "hex-literal",
3908 "hmac 0.13.0",
3909 "inout 0.2.2",
3910 "internal-russh-num-bigint",
3911 "keccak",
3912 "log",
3913 "md5",
3914 "ml-kem",
3915 "module-lattice",
2909 "num-traits",3916 "num-bigint",
3917 "p256",
3918 "p384",
2910 "pkcs1",3919 "p521",
3920 "pageant",
3921 "pbkdf2 0.13.0",
3922 "pkcs1 0.8.0-rc.4",
2911 "pkcs8",3923 "pkcs5",
3924 "pkcs8 0.11.0",
3925 "polyval 0.7.1",
3926 "rand 0.10.1",
2912 "rand_core 0.6.4",3927 "rand_core 0.10.1",
3928 "ring",
3929 "rsa 0.10.0-rc.18",
3930 "russh-cryptovec",
3931 "russh-util",
3932 "salsa20 0.11.0",
3933 "scrypt 0.12.0",
3934 "sec1",
3935 "sha1",
3936 "sha2 0.11.0",
3937 "sha3",
2913 "signature",3938 "signature 3.0.0",
2914 "spki",3939 "spki 0.8.0",
3940 "ssh-encoding",
3941 "ssh-key",
2915 "subtle",3942 "subtle",
3943 "thiserror 2.0.18",
3944 "tokio",
3945 "typenum",
3946 "universal-hash 0.6.1",
2916 "zeroize",3947 "zeroize",
2917]3948]
3949
3950[[package]]
3951name = "russh-config"
3952version = "0.58.0"
3953source = "registry+https://github.com/rust-lang/crates.io-index"
3954checksum = "993346101d4741a59c82bafc6b645c52ce3e7b0820f13e4b5d48cdb591e3d955"
3955dependencies = [
3956 "futures",
3957 "globset",
3958 "log",
3959 "thiserror 2.0.18",
3960 "tokio",
3961 "whoami",
3962]
3963
3964[[package]]
3965name = "russh-cryptovec"
3966version = "0.61.0"
3967source = "registry+https://github.com/rust-lang/crates.io-index"
3968checksum = "443f6bbcfacb34a1aab2b12b99bf08e0c63abdc5a0db261901365df9d57fff51"
3969dependencies = [
3970 "log",
3971 "nix",
3972 "ssh-encoding",
3973 "windows-sys 0.61.2",
3974]
3975
3976[[package]]
3977name = "russh-util"
3978version = "0.52.0"
3979source = "registry+https://github.com/rust-lang/crates.io-index"
3980checksum = "668424a5dde0bcb45b55ba7de8476b93831b4aa2fa6947e145f3b053e22c60b6"
3981dependencies = [
3982 "chrono",
3983 "tokio",
3984 "wasm-bindgen",
3985 "wasm-bindgen-futures",
3986]
29183987
2919[[package]]3988[[package]]
2920name = "rust-embed"3989name = "rust-embed"
2936 "proc-macro2",4005 "proc-macro2",
2937 "quote",4006 "quote",
2938 "rust-embed-utils",4007 "rust-embed-utils",
2939 "syn",4008 "syn 2.0.117",
2940 "walkdir",4009 "walkdir",
2941]4010]
29424011
2946source = "registry+https://github.com/rust-lang/crates.io-index"4015source = "registry+https://github.com/rust-lang/crates.io-index"
2947checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1"4016checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1"
2948dependencies = [4017dependencies = [
2949 "sha2",4018 "sha2 0.10.9",
2950 "walkdir",4019 "walkdir",
2951]4020]
29524021
29994068
3000[[package]]4069[[package]]
3001name = "rustls"4070name = "rustls"
3002version = "0.23.38"4071version = "0.23.40"
3003source = "registry+https://github.com/rust-lang/crates.io-index"4072source = "registry+https://github.com/rust-lang/crates.io-index"
3004checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21"4073checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
3005dependencies = [4074dependencies = [
3006 "log",
3007 "once_cell",4075 "once_cell",
3008 "ring",4076 "ring",
3009 "rustls-pki-types",4077 "rustls-pki-types",
30144082
3015[[package]]4083[[package]]
3016name = "rustls-native-certs"4084name = "rustls-native-certs"
3017version = "0.8.3"4085version = "0.8.4"
3018source = "registry+https://github.com/rust-lang/crates.io-index"4086source = "registry+https://github.com/rust-lang/crates.io-index"
3019checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"4087checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
3020dependencies = [4088dependencies = [
3021 "openssl-probe",4089 "openssl-probe",
3022 "rustls-pki-types",4090 "rustls-pki-types",
3023 "schannel",4091 "schannel",
3024 "security-framework",4092 "security-framework",
3025]4093]
3026
3027[[package]]
3028name = "rustls-pemfile"
3029version = "2.2.0"
3030source = "registry+https://github.com/rust-lang/crates.io-index"
3031checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
3032dependencies = [
3033 "rustls-pki-types",
3034]
30354094
3036[[package]]4095[[package]]
3037name = "rustls-pki-types"4096name = "rustls-pki-types"
3038version = "1.14.0"4097version = "1.14.1"
3039source = "registry+https://github.com/rust-lang/crates.io-index"4098source = "registry+https://github.com/rust-lang/crates.io-index"
3040checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"4099checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
3041dependencies = [4100dependencies = [
3042 "web-time",4101 "web-time",
3043 "zeroize",4102 "zeroize",
3072source = "registry+https://github.com/rust-lang/crates.io-index"4131source = "registry+https://github.com/rust-lang/crates.io-index"
3073checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"4132checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
3074dependencies = [4133dependencies = [
3075 "cipher",4134 "cipher 0.4.4",
3076]4135]
4136
4137[[package]]
4138name = "salsa20"
4139version = "0.11.0"
4140source = "registry+https://github.com/rust-lang/crates.io-index"
4141checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c"
4142dependencies = [
4143 "cfg-if",
4144 "cipher 0.5.2",
4145]
30774146
3078[[package]]4147[[package]]
3079name = "same-file"4148name = "same-file"
3111source = "registry+https://github.com/rust-lang/crates.io-index"4180source = "registry+https://github.com/rust-lang/crates.io-index"
3112checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"4181checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"
3113dependencies = [4182dependencies = [
3114 "pbkdf2",4183 "pbkdf2 0.12.2",
3115 "salsa20",4184 "salsa20 0.10.2",
3116 "sha2",4185 "sha2 0.10.9",
3117]4186]
4187
4188[[package]]
4189name = "scrypt"
4190version = "0.12.0"
4191source = "registry+https://github.com/rust-lang/crates.io-index"
4192checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0"
4193dependencies = [
4194 "cfg-if",
4195 "pbkdf2 0.13.0",
4196 "salsa20 0.11.0",
4197 "sha2 0.11.0",
4198]
4199
4200[[package]]
4201name = "sec1"
4202version = "0.8.1"
4203source = "registry+https://github.com/rust-lang/crates.io-index"
4204checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d"
4205dependencies = [
4206 "base16ct",
4207 "ctutils",
4208 "der 0.8.0",
4209 "hybrid-array",
4210 "subtle",
4211 "zeroize",
4212]
31184213
3119[[package]]4214[[package]]
3120name = "secrecy"4215name = "secrecy"
3179 "serde_derive",4274 "serde_derive",
3180]4275]
3181
3182[[package]]
3183name = "serde-transcode"
3184version = "1.1.1"
3185source = "registry+https://github.com/rust-lang/crates.io-index"
3186checksum = "590c0e25c2a5bb6e85bf5c1bce768ceb86b316e7a01bdf07d2cb4ec2271990e2"
3187dependencies = [
3188 "serde",
3189]
3190
3191[[package]]
3192name = "serde_bytes"
3193version = "0.11.19"
3194source = "registry+https://github.com/rust-lang/crates.io-index"
3195checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
3196dependencies = [
3197 "serde",
3198 "serde_core",
3199]
32004276
3201[[package]]4277[[package]]
3202name = "serde_core"4278name = "serde_core"
3215dependencies = [4291dependencies = [
3216 "proc-macro2",4292 "proc-macro2",
3217 "quote",4293 "quote",
3218 "syn",4294 "syn 2.0.117",
3219]4295]
32204296
3221[[package]]4297[[package]]
3222name = "serde_json"4298name = "serde_json"
3223version = "1.0.149"4299version = "1.0.150"
3224source = "registry+https://github.com/rust-lang/crates.io-index"4300source = "registry+https://github.com/rust-lang/crates.io-index"
3225checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"4301checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
3226dependencies = [4302dependencies = [
3227 "itoa",4303 "itoa",
3228 "memchr",4304 "memchr",
3231 "zmij",4307 "zmij",
3232]4308]
4309
4310[[package]]
4311name = "serde_repr"
4312version = "0.1.20"
4313source = "registry+https://github.com/rust-lang/crates.io-index"
4314checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
4315dependencies = [
4316 "proc-macro2",
4317 "quote",
4318 "syn 2.0.117",
4319]
32334320
3234[[package]]4321[[package]]
3235name = "serde_urlencoded"4322name = "serde_urlencoded"
3243 "serde",4330 "serde",
3244]4331]
4332
4333[[package]]
4334name = "serdect"
4335version = "0.4.3"
4336source = "registry+https://github.com/rust-lang/crates.io-index"
4337checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e"
4338dependencies = [
4339 "base16ct",
4340 "serde",
4341]
4342
4343[[package]]
4344name = "sha1"
4345version = "0.11.0"
4346source = "registry+https://github.com/rust-lang/crates.io-index"
4347checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
4348dependencies = [
4349 "cfg-if",
4350 "cpufeatures 0.3.0",
4351 "digest 0.11.3",
4352]
32454353
3246[[package]]4354[[package]]
3247name = "sha2"4355name = "sha2"
3251dependencies = [4359dependencies = [
3252 "cfg-if",4360 "cfg-if",
3253 "cpufeatures 0.2.17",4361 "cpufeatures 0.2.17",
3254 "digest",4362 "digest 0.10.7",
3255]4363]
4364
4365[[package]]
4366name = "sha2"
4367version = "0.11.0"
4368source = "registry+https://github.com/rust-lang/crates.io-index"
4369checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
4370dependencies = [
4371 "cfg-if",
4372 "cpufeatures 0.3.0",
4373 "digest 0.11.3",
4374]
4375
4376[[package]]
4377name = "sha3"
4378version = "0.11.0"
4379source = "registry+https://github.com/rust-lang/crates.io-index"
4380checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1"
4381dependencies = [
4382 "digest 0.11.3",
4383 "keccak",
4384]
32564385
3257[[package]]4386[[package]]
3258name = "sharded-slab"4387name = "sharded-slab"
3263 "lazy_static",4392 "lazy_static",
3264]4393]
3265
3266[[package]]
3267name = "shell-escape"
3268version = "0.1.5"
3269source = "registry+https://github.com/rust-lang/crates.io-index"
3270checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
32714394
3272[[package]]4395[[package]]
3273name = "shlex"4396name = "shlex"
3274version = "1.3.0"4397version = "1.3.0"
3275source = "registry+https://github.com/rust-lang/crates.io-index"4398source = "registry+https://github.com/rust-lang/crates.io-index"
3276checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"4399checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
4400
4401[[package]]
4402name = "shlex"
4403version = "2.0.1"
4404source = "registry+https://github.com/rust-lang/crates.io-index"
4405checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
32774406
3278[[package]]4407[[package]]
3279name = "signal-hook-registry"4408name = "signal-hook-registry"
3291source = "registry+https://github.com/rust-lang/crates.io-index"4420source = "registry+https://github.com/rust-lang/crates.io-index"
3292checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"4421checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
3293dependencies = [4422dependencies = [
3294 "digest",4423 "digest 0.10.7",
3295 "rand_core 0.6.4",4424 "rand_core 0.6.4",
3296]4425]
4426
4427[[package]]
4428name = "signature"
4429version = "3.0.0"
4430source = "registry+https://github.com/rust-lang/crates.io-index"
4431checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5"
4432dependencies = [
4433 "digest 0.11.3",
4434 "rand_core 0.10.1",
4435]
32974436
3298[[package]]4437[[package]]
3299name = "simd-adler32"4438name = "simd-adler32"
33094448
3310[[package]]4449[[package]]
3311name = "smallvec"4450name = "smallvec"
3312version = "1.15.1"4451version = "1.15.2"
3313source = "registry+https://github.com/rust-lang/crates.io-index"4452source = "registry+https://github.com/rust-lang/crates.io-index"
3314checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"4453checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
3315
3316[[package]]
3317name = "socket2"
3318version = "0.5.10"
3319source = "registry+https://github.com/rust-lang/crates.io-index"
3320checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
3321dependencies = [
3322 "libc",
3323 "windows-sys 0.52.0",
3324]
33254454
3326[[package]]4455[[package]]
3327name = "socket2"4456name = "socket2"
3328version = "0.6.3"4457version = "0.6.4"
3329source = "registry+https://github.com/rust-lang/crates.io-index"4458source = "registry+https://github.com/rust-lang/crates.io-index"
3330checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"4459checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
3331dependencies = [4460dependencies = [
3332 "libc",4461 "libc",
3333 "windows-sys 0.61.2",4462 "windows-sys 0.61.2",
3346checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"4475checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
3347dependencies = [4476dependencies = [
3348 "base64ct",4477 "base64ct",
3349 "der",4478 "der 0.7.10",
3350]4479]
4480
4481[[package]]
4482name = "spki"
4483version = "0.8.0"
4484source = "registry+https://github.com/rust-lang/crates.io-index"
4485checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f"
4486dependencies = [
4487 "base64ct",
4488 "der 0.8.0",
4489]
4490
4491[[package]]
4492name = "ssh-cipher"
4493version = "0.3.0-rc.9"
4494source = "registry+https://github.com/rust-lang/crates.io-index"
4495checksum = "10db6f219196a8528f9ec904d9d45cdad692d65b0e57e72be4dedd1c5fddce36"
4496dependencies = [
4497 "aead 0.6.0",
4498 "aes 0.9.1",
4499 "aes-gcm 0.11.0-rc.4",
4500 "cbc 0.2.1",
4501 "chacha20 0.10.0",
4502 "cipher 0.5.2",
4503 "ctr 0.10.1",
4504 "ctutils",
4505 "des",
4506 "poly1305 0.9.0",
4507 "ssh-encoding",
4508 "zeroize",
4509]
4510
4511[[package]]
4512name = "ssh-encoding"
4513version = "0.3.0-rc.9"
4514source = "registry+https://github.com/rust-lang/crates.io-index"
4515checksum = "7abf34aa716da5d5b4c496936d042ea282ab392092cd68a72ef6a8863ff8c96a"
4516dependencies = [
4517 "base64ct",
4518 "bytes",
4519 "crypto-bigint",
4520 "ctutils",
4521 "digest 0.11.3",
4522 "pem-rfc7468",
4523 "zeroize",
4524]
4525
4526[[package]]
4527name = "ssh-key"
4528version = "0.7.0-rc.10"
4529source = "registry+https://github.com/rust-lang/crates.io-index"
4530checksum = "45735ce3dea95690e4a9e414c4cfde7f79835063c3dcd35881df85a84118e74b"
4531dependencies = [
4532 "argon2",
4533 "bcrypt-pbkdf 0.11.0",
4534 "ctutils",
4535 "ed25519-dalek 3.0.0-rc.0",
4536 "hex",
4537 "hmac 0.13.0",
4538 "p256",
4539 "p384",
4540 "p521",
4541 "rand_core 0.10.1",
4542 "rsa 0.10.0-rc.18",
4543 "sec1",
4544 "sha1",
4545 "sha2 0.11.0",
4546 "signature 3.0.0",
4547 "ssh-cipher",
4548 "ssh-encoding",
4549 "zeroize",
4550]
33514551
3352[[package]]4552[[package]]
3353name = "stable_deref_trait"4553name = "stable_deref_trait"
3367source = "registry+https://github.com/rust-lang/crates.io-index"4567source = "registry+https://github.com/rust-lang/crates.io-index"
3368checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"4568checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
4569
4570[[package]]
4571name = "syn"
4572version = "1.0.109"
4573source = "registry+https://github.com/rust-lang/crates.io-index"
4574checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
4575dependencies = [
4576 "proc-macro2",
4577 "quote",
4578 "unicode-ident",
4579]
33694580
3370[[package]]4581[[package]]
3371name = "syn"4582name = "syn"
3395dependencies = [4606dependencies = [
3396 "proc-macro2",4607 "proc-macro2",
3397 "quote",4608 "quote",
3398 "syn",4609 "syn 2.0.117",
3399]4610]
34004611
3401[[package]]4612[[package]]
3419 "proc-macro-error2",4630 "proc-macro-error2",
3420 "proc-macro2",4631 "proc-macro2",
3421 "quote",4632 "quote",
3422 "syn",4633 "syn 2.0.117",
3423]4634]
34244635
3425[[package]]4636[[package]]
3454 "windows-sys 0.61.2",4665 "windows-sys 0.61.2",
3455]4666]
3456
3457[[package]]
3458name = "terraform-provider-fleet"
3459version = "0.1.0"
3460dependencies = [
3461 "anyhow",
3462 "async-trait",
3463 "serde",
3464 "tf-provider",
3465 "tokio",
3466]
34674667
3468[[package]]4668[[package]]
3469name = "test-log"4669name = "test-log"
3470version = "0.2.20"4670version = "0.2.21"
3471source = "registry+https://github.com/rust-lang/crates.io-index"4671source = "registry+https://github.com/rust-lang/crates.io-index"
3472checksum = "2f46bf474f0a4afebf92f076d54fd5e63423d9438b8c278a3d2ccb0f47f7cdb3"4672checksum = "9b9c218384242b5c89b68303ab6f6fc53a312d923f0c14dc6bb860c6aeee40f1"
3473dependencies = [4673dependencies = [
3474 "env_logger",4674 "env_logger",
3475 "test-log-macros",4675 "test-log-macros",
34784678
3479[[package]]4679[[package]]
3480name = "test-log-core"4680name = "test-log-core"
3481version = "0.2.20"4681version = "0.2.21"
3482source = "registry+https://github.com/rust-lang/crates.io-index"4682source = "registry+https://github.com/rust-lang/crates.io-index"
3483checksum = "37d4d41320b48bc4a211a9021678fcc0c99569b594ea31c93735b8e517102b4c"4683checksum = "c26ef8b00e4d382e59f6a8ddb3cd790b3a5bb29f21a358a9a69ea2f29f13f27b"
3484dependencies = [4684dependencies = [
3485 "proc-macro2",4685 "proc-macro2",
3486 "quote",4686 "quote",
3487 "syn",4687 "syn 2.0.117",
3488]4688]
34894689
3490[[package]]4690[[package]]
3491name = "test-log-macros"4691name = "test-log-macros"
3492version = "0.2.20"4692version = "0.2.21"
3493source = "registry+https://github.com/rust-lang/crates.io-index"4693source = "registry+https://github.com/rust-lang/crates.io-index"
3494checksum = "9beb9249a81e430dffd42400a49019bcf548444f1968ff23080a625de0d4d320"4694checksum = "944ad38adcbb71eaa682c56bceeb079e4ca82b4b3edc2a0fde5cb297b77dac8d"
3495dependencies = [4695dependencies = [
3496 "syn",4696 "syn 2.0.117",
3497 "test-log-core",4697 "test-log-core",
3498]4698]
34994699
3506 "unicode-width",4706 "unicode-width",
3507]4707]
3508
3509[[package]]
3510name = "tf-provider"
3511version = "0.2.2"
3512source = "registry+https://github.com/rust-lang/crates.io-index"
3513checksum = "d80ea2e5f9f54717952d199888aab7e607dc99275ec5221f1259ce7a5f55f5a6"
3514dependencies = [
3515 "anyhow",
3516 "async-stream",
3517 "async-trait",
3518 "base64 0.22.1",
3519 "futures",
3520 "prost 0.13.5",
3521 "rcgen",
3522 "rmp-serde",
3523 "serde",
3524 "serde_bytes",
3525 "serde_json",
3526 "time",
3527 "tokio",
3528 "tokio-stream",
3529 "tokio-util",
3530 "tonic 0.12.3",
3531 "tonic-build",
3532 "tower-http 0.5.2",
3533 "tracing",
3534 "tracing-subscriber",
3535]
35364708
3537[[package]]4709[[package]]
3538name = "thiserror"4710name = "thiserror"
3560dependencies = [4732dependencies = [
3561 "proc-macro2",4733 "proc-macro2",
3562 "quote",4734 "quote",
3563 "syn",4735 "syn 2.0.117",
3564]4736]
35654737
3566[[package]]4738[[package]]
3571dependencies = [4743dependencies = [
3572 "proc-macro2",4744 "proc-macro2",
3573 "quote",4745 "quote",
3574 "syn",4746 "syn 2.0.117",
3575]4747]
35764748
3577[[package]]4749[[package]]
35854757
3586[[package]]4758[[package]]
3587name = "time"4759name = "time"
3588version = "0.3.47"4760version = "0.3.49"
3589source = "registry+https://github.com/rust-lang/crates.io-index"4761source = "registry+https://github.com/rust-lang/crates.io-index"
3590checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"4762checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469"
3591dependencies = [4763dependencies = [
3592 "deranged",4764 "deranged",
3593 "num-conv",4765 "num-conv",
35994771
3600[[package]]4772[[package]]
3601name = "time-core"4773name = "time-core"
3602version = "0.1.8"4774version = "0.1.9"
3603source = "registry+https://github.com/rust-lang/crates.io-index"4775source = "registry+https://github.com/rust-lang/crates.io-index"
3604checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"4776checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
36054777
3606[[package]]4778[[package]]
3607name = "time-macros"4779name = "time-macros"
3608version = "0.2.27"4780version = "0.2.29"
3609source = "registry+https://github.com/rust-lang/crates.io-index"4781source = "registry+https://github.com/rust-lang/crates.io-index"
3610checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"4782checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d"
3611dependencies = [4783dependencies = [
3612 "num-conv",4784 "num-conv",
3613 "time-core",4785 "time-core",
36414813
3642[[package]]4814[[package]]
3643name = "tokio"4815name = "tokio"
3644version = "1.52.1"4816version = "1.52.3"
3645source = "registry+https://github.com/rust-lang/crates.io-index"4817source = "registry+https://github.com/rust-lang/crates.io-index"
3646checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"4818checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
3647dependencies = [4819dependencies = [
3648 "bytes",4820 "bytes",
3649 "libc",4821 "libc",
3650 "mio",4822 "mio",
3651 "pin-project-lite",4823 "pin-project-lite",
3652 "signal-hook-registry",4824 "signal-hook-registry",
3653 "socket2 0.6.3",4825 "socket2",
3654 "tokio-macros",4826 "tokio-macros",
3655 "windows-sys 0.61.2",4827 "windows-sys 0.61.2",
3656]4828]
3663dependencies = [4835dependencies = [
3664 "proc-macro2",4836 "proc-macro2",
3665 "quote",4837 "quote",
3666 "syn",4838 "syn 2.0.117",
3667]4839]
36684840
3669[[package]]4841[[package]]
3685 "futures-core",4857 "futures-core",
3686 "pin-project-lite",4858 "pin-project-lite",
3687 "tokio",4859 "tokio",
3688 "tokio-util",
3689]4860]
36904861
3691[[package]]4862[[package]]
37124883
3713[[package]]4884[[package]]
3714name = "toml_datetime"4885name = "toml_datetime"
3715version = "0.7.5+spec-1.1.0"4886version = "1.1.1+spec-1.1.0"
3716source = "registry+https://github.com/rust-lang/crates.io-index"4887source = "registry+https://github.com/rust-lang/crates.io-index"
3717checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"4888checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
3718dependencies = [4889dependencies = [
3719 "serde_core",4890 "serde_core",
3720]4891]
37214892
3722[[package]]4893[[package]]
3723name = "toml_edit"4894name = "toml_edit"
3724version = "0.23.10+spec-1.0.0"4895version = "0.25.12+spec-1.1.0"
3725source = "registry+https://github.com/rust-lang/crates.io-index"4896source = "registry+https://github.com/rust-lang/crates.io-index"
3726checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"4897checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7"
3727dependencies = [4898dependencies = [
3728 "indexmap 2.14.0",4899 "indexmap",
3729 "toml_datetime",4900 "toml_datetime",
3730 "toml_parser",4901 "toml_parser",
3731 "toml_writer",
3732 "winnow 0.7.15",4902 "winnow",
3733]4903]
37344904
3735[[package]]4905[[package]]
3738source = "registry+https://github.com/rust-lang/crates.io-index"4908source = "registry+https://github.com/rust-lang/crates.io-index"
3739checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"4909checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
3740dependencies = [4910dependencies = [
3741 "winnow 1.0.2",4911 "winnow",
3742]4912]
3743
3744[[package]]
3745name = "toml_writer"
3746version = "1.1.1+spec-1.1.0"
3747source = "registry+https://github.com/rust-lang/crates.io-index"
3748checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
3749
3750[[package]]
3751name = "tonic"
3752version = "0.12.3"
3753source = "registry+https://github.com/rust-lang/crates.io-index"
3754checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52"
3755dependencies = [
3756 "async-stream",
3757 "async-trait",
3758 "axum",
3759 "base64 0.22.1",
3760 "bytes",
3761 "h2",
3762 "http",
3763 "http-body",
3764 "http-body-util",
3765 "hyper",
3766 "hyper-timeout",
3767 "hyper-util",
3768 "percent-encoding",
3769 "pin-project",
3770 "prost 0.13.5",
3771 "rustls-pemfile",
3772 "socket2 0.5.10",
3773 "tokio",
3774 "tokio-rustls",
3775 "tokio-stream",
3776 "tower 0.4.13",
3777 "tower-layer",
3778 "tower-service",
3779 "tracing",
3780]
37814913
3782[[package]]4914[[package]]
3783name = "tonic"4915name = "tonic"
3784version = "0.14.5"4916version = "0.14.6"
3785source = "registry+https://github.com/rust-lang/crates.io-index"4917source = "registry+https://github.com/rust-lang/crates.io-index"
3786checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec"4918checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef"
3787dependencies = [4919dependencies = [
3788 "async-trait",4920 "async-trait",
3789 "base64 0.22.1",4921 "base64 0.22.1",
3800 "sync_wrapper",4932 "sync_wrapper",
3801 "tokio",4933 "tokio",
3802 "tokio-stream",4934 "tokio-stream",
3803 "tower 0.5.3",4935 "tower",
3804 "tower-layer",4936 "tower-layer",
3805 "tower-service",4937 "tower-service",
3806 "tracing",4938 "tracing",
3807]4939]
3808
3809[[package]]
3810name = "tonic-build"
3811version = "0.12.3"
3812source = "registry+https://github.com/rust-lang/crates.io-index"
3813checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11"
3814dependencies = [
3815 "prettyplease",
3816 "proc-macro2",
3817 "prost-build",
3818 "prost-types",
3819 "quote",
3820 "syn",
3821]
38224940
3823[[package]]4941[[package]]
3824name = "tonic-prost"4942name = "tonic-prost"
3825version = "0.14.5"4943version = "0.14.6"
3826source = "registry+https://github.com/rust-lang/crates.io-index"4944source = "registry+https://github.com/rust-lang/crates.io-index"
3827checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309"4945checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0"
3828dependencies = [4946dependencies = [
3829 "bytes",4947 "bytes",
3830 "prost 0.14.3",4948 "prost",
3831 "tonic 0.14.5",4949 "tonic",
3832]4950]
3833
3834[[package]]
3835name = "tower"
3836version = "0.4.13"
3837source = "registry+https://github.com/rust-lang/crates.io-index"
3838checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
3839dependencies = [
3840 "futures-core",
3841 "futures-util",
3842 "indexmap 1.9.3",
3843 "pin-project",
3844 "pin-project-lite",
3845 "rand 0.8.6",
3846 "slab",
3847 "tokio",
3848 "tokio-util",
3849 "tower-layer",
3850 "tower-service",
3851 "tracing",
3852]
38534951
3854[[package]]4952[[package]]
3855name = "tower"4953name = "tower"
3859dependencies = [4957dependencies = [
3860 "futures-core",4958 "futures-core",
3861 "futures-util",4959 "futures-util",
3862 "indexmap 2.14.0",4960 "indexmap",
3863 "pin-project-lite",4961 "pin-project-lite",
3864 "slab",4962 "slab",
3865 "sync_wrapper",4963 "sync_wrapper",
3870 "tracing",4968 "tracing",
3871]4969]
3872
3873[[package]]
3874name = "tower-http"
3875version = "0.5.2"
3876source = "registry+https://github.com/rust-lang/crates.io-index"
3877checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
3878dependencies = [
3879 "bitflags",
3880 "bytes",
3881 "http",
3882 "http-body",
3883 "http-body-util",
3884 "pin-project-lite",
3885 "tower-layer",
3886 "tower-service",
3887 "tracing",
3888]
38894970
3890[[package]]4971[[package]]
3891name = "tower-http"4972name = "tower-http"
3892version = "0.6.8"4973version = "0.6.11"
3893source = "registry+https://github.com/rust-lang/crates.io-index"4974source = "registry+https://github.com/rust-lang/crates.io-index"
3894checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"4975checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
3895dependencies = [4976dependencies = [
3896 "bitflags",4977 "bitflags",
3897 "bytes",4978 "bytes",
3898 "futures-util",4979 "futures-util",
3899 "http",4980 "http",
3900 "http-body",4981 "http-body",
3901 "iri-string",
3902 "pin-project-lite",4982 "pin-project-lite",
3903 "tower 0.5.3",4983 "tower",
3904 "tower-layer",4984 "tower-layer",
3905 "tower-service",4985 "tower-service",
4986 "url",
3906]4987]
39074988
3908[[package]]4989[[package]]
3936dependencies = [5017dependencies = [
3937 "proc-macro2",5018 "proc-macro2",
3938 "quote",5019 "quote",
3939 "syn",5020 "syn 2.0.117",
3940]5021]
39415022
3942[[package]]5023[[package]]
3988 "web-time",5069 "web-time",
3989]5070]
3990
3991[[package]]
3992name = "tracing-serde"
3993version = "0.2.0"
3994source = "registry+https://github.com/rust-lang/crates.io-index"
3995checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
3996dependencies = [
3997 "serde",
3998 "tracing-core",
3999]
40005071
4001[[package]]5072[[package]]
4002name = "tracing-subscriber"5073name = "tracing-subscriber"
4008 "nu-ansi-term",5079 "nu-ansi-term",
4009 "once_cell",5080 "once_cell",
4010 "regex-automata",5081 "regex-automata",
4011 "serde",
4012 "serde_json",
4013 "sharded-slab",5082 "sharded-slab",
4014 "smallvec",5083 "smallvec",
4015 "thread_local",5084 "thread_local",
4016 "tracing",5085 "tracing",
4017 "tracing-core",5086 "tracing-core",
4018 "tracing-log",5087 "tracing-log",
4019 "tracing-serde",
4020]5088]
40215089
4022[[package]]5090[[package]]
40365104
4037[[package]]5105[[package]]
4038name = "typenum"5106name = "typenum"
4039version = "1.20.0"5107version = "1.20.1"
4040source = "registry+https://github.com/rust-lang/crates.io-index"5108source = "registry+https://github.com/rust-lang/crates.io-index"
4041checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de"5109checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
5110
5111[[package]]
5112name = "uds_windows"
5113version = "1.2.1"
5114source = "registry+https://github.com/rust-lang/crates.io-index"
5115checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
5116dependencies = [
5117 "memoffset",
5118 "tempfile",
5119 "windows-sys 0.61.2",
5120]
40425121
4043[[package]]5122[[package]]
4044name = "unarray"5123name = "unarray"
4107source = "registry+https://github.com/rust-lang/crates.io-index"5186source = "registry+https://github.com/rust-lang/crates.io-index"
4108checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"5187checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
4109dependencies = [5188dependencies = [
4110 "crypto-common",5189 "crypto-common 0.1.7",
4111 "subtle",5190 "subtle",
4112]5191]
5192
5193[[package]]
5194name = "universal-hash"
5195version = "0.6.1"
5196source = "registry+https://github.com/rust-lang/crates.io-index"
5197checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96"
5198dependencies = [
5199 "crypto-common 0.2.2",
5200 "ctutils",
5201]
41135202
4114[[package]]5203[[package]]
4115name = "untrusted"5204name = "untrusted"
4141source = "registry+https://github.com/rust-lang/crates.io-index"5230source = "registry+https://github.com/rust-lang/crates.io-index"
4142checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"5231checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
5232
5233[[package]]
5234name = "uuid"
5235version = "1.23.3"
5236source = "registry+https://github.com/rust-lang/crates.io-index"
5237checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
5238dependencies = [
5239 "getrandom 0.4.2",
5240 "js-sys",
5241 "serde_core",
5242 "wasm-bindgen",
5243]
41435244
4144[[package]]5245[[package]]
4145name = "valuable"5246name = "valuable"
42045305
4205[[package]]5306[[package]]
4206name = "wasip2"5307name = "wasip2"
4207version = "1.0.3+wasi-0.2.9"5308version = "1.0.4+wasi-0.2.12"
4208source = "registry+https://github.com/rust-lang/crates.io-index"5309source = "registry+https://github.com/rust-lang/crates.io-index"
4209checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"5310checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
4210dependencies = [5311dependencies = [
4211 "wit-bindgen 0.57.1",5312 "wit-bindgen 0.57.1",
4212]5313]
4220 "wit-bindgen 0.51.0",5321 "wit-bindgen 0.51.0",
4221]5322]
5323
5324[[package]]
5325name = "wasite"
5326version = "0.1.0"
5327source = "registry+https://github.com/rust-lang/crates.io-index"
5328checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
42225329
4223[[package]]5330[[package]]
4224name = "wasm-bindgen"5331name = "wasm-bindgen"
4225version = "0.2.118"5332version = "0.2.125"
4226source = "registry+https://github.com/rust-lang/crates.io-index"5333source = "registry+https://github.com/rust-lang/crates.io-index"
4227checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"5334checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
4228dependencies = [5335dependencies = [
4229 "cfg-if",5336 "cfg-if",
4230 "once_cell",5337 "once_cell",
42355342
4236[[package]]5343[[package]]
4237name = "wasm-bindgen-futures"5344name = "wasm-bindgen-futures"
4238version = "0.4.68"5345version = "0.4.75"
4239source = "registry+https://github.com/rust-lang/crates.io-index"5346source = "registry+https://github.com/rust-lang/crates.io-index"
4240checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8"5347checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280"
4241dependencies = [5348dependencies = [
4242 "js-sys",5349 "js-sys",
4243 "wasm-bindgen",5350 "wasm-bindgen",
4244]5351]
42455352
4246[[package]]5353[[package]]
4247name = "wasm-bindgen-macro"5354name = "wasm-bindgen-macro"
4248version = "0.2.118"5355version = "0.2.125"
4249source = "registry+https://github.com/rust-lang/crates.io-index"5356source = "registry+https://github.com/rust-lang/crates.io-index"
4250checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"5357checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
4251dependencies = [5358dependencies = [
4252 "quote",5359 "quote",
4253 "wasm-bindgen-macro-support",5360 "wasm-bindgen-macro-support",
4254]5361]
42555362
4256[[package]]5363[[package]]
4257name = "wasm-bindgen-macro-support"5364name = "wasm-bindgen-macro-support"
4258version = "0.2.118"5365version = "0.2.125"
4259source = "registry+https://github.com/rust-lang/crates.io-index"5366source = "registry+https://github.com/rust-lang/crates.io-index"
4260checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"5367checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
4261dependencies = [5368dependencies = [
4262 "bumpalo",5369 "bumpalo",
4263 "proc-macro2",5370 "proc-macro2",
4264 "quote",5371 "quote",
4265 "syn",5372 "syn 2.0.117",
4266 "wasm-bindgen-shared",5373 "wasm-bindgen-shared",
4267]5374]
42685375
4269[[package]]5376[[package]]
4270name = "wasm-bindgen-shared"5377name = "wasm-bindgen-shared"
4271version = "0.2.118"5378version = "0.2.125"
4272source = "registry+https://github.com/rust-lang/crates.io-index"5379source = "registry+https://github.com/rust-lang/crates.io-index"
4273checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"5380checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
4274dependencies = [5381dependencies = [
4275 "unicode-ident",5382 "unicode-ident",
4276]5383]
4292checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"5399checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
4293dependencies = [5400dependencies = [
4294 "anyhow",5401 "anyhow",
4295 "indexmap 2.14.0",5402 "indexmap",
4296 "wasm-encoder",5403 "wasm-encoder",
4297 "wasmparser",5404 "wasmparser",
4298]5405]
4305dependencies = [5412dependencies = [
4306 "bitflags",5413 "bitflags",
4307 "hashbrown 0.15.5",5414 "hashbrown 0.15.5",
4308 "indexmap 2.14.0",5415 "indexmap",
4309 "semver",5416 "semver",
4310]5417]
43115418
4312[[package]]5419[[package]]
4313name = "web-sys"5420name = "web-sys"
4314version = "0.3.95"5421version = "0.3.102"
4315source = "registry+https://github.com/rust-lang/crates.io-index"5422source = "registry+https://github.com/rust-lang/crates.io-index"
4316checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d"5423checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d"
4317dependencies = [5424dependencies = [
4318 "js-sys",5425 "js-sys",
4319 "wasm-bindgen",5426 "wasm-bindgen",
4341 "rustix 0.38.44",5448 "rustix 0.38.44",
4342]5449]
5450
5451[[package]]
5452name = "whoami"
5453version = "1.6.1"
5454source = "registry+https://github.com/rust-lang/crates.io-index"
5455checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
5456dependencies = [
5457 "libredox",
5458 "wasite",
5459 "web-sys",
5460]
43435461
4344[[package]]5462[[package]]
4345name = "winapi-util"5463name = "winapi-util"
4350 "windows-sys 0.61.2",5468 "windows-sys 0.61.2",
4351]5469]
5470
5471[[package]]
5472name = "windows"
5473version = "0.62.2"
5474source = "registry+https://github.com/rust-lang/crates.io-index"
5475checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
5476dependencies = [
5477 "windows-collections",
5478 "windows-core",
5479 "windows-future",
5480 "windows-numerics",
5481]
5482
5483[[package]]
5484name = "windows-collections"
5485version = "0.3.2"
5486source = "registry+https://github.com/rust-lang/crates.io-index"
5487checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
5488dependencies = [
5489 "windows-core",
5490]
43525491
4353[[package]]5492[[package]]
4354name = "windows-core"5493name = "windows-core"
4363 "windows-strings",5502 "windows-strings",
4364]5503]
5504
5505[[package]]
5506name = "windows-future"
5507version = "0.3.2"
5508source = "registry+https://github.com/rust-lang/crates.io-index"
5509checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
5510dependencies = [
5511 "windows-core",
5512 "windows-link",
5513 "windows-threading",
5514]
43655515
4366[[package]]5516[[package]]
4367name = "windows-implement"5517name = "windows-implement"
4371dependencies = [5521dependencies = [
4372 "proc-macro2",5522 "proc-macro2",
4373 "quote",5523 "quote",
4374 "syn",5524 "syn 2.0.117",
4375]5525]
43765526
4377[[package]]5527[[package]]
4382dependencies = [5532dependencies = [
4383 "proc-macro2",5533 "proc-macro2",
4384 "quote",5534 "quote",
4385 "syn",5535 "syn 2.0.117",
4386]5536]
43875537
4388[[package]]5538[[package]]
4391source = "registry+https://github.com/rust-lang/crates.io-index"5541source = "registry+https://github.com/rust-lang/crates.io-index"
4392checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"5542checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
5543
5544[[package]]
5545name = "windows-numerics"
5546version = "0.3.1"
5547source = "registry+https://github.com/rust-lang/crates.io-index"
5548checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
5549dependencies = [
5550 "windows-core",
5551 "windows-link",
5552]
43935553
4394[[package]]5554[[package]]
4395name = "windows-result"5555name = "windows-result"
4478 "windows_x86_64_msvc 0.53.1",5638 "windows_x86_64_msvc 0.53.1",
4479]5639]
5640
5641[[package]]
5642name = "windows-threading"
5643version = "0.2.1"
5644source = "registry+https://github.com/rust-lang/crates.io-index"
5645checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
5646dependencies = [
5647 "windows-link",
5648]
44805649
4481[[package]]5650[[package]]
4482name = "windows_aarch64_gnullvm"5651name = "windows_aarch64_gnullvm"
45765745
4577[[package]]5746[[package]]
4578name = "winnow"5747name = "winnow"
4579version = "0.7.15"5748version = "1.0.3"
4580source = "registry+https://github.com/rust-lang/crates.io-index"5749source = "registry+https://github.com/rust-lang/crates.io-index"
4581checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"5750checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
4582dependencies = [5751dependencies = [
4583 "memchr",5752 "memchr",
4584]5753]
4585
4586[[package]]
4587name = "winnow"
4588version = "1.0.2"
4589source = "registry+https://github.com/rust-lang/crates.io-index"
4590checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
45915754
4592[[package]]5755[[package]]
4593name = "wit-bindgen"5756name = "wit-bindgen"
4623dependencies = [5786dependencies = [
4624 "anyhow",5787 "anyhow",
4625 "heck",5788 "heck",
4626 "indexmap 2.14.0",5789 "indexmap",
4627 "prettyplease",5790 "prettyplease",
4628 "syn",5791 "syn 2.0.117",
4629 "wasm-metadata",5792 "wasm-metadata",
4630 "wit-bindgen-core",5793 "wit-bindgen-core",
4631 "wit-component",5794 "wit-component",
4641 "prettyplease",5804 "prettyplease",
4642 "proc-macro2",5805 "proc-macro2",
4643 "quote",5806 "quote",
4644 "syn",5807 "syn 2.0.117",
4645 "wit-bindgen-core",5808 "wit-bindgen-core",
4646 "wit-bindgen-rust",5809 "wit-bindgen-rust",
4647]5810]
4654dependencies = [5817dependencies = [
4655 "anyhow",5818 "anyhow",
4656 "bitflags",5819 "bitflags",
4657 "indexmap 2.14.0",5820 "indexmap",
4658 "log",5821 "log",
4659 "serde",5822 "serde",
4660 "serde_derive",5823 "serde_derive",
4673dependencies = [5836dependencies = [
4674 "anyhow",5837 "anyhow",
4675 "id-arena",5838 "id-arena",
4676 "indexmap 2.14.0",5839 "indexmap",
4677 "log",5840 "log",
4678 "semver",5841 "semver",
4679 "serde",5842 "serde",
4701source = "registry+https://github.com/rust-lang/crates.io-index"5864source = "registry+https://github.com/rust-lang/crates.io-index"
4702checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"5865checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
4703dependencies = [5866dependencies = [
4704 "curve25519-dalek",5867 "curve25519-dalek 4.1.3",
4705 "rand_core 0.6.4",5868 "rand_core 0.6.4",
4706 "serde",5869 "serde",
4707 "zeroize",5870 "zeroize",
4708]5871]
47095872
4710[[package]]5873[[package]]
4711name = "yasna"5874name = "yoke"
4712version = "0.5.2"5875version = "0.8.3"
4713source = "registry+https://github.com/rust-lang/crates.io-index"5876source = "registry+https://github.com/rust-lang/crates.io-index"
4714checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"5877checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
4715dependencies = [5878dependencies = [
5879 "stable_deref_trait",
4716 "time",5880 "yoke-derive",
5881 "zerofrom",
4717]5882]
47185883
4719[[package]]5884[[package]]
4720name = "yoke"5885name = "yoke-derive"
4721version = "0.8.2"5886version = "0.8.2"
4722source = "registry+https://github.com/rust-lang/crates.io-index"5887source = "registry+https://github.com/rust-lang/crates.io-index"
4723checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"5888checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
4724dependencies = [5889dependencies = [
4725 "stable_deref_trait",5890 "proc-macro2",
4726 "yoke-derive",5891 "quote",
5892 "syn 2.0.117",
4727 "zerofrom",5893 "synstructure",
4728]5894]
5895
5896[[package]]
5897name = "zbus"
5898version = "5.16.0"
5899source = "registry+https://github.com/rust-lang/crates.io-index"
5900checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285"
5901dependencies = [
5902 "async-broadcast",
5903 "async-executor",
5904 "async-io",
5905 "async-lock",
5906 "async-process",
5907 "async-recursion",
5908 "async-task",
5909 "async-trait",
5910 "blocking",
5911 "enumflags2",
5912 "event-listener",
5913 "futures-core",
5914 "futures-lite",
5915 "hex",
5916 "libc",
5917 "ordered-stream",
5918 "rustix 1.1.4",
5919 "serde",
5920 "serde_repr",
5921 "tracing",
5922 "uds_windows",
5923 "uuid",
5924 "windows-sys 0.61.2",
5925 "winnow",
5926 "zbus_macros",
5927 "zbus_names",
5928 "zvariant",
5929]
47295930
4730[[package]]5931[[package]]
4731name = "yoke-derive"5932name = "zbus_macros"
4732version = "0.8.2"5933version = "5.16.0"
4733source = "registry+https://github.com/rust-lang/crates.io-index"5934source = "registry+https://github.com/rust-lang/crates.io-index"
4734checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"5935checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6"
4735dependencies = [5936dependencies = [
5937 "proc-macro-crate",
4736 "proc-macro2",5938 "proc-macro2",
4737 "quote",5939 "quote",
4738 "syn",5940 "syn 2.0.117",
5941 "zbus_names",
5942 "zvariant",
4739 "synstructure",5943 "zvariant_utils",
4740]5944]
5945
5946[[package]]
5947name = "zbus_names"
5948version = "4.3.2"
5949source = "registry+https://github.com/rust-lang/crates.io-index"
5950checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d"
5951dependencies = [
5952 "serde",
5953 "winnow",
5954 "zvariant",
5955]
47415956
4742[[package]]5957[[package]]
4743name = "zerocopy"5958name = "zerocopy"
4744version = "0.8.48"5959version = "0.8.52"
4745source = "registry+https://github.com/rust-lang/crates.io-index"5960source = "registry+https://github.com/rust-lang/crates.io-index"
4746checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"5961checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
4747dependencies = [5962dependencies = [
4748 "zerocopy-derive",5963 "zerocopy-derive",
4749]5964]
47505965
4751[[package]]5966[[package]]
4752name = "zerocopy-derive"5967name = "zerocopy-derive"
4753version = "0.8.48"5968version = "0.8.52"
4754source = "registry+https://github.com/rust-lang/crates.io-index"5969source = "registry+https://github.com/rust-lang/crates.io-index"
4755checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"5970checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
4756dependencies = [5971dependencies = [
4757 "proc-macro2",5972 "proc-macro2",
4758 "quote",5973 "quote",
4759 "syn",5974 "syn 2.0.117",
4760]5975]
47615976
4762[[package]]5977[[package]]
4763name = "zerofrom"5978name = "zerofrom"
4764version = "0.1.7"5979version = "0.1.8"
4765source = "registry+https://github.com/rust-lang/crates.io-index"5980source = "registry+https://github.com/rust-lang/crates.io-index"
4766checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"5981checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
4767dependencies = [5982dependencies = [
4768 "zerofrom-derive",5983 "zerofrom-derive",
4769]5984]
4776dependencies = [5991dependencies = [
4777 "proc-macro2",5992 "proc-macro2",
4778 "quote",5993 "quote",
4779 "syn",5994 "syn 2.0.117",
4780 "synstructure",5995 "synstructure",
4781]5996]
47825997
4783[[package]]5998[[package]]
4784name = "zeroize"5999name = "zeroize"
4785version = "1.8.2"6000version = "1.9.0"
4786source = "registry+https://github.com/rust-lang/crates.io-index"6001source = "registry+https://github.com/rust-lang/crates.io-index"
4787checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"6002checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
4788dependencies = [6003dependencies = [
4789 "zeroize_derive",6004 "zeroize_derive",
4790]6005]
47916006
4792[[package]]6007[[package]]
4793name = "zeroize_derive"6008name = "zeroize_derive"
4794version = "1.4.3"6009version = "1.5.0"
4795source = "registry+https://github.com/rust-lang/crates.io-index"6010source = "registry+https://github.com/rust-lang/crates.io-index"
4796checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"6011checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328"
4797dependencies = [6012dependencies = [
4798 "proc-macro2",6013 "proc-macro2",
4799 "quote",6014 "quote",
4800 "syn",6015 "syn 2.0.117",
4801]6016]
48026017
4803[[package]]6018[[package]]
4831dependencies = [6046dependencies = [
4832 "proc-macro2",6047 "proc-macro2",
4833 "quote",6048 "quote",
4834 "syn",6049 "syn 2.0.117",
4835]6050]
48366051
4837[[package]]6052[[package]]
4840source = "registry+https://github.com/rust-lang/crates.io-index"6055source = "registry+https://github.com/rust-lang/crates.io-index"
4841checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"6056checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
6057
6058[[package]]
6059name = "zvariant"
6060version = "5.12.0"
6061source = "registry+https://github.com/rust-lang/crates.io-index"
6062checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0"
6063dependencies = [
6064 "endi",
6065 "enumflags2",
6066 "serde",
6067 "winnow",
6068 "zvariant_derive",
6069 "zvariant_utils",
6070]
6071
6072[[package]]
6073name = "zvariant_derive"
6074version = "5.12.0"
6075source = "registry+https://github.com/rust-lang/crates.io-index"
6076checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737"
6077dependencies = [
6078 "proc-macro-crate",
6079 "proc-macro2",
6080 "quote",
6081 "syn 2.0.117",
6082 "zvariant_utils",
6083]
6084
6085[[package]]
6086name = "zvariant_utils"
6087version = "3.4.0"
6088source = "registry+https://github.com/rust-lang/crates.io-index"
6089checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6"
6090dependencies = [
6091 "proc-macro2",
6092 "quote",
6093 "serde",
6094 "syn 2.0.117",
6095 "winnow",
6096]
48426097
modifiedCargo.tomldiffbeforeafterboth
6package.rust-version = "1.89.0"6package.rust-version = "1.89.0"
77
8[workspace.dependencies]8[workspace.dependencies]
9better-command = { path = "./crates/better-command" }
10fleet-base = { path = "./crates/fleet-base" }9fleet-base = { path = "./crates/fleet-base" }
11fleet-shared = { path = "./crates/fleet-shared" }10fleet-shared = { path = "./crates/fleet-shared" }
12nix-eval = { path = "./crates/nix-eval" }11nix-eval = { path = "./crates/nix-eval" }
13nixlike = { path = "./crates/nixlike" }12nixlike = { path = "./crates/nixlike" }
14opentelemetry-exporter-env = { path = "./crates/opentelemetry-exporter-env" }13opentelemetry-exporter-env = { path = "./crates/opentelemetry-exporter-env" }
14remowt-fleet = { path = "./crates/remowt-fleet" }
15
16remowt-client = "0.1.3"
17remowt-endpoints = "0.1.3"
18remowt-link-shared = "0.1.3"
19remowt-plugin = "0.1.3"
20remowt-ui-prompt = "0.1.3"
1521
16abort-on-drop = "0.2"22bifrostlink = "0.2.3"
23
24uuid = { version = "1", features = ["v4"] }
25
17age = { version = "0.11", features = ["plugin", "ssh"] }26age = { version = "0.11", features = ["plugin", "ssh"] }
18age-core = "0.11"
19anyhow = "1.0"27anyhow = "1.0"
20async-trait = "0.1.88"
21axum = { version = "0.8.7", features = ["http2", "macros", "ws"] }
22axum-extra = { version = "0.12.2", features = ["typed-header"] }
23base64 = "0.22.1"28base64 = "0.22.1"
24bindgen = "0.72.0"29bindgen = "0.72.0"
30camino = "1.2.2"
25chrono = { version = "0.4.41", features = ["serde"] }31chrono = { version = "0.4.41", features = ["serde"] }
26clap = { version = "4.5", features = ["derive", "env", "unicode", "wrap_help"] }32clap = { version = "4.5", features = ["derive", "env", "unicode", "wrap_help"] }
27clap_complete = "4.5"33clap_complete = "4.5"
28cxx = "1.0.168"34cxx = "1.0.168"
29cxx-build = "1.0.168"35cxx-build = "1.0.168"
30ed25519-dalek = "2.1"36ed25519-dalek = "2.1"
31futures = "0.3.31"37futures = "0.3.31"
32futures-util = { version = "0.3.31", features = ["sink"] }
33hex = "0.4.3"38hex = "0.4.3"
34hmac = "0.12"39hmac = "0.12"
35hostname = "0.4.1"40hostname = "0.4.1"
36human-repr = "1.1"41human-repr = "1.1"
37hyper = "1.8.1"
38indicatif = "0.18"42indicatif = "0.18"
39indoc = "2.0.6"43indoc = "2.0.6"
40itertools = "0.14.0"44itertools = "0.14.0"
41linked-hash-map = "0.5.6"45linked-hash-map = "0.5.6"
42nix = { version = "0.31.2", features = ["fs", "user"] }46nix = { version = "0.31.2", features = ["fs", "user"] }
43nom = "8.0.0"47nom = "8.0.0"
44openssh = "0.11.5"
45opentelemetry = "0.31.0"48opentelemetry = "0.31.0"
46opentelemetry-appender-tracing = "0.31.1"49opentelemetry-appender-tracing = "0.31.1"
47opentelemetry-otlp = { version = "0.31.0", features = ["grpc-tonic", "gzip-tonic", "http-json", "reqwest-rustls"] }50opentelemetry-otlp = { version = "0.31.0", features = ["grpc-tonic", "gzip-tonic", "http-json", "reqwest-rustls"] }
50peg = "0.8.5"53peg = "0.8.5"
51pkg-config = "0.3.30"54pkg-config = "0.3.30"
52rand = "0.10.0"55rand = "0.10.0"
53regex = "1.11"
54serde = { version = "1.0", features = ["derive"] }56serde = { version = "1.0", features = ["derive"] }
55serde-transcode = "1.1.1"
56serde_json = "1.0"57serde_json = "1.0"
57sha2 = "0.10"58sha2 = "0.10"
58shlex = "1.3"59shlex = "1.3"
59tabled = "0.20.0"60tabled = "0.20.0"
60tempfile = "3.20"61tempfile = "3.20"
61test-log = { version = "0.2.19", features = ["trace"] }62test-log = { version = "0.2.19", features = ["trace"] }
62tf-provider = "0.2.2"
63thiserror = "2.0.12"63thiserror = "2.0.12"
64time = "0.3.41"64time = "0.3.41"
65tokio = { version = "1.45.1", features = ["fs", "macros", "rt", "rt-multi-thread", "sync", "time"] }65tokio = { version = "1.45.1", features = ["fs", "macros", "rt", "rt-multi-thread", "sync", "time"] }
66tokio-util = "0.7.17"
67toml_edit = "0.23.10"
68tracing = "0.1"66tracing = "0.1"
69tracing-indicatif = "0.3.13"67tracing-indicatif = "0.3.13"
70tracing-opentelemetry = "0.32.1"68tracing-opentelemetry = "0.32.1"
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
8default-run = "fleet"8default-run = "fleet"
99
10[dependencies]10[dependencies]
11age = { workspace = true, features = ["armor"] }
12anyhow.workspace = true11anyhow.workspace = true
13better-command.workspace = true12camino.workspace = true
14clap.workspace = true13clap.workspace = true
15clap_complete.workspace = true14clap_complete.workspace = true
16fleet-base.workspace = true15fleet-base.workspace = true
17fleet-shared.workspace = true
18nix-eval.workspace = true16nix-eval.workspace = true
19nixlike.workspace = true17remowt-fleet.workspace = true
20serde.workspace = true18serde.workspace = true
21serde_json.workspace = true19serde_json.workspace = true
22tempfile.workspace = true20tempfile.workspace = true
23tokio.workspace = true21tokio.workspace = true
24tracing.workspace = true22tracing.workspace = true
25tracing-subscriber.workspace = true23tracing-subscriber.workspace = true
2624
27abort-on-drop.workspace = true
28age-core.workspace = true
29async-trait.workspace = true
30base64.workspace = true
31chrono.workspace = true
32futures.workspace = true25futures.workspace = true
33hostname.workspace = true
34itertools.workspace = true26itertools.workspace = true
35openssh.workspace = true
36peg.workspace = true
37regex.workspace = true
38shlex.workspace = true27shlex.workspace = true
39tabled.workspace = true28tabled.workspace = true
40time = { workspace = true, features = ["serde"] }
41tokio-util = { workspace = true, features = ["codec"] }
4229
43human-repr = { workspace = true, optional = true }30human-repr = { workspace = true, optional = true }
44indicatif = { workspace = true, optional = true }31indicatif = { workspace = true, optional = true }
45nom.workspace = true
46opentelemetry.workspace = true32opentelemetry.workspace = true
47opentelemetry-appender-tracing.workspace = true33opentelemetry-appender-tracing.workspace = true
48opentelemetry-exporter-env.workspace = true34opentelemetry-exporter-env.workspace = true
49opentelemetry_sdk.workspace = true35opentelemetry_sdk.workspace = true
50thiserror.workspace = true
51tracing-indicatif = { workspace = true, optional = true }36tracing-indicatif = { workspace = true, optional = true }
52tracing-opentelemetry.workspace = true37tracing-opentelemetry.workspace = true
5338
58 "dep:tracing-indicatif",43 "dep:tracing-indicatif",
59 "dep:indicatif",44 "dep:indicatif",
60 "dep:human-repr",45 "dep:human-repr",
61 "better-command/indicatif",
62 "nix-eval/indicatif",46 "nix-eval/indicatif",
63]47]
6448
modifiedcmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth
1use std::{env::current_dir, os::unix::fs::symlink, path::PathBuf};1use std::{env::current_dir, os::unix::fs::symlink, path::PathBuf};
22
3use anyhow::Result;3use anyhow::Result;
4use camino::Utf8PathBuf;
4use clap::Parser;5use clap::Parser;
5use fleet_base::{6use fleet_base::{
6 deploy::{DeployAction, deploy_task, upload_task},7 deploy::{DeployAction, deploy_task, upload_task},
29 build_attr: String,30 build_attr: String,
30}31}
3132
32async fn build_task(config: Config, hostname: String, build_attr: &str) -> Result<PathBuf> {33async fn build_task(config: Config, hostname: String, build_attr: &str) -> Result<Utf8PathBuf> {
33 info!("building");34 info!("building");
34 let host = config.host(&hostname)?;35 let host = config.host(&hostname)?;
35 // let action = Action::from(self.subcommand.clone());36 // let action = Action::from(self.subcommand.clone());
42 // We already have system profiles for backups.43 // We already have system profiles for backups.
43 if !host.local {44 if !host.local {
44 info!("adding gc root");45 info!("adding gc root");
45 let mut cmd = config.local_host().cmd("nix").await?;46 let local = config.local_host();
46 cmd.arg("build")47 let plugin_id = local.ensure_nix_plugin().await?;
47 .comparg(48 let nix = local
48 "--profile",49 .remowt()
50 .await?
51 .plugin_endpoints::<remowt_fleet::NixClient<_>>(plugin_id);
49 format!(52 let profile = format!(
50 "/nix/var/nix/profiles/{}-{hostname}",53 "/nix/var/nix/profiles/{}-{hostname}",
51 config.data.gc_root_prefix54 config.data.gc_root_prefix
52 ),55 );
53 )
54 .arg(&out_output);
55 cmd.sudo().run_nix().await?;56 nix.switch_profile(profile, out_output.clone())
57 .await
58 .map_err(|e| anyhow::anyhow!("{e:?}"))?
59 .map_err(|e| anyhow::anyhow!("{e}"))?;
56 }60 }
5761
58 Ok(out_output)62 Ok(out_output)
modifiedcmds/fleet/src/cmds/tf.rsdiffbeforeafterboth
1use std::{collections::BTreeMap, ffi::OsString, path::PathBuf};1use std::{collections::BTreeMap, ffi::OsString};
22
3use anyhow::{Context, Result};3use anyhow::{Context, Result};
4use camino::Utf8PathBuf;
4use clap::Parser;5use clap::Parser;
5use fleet_base::host::Config;6use fleet_base::host::Config;
6use nix_eval::nix_go;7use nix_eval::nix_go;
40 let system = &config.local_system;41 let system = &config.local_system;
41 let config = &config.flake_outputs;42 let config = &config.flake_outputs;
42 let data = nix_go!(config.tf({ system }));43 let data = nix_go!(config.tf({ system }));
43 let data: PathBuf = spawn_blocking(move || data.build("out"))44 let data: Utf8PathBuf = spawn_blocking(move || data.build("out"))
44 .await45 .await
45 .expect("tf.json derivation should not fail")?;46 .expect("tf.json derivation should not fail")?;
46 let data = fs::read(&data).await?;47 let data = fs::read(&data).await?;
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
4// pub(crate) mod command;4// pub(crate) mod command;
5pub(crate) mod extra_args;5pub(crate) mod extra_args;
66
7use std::{env, ffi::OsString, process::ExitCode, sync::Arc};7use std::{process::ExitCode, sync::Arc};
88
9use anyhow::{Result, bail};9use anyhow::{Context as _, Result, bail};
10use camino::Utf8PathBuf;
10use clap::{CommandFactory, Parser};11use clap::{CommandFactory, Parser};
11use cmds::{12use cmds::{
12 build_systems::{BuildSystems, Deploy},13 build_systems::{BuildSystems, Deploy},
23#[cfg(feature = "indicatif")]24#[cfg(feature = "indicatif")]
24use indicatif::{ProgressState, ProgressStyle};25use indicatif::{ProgressState, ProgressStyle};
25use nix_eval::{26use nix_eval::{
26 gc_register_my_thread, gc_unregister_my_thread, init_libraries, init_tokio_for_nix,27 add_file_to_store, gc_register_my_thread, gc_unregister_my_thread, init_libraries,
28 init_tokio_for_nix,
27};29};
28use opentelemetry::trace::TracerProvider;30use opentelemetry::trace::TracerProvider;
48 }50 }
49 let tasks = FuturesUnordered::new();51 let tasks = FuturesUnordered::new();
50 for entry in std::fs::read_dir(&prefetch_dir)? {52 for entry in std::fs::read_dir(&prefetch_dir)? {
51 tasks.push(async {
52 let entry = entry?;53 let entry = entry?;
53 if !entry.metadata()?.is_file() {54 if !entry.metadata()?.is_file() {
54 bail!("only files should exist in prefetch directory");55 bail!("only files should exist in prefetch directory");
55 }56 }
56 let span = info_span!(57 let name = entry.file_name().to_string_lossy().into_owned();
57 "prefetching",
58 name = entry.file_name().to_string_lossy().as_ref()
59 );
60 let mut path = OsString::new();58 let path =
59 Utf8PathBuf::try_from(entry.path()).context("prefetch path should be utf8")?;
61 path.push("file://");60 let span = info_span!("prefetching", name = %name);
62 path.push(entry.path());61 tasks.push(async move {
63
64 let mut status = config.local_host().cmd("nix").await?;62 let added = tokio::task::spawn_blocking(move || add_file_to_store(&name, &path))
63 .instrument(span.clone())
64 .await??;
65 status.args(&config.nix_args);65 let _g = span.enter();
66 status.arg("store").arg("prefetch-file").arg(path);66 info!("{} -> {}", added.hash, added.store_path);
67 status.run_nix_string().instrument(span).await?;
68 Ok(())67 anyhow::Ok(())
69 });68 });
70 }69 }
71 tasks.try_collect::<Vec<()>>().await?;70 tasks.try_collect::<Vec<()>>().await?;
72 Ok(())71 Ok(())
181 let reg = tracing_subscriber::registry().with({180 let reg = tracing_subscriber::registry().with({
182 let sub = tracing_subscriber::fmt::layer()181 let sub = tracing_subscriber::fmt::layer().without_time();
183 .without_time()
184 .with_target(false);
185 #[cfg(feature = "indicatif")]182 #[cfg(feature = "indicatif")]
186 let sub = sub.with_writer(indicatif_layer.get_stderr_writer());183 let sub = sub.with_writer(indicatif_layer.get_stderr_writer());
187 sub.with_filter(filter) // .without,184 sub.with_filter(filter) // .without,
262}259}
263260
264async fn main_real(opts: RootOpts) -> Result<()> {261async fn main_real(opts: RootOpts) -> Result<()> {
265 let nix_args = std::env::var_os("NIX_ARGS")
266 .map(|a| extra_args::parse_os(&a))
267 .transpose()?
268 .unwrap_or_default();
269 let config = opts.fleet_opts.build(262 let config = opts.fleet_opts.build(matches!(
270 nix_args,
271 matches!(opts.command, Opts::Deploy(_) | Opts::BuildSystems(_)),263 opts.command,
264 Opts::Deploy(_) | Opts::BuildSystems(_)
272 )?;265 ))?;
273266
modifiedcmds/install-secrets/src/main.rsdiffbeforeafterboth
227 .from_env_lossy(),227 .from_env_lossy(),
228 )228 )
229 .without_time()229 .without_time()
230 .with_target(false)
231 .init();230 .init();
232231
233 let opts = Opts::parse();232 let opts = Opts::parse();
addedcmds/nix-plugin-fleet/Cargo.tomldiffbeforeafterboth

no changes

addedcmds/nix-plugin-fleet/src/lib.rsdiffbeforeafterboth

no changes

addedcmds/remowt-plugin-fleet/Cargo.tomldiffbeforeafterboth

no changes

addedcmds/remowt-plugin-fleet/src/main.rsdiffbeforeafterboth

no changes

deletedcmds/repl-plugin-unstable/Cargo.tomldiffbeforeafterboth

no changes

deletedcmds/repl-plugin-unstable/src/lib.rsdiffbeforeafterboth

no changes

deletedcmds/terraform-provider-fleet/Cargo.tomldiffbeforeafterboth

no changes

deletedcmds/terraform-provider-fleet/src/main.rsdiffbeforeafterboth

no changes

deletedcrates/better-command/Cargo.tomldiffbeforeafterboth

no changes

deletedcrates/better-command/src/handler.rsdiffbeforeafterboth

no changes

deletedcrates/better-command/src/lib.rsdiffbeforeafterboth

no changes

modifiedcrates/fleet-base/Cargo.tomldiffbeforeafterboth
5rust-version.workspace = true5rust-version.workspace = true
66
7[dependencies]7[dependencies]
8remowt-client.workspace = true
9remowt-endpoints.workspace = true
10remowt-fleet.workspace = true
11remowt-link-shared.workspace = true
12remowt-ui-prompt.workspace = true
13
8age.workspace = true14age.workspace = true
9anyhow.workspace = true15anyhow.workspace = true
10better-command.workspace = true16camino.workspace = true
11chrono.workspace = true17chrono.workspace = true
12clap = { workspace = true, features = ["derive"] }18clap = { workspace = true, features = ["derive"] }
13fleet-shared.workspace = true19fleet-shared.workspace = true
18nix-eval.workspace = true24nix-eval.workspace = true
19nixlike.workspace = true25nixlike.workspace = true
20nom.workspace = true26nom.workspace = true
21openssh.workspace = true
22rand.workspace = true27rand.workspace = true
23serde.workspace = true28serde.workspace = true
24serde_json.workspace = true29serde_json.workspace = true
25tabled.workspace = true30tabled.workspace = true
26tempfile.workspace = true31tempfile.workspace = true
27thiserror.workspace = true
28time = { workspace = true, features = ["parsing"] }32time = { workspace = true, features = ["parsing"] }
29tokio.workspace = true33tokio.workspace = true
30tokio-util = { workspace = true, features = ["codec"] }
31toml_edit.workspace = true
32tracing.workspace = true34tracing.workspace = true
3335
deletedcrates/fleet-base/src/command.rsdiffbeforeafterboth

no changes

modifiedcrates/fleet-base/src/deploy.rsdiffbeforeafterboth
1use std::{path::PathBuf, time::Duration};1use std::time::Duration;
22
3use anyhow::{Context as _, Result, anyhow, bail};3use anyhow::{Context as _, Result, anyhow, bail};
4use camino::Utf8PathBuf;
4use clap::ValueEnum;5use clap::ValueEnum;
5use itertools::Itertools;6use itertools::Itertools;
7use remowt_endpoints::fs::FsClient;
8use remowt_endpoints::systemd::SystemdClient;
9use remowt_fleet::NixClient;
10use remowt_link_shared::BifConfig;
6use tokio::time::sleep;11use tokio::time::sleep;
7use tracing::{Instrument as _, error, info, info_span, warn};12use tracing::{Instrument as _, error, info, info_span, warn};
813
59pub async fn deploy_task(64pub async fn deploy_task(
60 action: DeployAction,65 action: DeployAction,
61 host: &ConfigHost,66 host: &ConfigHost,
62 built: PathBuf,67 built: Utf8PathBuf,
63 specialisation: Option<String>,68 specialisation: Option<String>,
64 disable_rollback: bool,69 disable_rollback: bool,
65) -> Result<()> {70) -> Result<()> {
71 let remowt = host.remowt().await?;
66 let deploy_kind = host.deploy_kind().await?;72 let deploy_kind = host.deploy_kind().await?;
67 if (deploy_kind == DeployKind::NixosInstall || deploy_kind == DeployKind::NixosLustrate)73 if (deploy_kind == DeployKind::NixosInstall || deploy_kind == DeployKind::NixosLustrate)
68 && !matches!(action, DeployAction::Boot | DeployAction::Upload)74 && !matches!(action, DeployAction::Boot | DeployAction::Upload)
86 generation.id, generation.datetime92 generation.id, generation.datetime
87 );93 );
88 {94 {
89 let mut cmd = host.cmd("sh").await?;95 let mut cmd = remowt.cmd("sh");
90 cmd.arg("-c").arg(format!("mark=$(mktemp -p /etc -t fleet_rollback_marker.XXXXX) && echo -n {} > $mark && mv --no-clobber $mark /etc/fleet_rollback_marker", generation.id));96 cmd.arg("-c").arg(format!("mark=$(mktemp -p /etc -t fleet_rollback_marker.XXXXX) && echo -n {} > $mark && mv --no-clobber $mark /etc/fleet_rollback_marker", generation.id));
91 if let Err(e) = cmd.sudo().run().await {97 if let Err(e) = cmd.sudo().run().await {
92 error!("failed to set rollback marker: {e}");98 error!("failed to set rollback marker: {e}");
104 // if we fail to perform generation switch in time, then we will still call the activation script, and this may break something.110 // if we fail to perform generation switch in time, then we will still call the activation script, and this may break something.
105 // Anyway, reboot will still help in this case.111 // Anyway, reboot will still help in this case.
106 if action.should_schedule_rollback_run() {112 if action.should_schedule_rollback_run() {
107 let mut cmd = host.cmd("systemd-run").await?;113 let mut cmd = remowt.cmd("systemd-run");
108 cmd.comparg("--on-active", "3min")114 cmd.comparg("--on-active", "3min")
109 .comparg("--unit", "rollback-watchdog-run")115 .comparg("--unit", "rollback-watchdog-run")
110 .arg("systemctl")116 .arg("systemctl")
117 }123 }
118 }124 }
125
126 let remowt = host.remowt().await?;
127 let fs = remowt.endpoints::<FsClient<_>>();
119 if deploy_kind == DeployKind::NixosLustrate {128 if deploy_kind == DeployKind::NixosLustrate {
120 // Fleet could also create this file, but as this operation is potentially disruptive,129 // Fleet could also create this file, but as this operation is potentially disruptive,
121 // make user do it themself.130 // make user do it themself.
122 if !host.file_exists("/etc/NIXOS_LUSTRATE").await? {131 if !fs
132 .file_exists(Utf8PathBuf::from("/etc/NIXOS_LUSTRATE"))
133 .await?
134 {
123 bail!("/etc/NIXOS_LUSTRATE should be created on remote host");135 bail!("/etc/NIXOS_LUSTRATE should be created on remote host");
124 }136 }
125 // Wanted by NixOS to recognize the system as NixOS.137 // Wanted by NixOS to recognize the system as NixOS.
126 let mut cmd = host.cmd("touch").await?;138 let mut cmd = remowt.cmd("touch");
127 cmd.arg("/etc/NIXOS");139 cmd.arg("/etc/NIXOS");
128 cmd.sudo().run().await.context("creating /etc/NIXOS")?;140 cmd.sudo().run().await.context("creating /etc/NIXOS")?;
129 }141 }
130 if deploy_kind == DeployKind::NixosInstall {142 if deploy_kind == DeployKind::NixosInstall {
131 info!(143 info!(
132 "running nixos-install to switch profile, install bootloader, and perform activation"144 "running nixos-install to switch profile, install bootloader, and perform activation"
133 );145 );
134 let mut cmd = host.cmd("nixos-install").await?;146 let mut cmd = remowt.cmd("nixos-install");
135 cmd.arg("--system").arg(&built).args([147 cmd.arg("--system").arg(&built).args([
136 // Channels here aren't fleet host system channels, but channels embedded in installation cd, which might be old.148 // Channels here aren't fleet host system channels, but channels embedded in installation cd, which might be old.
137 // It is possible to copy host channels, but I would prefer non-flake nix just to be unsupported.149 // It is possible to copy host channels, but I would prefer non-flake nix just to be unsupported.
147 if action.should_switch_profile() && !failed {159 if action.should_switch_profile() && !failed {
148 info!("switching system profile generation");160 info!("switching system profile generation");
149161
162 match host.ensure_nix_plugin().await {
163 Ok(plugin_id) => {
164 let nix_elevated = remowt.plugin_endpoints::<NixClient<_>>(plugin_id);
150 // To avoid even more problems, using nixos-install for now.165 // To avoid even more problems, using nixos-install for now.
151 // // nix build is unable to work with --store argument for some reason, and nix until 2.26 didn't support copy with --profile argument,166 // // nix build is unable to work with --store argument for some reason, and nix until 2.26 didn't support copy with --profile argument,
152 // // falling back to using nix-env command167 // // falling back to using nix-env command
164 // error!("failed to switch system profile generation: {e}");179 // error!("failed to switch system profile generation: {e}");
165 // failed = true;180 // failed = true;
166 // }181 // }
167 // It would also be possible to update profile atomically during copy:
168 // https://github.com/NixOS/nix/pull/11657
169 let mut cmd = host.nix_cmd().await?;
170 cmd.arg("build");
171 cmd.comparg("--profile", "/nix/var/nix/profiles/system");
172 cmd.arg(&built);
173 if let Err(e) = cmd.sudo().run_nix().await {182 if let Err(e) = nix_elevated
183 .switch_profile("/nix/var/nix/profiles/system".to_owned(), built.clone())
184 .await
185 {
174 error!("failed to switch system profile generation: {e}");186 error!("failed to switch system profile generation: {e}");
175 failed = true;187 failed = true;
176 }188 }
189 }
190 Err(e) => {
191 failed = true;
192 error!("failed to enable nix plugin: {e:?}");
193 }
194 }
177 }195 }
178196
179 // FIXME: Connection might be disconnected after activation run197 // FIXME: Connection might be disconnected after activation run
189 built.clone()207 built.clone()
190 };208 };
191 let switch_script = specialised.join("bin/switch-to-configuration");209 let switch_script = specialised.join("bin/switch-to-configuration");
192 let mut cmd = host.cmd("systemd-run").in_current_span().await?;210 let mut cmd = remowt.cmd("systemd-run");
193 if deploy_kind == DeployKind::NixosLustrate {211 if deploy_kind == DeployKind::NixosLustrate {
194 cmd.arg("--setenv=NIXOS_INSTALL_BOOTLOADER=1");212 cmd.arg("--setenv=NIXOS_INSTALL_BOOTLOADER=1");
195 }213 }
209 }227 }
210 }228 }
211 if action.should_create_rollback_marker() {229 if action.should_create_rollback_marker() {
230 let elevated_systemd = remowt.run0_endpoints::<SystemdClient<BifConfig>>().await?;
231 let elevated_fs = remowt.run0_endpoints::<FsClient<BifConfig>>().await?;
212 if !disable_rollback {232 if !disable_rollback {
213 if failed {233 if failed {
214 if action.should_schedule_rollback_run() {234 if action.should_schedule_rollback_run() {
215 info!("executing rollback");235 info!("executing rollback");
216 if let Err(e) = host236 if let Err(e) = elevated_systemd
217 .systemctl_start("rollback-watchdog.service")237 .start("rollback-watchdog.service".to_owned())
218 .instrument(info_span!("rollback"))238 .instrument(info_span!("rollback"))
219 .await239 .await
220 {240 {
223 }243 }
224 } else {244 } else {
225 info!("trying to mark upgrade as successful");245 info!("trying to mark upgrade as successful");
226 if let Err(e) = host246 if let Err(e) = elevated_fs
227 .rm_file("/etc/fleet_rollback_marker", true)247 .rm_file(Utf8PathBuf::from("/etc/fleet_rollback_marker"))
228 .in_current_span()248 .in_current_span()
229 .await249 .await
230 {250 {
234 }254 }
235 }255 }
236 info!("disarming watchdog, just in case");256 info!("disarming watchdog, just in case");
237 if let Err(_e) = host.systemctl_stop("rollback-watchdog.timer").await {257 if let Err(_e) = elevated_systemd
258 .stop("rollback-watchdog.timer".to_owned())
259 .await
260 {
238 // It is ok, if there was no reboot - then timer might not be running.261 // It is ok, if there was no reboot - then timer might not be running.
239 }262 }
240 if action.should_schedule_rollback_run() {263 if action.should_schedule_rollback_run() {
241 if let Err(e) = host.systemctl_stop("rollback-watchdog-run.timer").await {264 if let Err(e) = elevated_systemd
265 .stop("rollback-watchdog-run.timer".to_owned())
266 .await
267 {
242 error!("failed to disarm rollback run: {e}");268 error!("failed to disarm rollback run: {e}");
243 }269 }
244 }270 }
245 } else if let Err(_e) = host271 } else if let Err(_e) = elevated_fs
246 .rm_file("/etc/fleet_rollback_marker", true)272 .rm_file(Utf8PathBuf::from("/etc/fleet_rollback_marker"))
247 .in_current_span()273 .in_current_span()
248 .await274 .await
249 {275 {
257 config: &Config,283 config: &Config,
258 host: &ConfigHost,284 host: &ConfigHost,
259 location: GenerationStorage,285 location: GenerationStorage,
260 generation: PathBuf,286 generation: Utf8PathBuf,
261) -> Result<PathBuf> {287) -> Result<Utf8PathBuf> {
262 if matches!(location, GenerationStorage::Pusher) {288 if matches!(location, GenerationStorage::Pusher) {
263 bail!("pusher is not enabled in this version of fleet");289 bail!("pusher is not enabled in this version of fleet");
264 }290 }
273 }299 }
274 Err(e) if tries < 3 => {300 Err(e) if tries < 3 => {
275 tries += 1;301 tries += 1;
276 warn!("copy failure ({}/3): {}", tries, e);302 warn!("copy failure ({}/3): {:#}", tries, e);
277 sleep(Duration::from_millis(5000)).await;303 sleep(Duration::from_millis(5000)).await;
278 }304 }
279 Err(e) => {305 Err(e) => {
280 bail!("upload failed: {e}");306 bail!("upload failed: {e:#}");
281 }307 }
282 }308 }
283 }309 }
modifiedcrates/fleet-base/src/fleetdata.rsdiffbeforeafterboth
144 pub generation_data: Value,144 pub generation_data: Value,
145}145}
146
147fn is_false(b: &bool) -> bool {
148 *b == false
149}
150146
151#[derive(Serialize, Deserialize, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)]147#[derive(Serialize, Deserialize, Clone, Debug, PartialOrd, Ord, PartialEq, Eq)]
152#[repr(transparent)]148#[repr(transparent)]
291 }287 }
292288
293 // Which one is easier to access289 // Which one is easier to access
294 return a.owners.len().cmp(&b.owners.len());290 a.owners.len().cmp(&b.owners.len())
295}291}
296292
297impl FleetSecretDistributions {293impl FleetSecretDistributions {
modifiedcrates/fleet-base/src/host.rsdiffbeforeafterboth
1use std::{1use std::{
2 collections::{BTreeMap, BTreeSet, HashSet},2 collections::{BTreeMap, BTreeSet, HashSet},
3 ffi::{OsStr, OsString},3 future::Future,
4 fmt::Display,
5 io::Write,4 io::Write,
6 ops::Deref,5 ops::Deref,
7 path::PathBuf,6 path::PathBuf,
7 pin::Pin,
8 str::FromStr,8 str::FromStr,
9 sync::{Arc, Mutex, MutexGuard, OnceLock},9 sync::{Arc, OnceLock},
10};10};
1111
12use anyhow::{Context, Result, anyhow, bail, ensure};12use anyhow::{Context, Result, anyhow, bail, ensure};
13use camino::{Utf8Path, Utf8PathBuf};
13use chrono::{DateTime, Utc};14use chrono::{DateTime, Utc};
14use fleet_shared::SecretData;15use fleet_shared::SecretData;
15use nix_eval::{Value, nix_go, nix_go_json, util::assert_warn};16use nix_eval::{Store, Value, nix_go, nix_go_json, util::assert_warn};
16use openssh::{ControlPersist, SessionBuilder};17use remowt_client::{AgentBundle, Remowt};
17use serde::de::DeserializeOwned;18use remowt_endpoints::fs::FsClient;
19use remowt_link_shared::Address;
20use remowt_ui_prompt::auto::AutoPrompter;
21use remowt_ui_prompt::bifrost::PromptEndpoints;
22use remowt_ui_prompt::{PrependSourcePrompter, Source};
18use tabled::Tabled;23use tabled::Tabled;
19use tempfile::NamedTempFile;24use tempfile::NamedTempFile;
20use time::{UtcDateTime, format_description};25use time::UtcDateTime;
26use tokio::task::spawn_blocking;
21use tracing::warn;27use tracing::{info, warn};
2228
23use crate::{29use crate::fleetdata::{
24 command::MyCommand,
25 fleetdata::{
26 FleetData, FleetSecretData, FleetSecretDistribution, FleetSecretPart, SecretOwner,30 FleetData, FleetSecretData, FleetSecretDistribution, FleetSecretPart, SecretOwner,
27 },
28};31};
2932
30pub struct FleetConfigInternals {33pub struct FleetConfigInternals {
36 /// builtins.currentSystem39 /// builtins.currentSystem
37 pub local_system: String,40 pub local_system: String,
38 pub data: Arc<FleetData>,41 pub data: Arc<FleetData>,
39 pub nix_args: Vec<OsString>,
40 /// fleet_config.config42 /// fleet_config.config
41 pub config_field: Value,43 pub config_field: Value,
42 /// flake.output44 /// flake.output
48 pub default_pkgs: Value,50 pub default_pkgs: Value,
49 /// inputs.nixpkgs51 /// inputs.nixpkgs
50 pub nixpkgs: Value,52 pub nixpkgs: Value,
53
54 pub local_host: OnceLock<Arc<ConfigHost>>,
51}55}
5256
53// TODO: Make field not pub57// TODO: Make field not pub
62 }66 }
63}67}
6468
65#[derive(Clone, Copy, Debug)]
66pub enum EscalationStrategy {
67 Sudo,
68 Run0,
69 Su,
70}
71
72#[derive(Clone, PartialEq, Copy, Debug)]69#[derive(Clone, PartialEq, Copy, Debug)]
73pub enum DeployKind {70pub enum DeployKind {
74 /// NixOS => NixOS managed by fleet71 /// NixOS => NixOS managed by fleet
115112
116 // TODO: Move command helpers away with connectivity refactor113 // TODO: Move command helpers away with connectivity refactor
117 pub local: bool,114 pub local: bool,
118 pub session: OnceLock<Arc<openssh::Session>>,115 pub remowt: OnceLock<Remowt>,
116 nix_store: OnceLock<Arc<Store>>,
117 nix_plugin: tokio::sync::OnceCell<()>,
119}118}
120119
120const NIX_PLUGIN_ID: u16 = 2;
121
122fn agents_dir() -> Result<PathBuf> {
123 std::env::var_os("REMOWT_AGENTS_DIR")
124 .map(PathBuf::from)
125 .or_else(|| option_env!("REMOWT_AGENTS_DIR").map(PathBuf::from))
126 .ok_or_else(|| {
127 anyhow!("no remowt-agents bundle; set REMOWT_AGENTS_DIR to a remowt-agents output")
128 })
129}
130
131fn agent_bundle() -> Result<AgentBundle> {
132 AgentBundle::from_dir(agents_dir()?)
133}
134
121#[derive(Debug, Clone, Copy)]135#[derive(Debug, Clone, Copy)]
122pub enum GenerationStorage {136pub enum GenerationStorage {
123 Deployer,137 Deployer,
143 #[tabled(rename = "Created at")]157 #[tabled(rename = "Created at")]
144 pub datetime: UtcDateTime,158 pub datetime: UtcDateTime,
145 #[tabled(format = "{:?}")]159 #[tabled(format = "{:?}")]
146 pub store_path: PathBuf,160 pub store_path: Utf8PathBuf,
147 #[tabled(skip)]161 #[tabled(skip)]
148 pub location: GenerationStorage,162 pub location: GenerationStorage,
149}163}
153 }167 }
154}168}
155169
156fn parse_generation_line(g: &str) -> Option<Generation> {
157 let mut parts = g.split_whitespace();
158 let id = parts.next()?;
159 let id: u32 = id.parse().ok()?;
160 let date = parts.next()?;
161 let time = parts.next()?;
162 let current = if let Some(current) = parts.next() {
163 if current == "(current)" {
164 Some(true)
165 } else {
166 None
167 }
168 } else {
169 Some(false)
170 };
171 let current = current?;
172 if parts.next().is_some() {
173 warn!("unexpected text after generation: {g}");
174 }
175
176 let format = format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second]")
177 .expect("valid format");
178 let datetime = UtcDateTime::parse(&format!("{date} {time}"), &format).ok()?;
179
180 Some(Generation {
181 id,
182 current,
183 datetime,
184 store_path: PathBuf::new(),
185 location: GenerationStorage::Machine,
186 })
187}
188// TODO: Move command helpers away with connectivity refactor
189impl ConfigHost {170impl ConfigHost {
190 pub async fn list_generations(&self, profile: &str) -> Result<Vec<Generation>> {171 pub async fn list_generations(&self, profile: &str) -> Result<Vec<Generation>> {
191 let mut cmd = self.cmd("nix-env").await?;172 let plugin_id = self.ensure_nix_plugin().await?;
192 cmd.comparg("--profile", format!("/nix/var/nix/profiles/{profile}"))173 let nix = self
193 .arg("--list-generations")174 .remowt()
194 .env("TZ", "UTC");175 .await?
176 .plugin_endpoints::<remowt_fleet::NixClient<_>>(plugin_id);
195 // Sudo is required because --list-generations tries to acquire profile lock177 let raw = nix
196 let data = cmd.sudo().run_string().await?;178 .list_generations(profile.to_owned())
197 let mut generations = data179 .await
198 .split('\n')180 .map_err(|e| anyhow!("{e:?}"))?
199 .map(|e| e.trim())181 .map_err(|e| anyhow!("{e}"))?;
182 raw.into_iter()
200 .filter(|&l| !l.is_empty())183 .map(|g| {
184 let id: u32 =
185 g.id.try_into()
201 .filter_map(|g| {186 .with_context(|| format!("generation id {} doesn't fit in u32", g.id))?;
202 let generation = parse_generation_line(g);187 let datetime = UtcDateTime::from_unix_timestamp(g.creation_time_unix)
203 if generation.is_none() {188 .with_context(|| {
204 warn!("bad generation: {g}");189 format!("invalid generation timestamp {}", g.creation_time_unix)
205 };190 })?;
206 generation191 Ok(Generation {
192 id,
193 current: g.current,
194 datetime,
195 store_path: g.store_path,
196 location: GenerationStorage::Machine,
197 })
207 })198 })
208 .collect::<Vec<_>>();199 .collect()
209 for ele in generations.iter_mut() {
210 let mut cmd = self.cmd("readlink").await?;
211 cmd.arg("--")
212 .arg(format!("/nix/var/nix/profiles/{profile}-{}-link", ele.id));
213 let path = cmd.run_string().await?;
214 ele.store_path = PathBuf::from(path.trim_end_matches("\n"));
215 }
216
217 Ok(generations)
218 }200 }
219201
220 pub fn set_session_destination(&self, dest: String) {202 pub fn set_session_destination(&self, dest: String) {
236 if let Some(kind) = self.deploy_kind.get() {218 if let Some(kind) = self.deploy_kind.get() {
237 return Ok(*kind);219 return Ok(*kind);
238 }220 }
239 let is_fleet_managed = match self.file_exists("/etc/FLEET_HOST").await {221 let remowt = self.remowt().await?;
222 let fs = remowt.endpoints::<FsClient<_>>();
223 let is_fleet_managed = match fs.file_exists(Utf8PathBuf::from("/etc/FLEET_HOST")).await {
240 Ok(v) => v,224 Ok(v) => v,
241 Err(e) => {225 Err(e) => {
242 bail!("failed to query remote system kind: {e}");226 bail!("failed to query remote system kind: {e}");
252 1. manually create /etc/FLEET_HOST file on the target host,236 1. manually create /etc/FLEET_HOST file on the target host,
253 2. use ?deploy_kind=fleet host argument if you're upgrading from older version of fleet237 2. use ?deploy_kind=fleet host argument if you're upgrading from older version of fleet
254 3. use ?deploy_kind=upgrade_to_fleet if you're upgrading from plain nixos to fleet-managed nixos238 3. use ?deploy_kind=upgrade_to_fleet if you're upgrading from plain nixos to fleet-managed nixos
239 for installation use ?deploy_kind=nixos_install / ?deploy_kind=nixos_lustrate
255 "}240 "}
256 );241 );
257 }242 }
258 // TOCTOU is possible243 // TOCTOU is possible
259 let _ = self.deploy_kind.set(DeployKind::Fleet);244 let _ = self.deploy_kind.set(DeployKind::Fleet);
260 Ok(*self.deploy_kind.get().expect("deploy kind is just set"))245 Ok(*self.deploy_kind.get().expect("deploy kind is just set"))
261 }246 }
262 pub async fn escalation_strategy(&self) -> Result<EscalationStrategy> {247 async fn connection(&self) -> Result<Remowt> {
263 // Prefer sudo, as run0 has some gotchas with polkit248 if let Some(conn) = self.remowt.get() {
264 // and too many repeating prompts.
265 if (self.find_in_path("sudo").await).is_ok() {
266 return Ok(EscalationStrategy::Sudo);249 return Ok(conn.clone());
267 }250 }
268 if (self.find_in_path("run0").await).is_ok() {251 let bundle = agent_bundle()?;
252 let conn = if self.local {
269 return Ok(EscalationStrategy::Run0);253 Remowt::connect_local(&bundle)
270 }254 .await
271 Ok(EscalationStrategy::Su)
272 }255 .context("starting local remowt agent")?
273 async fn open_session(&self) -> Result<Arc<openssh::Session>> {
274 assert!(!self.local, "do not open ssh connection to local session");
275 // FIXME: TOCTOU256 } else {
276 if let Some(session) = &self.session.get() {257 let dest = self
258 .session_destination
259 .get()
277 return Ok((*session).clone());260 .cloned()
261 .unwrap_or_else(|| self.name.clone());
262 Remowt::connect(&dest, &bundle)
263 .await
264 .map_err(|e| anyhow!("remowt error while connecting to {}: {e:#?}", self.name))?
278 };265 };
279 let mut session = SessionBuilder::default();266 PromptEndpoints(PrependSourcePrompter {
267 prompter: AutoPrompter::new().await,
268 source: if self.local {
269 vec![]
270 } else {
271 vec![Source(std::borrow::Cow::Owned(format!(
272 "ssh host: {}",
273 self.name
274 )))]
275 },
276 description: "".to_owned(),
277 })
278 .register_endpoints(&mut conn.rpc());
280 session.control_persist(ControlPersist::ClosedAfterInitialConnection);279 let _ = self.remowt.set(conn);
280 Ok(self.remowt.get().expect("just set").clone())
281 }
281282
282 let dest = self.session_destination.get().unwrap_or(&self.name);283 /// Client for this host's unprivileged agent.
283 let session = session
284 .connect(&dest)
285 .await284 pub async fn remowt(&self) -> Result<Remowt> {
286 .map_err(|e| anyhow!("ssh error while connecting to {}: {e:#?}", self.name))?;
287 let session = Arc::new(session);
288 self.session.set(session.clone()).expect("TOCTOU happened");285 Ok(self.connection().await?)
289 Ok(session)
290 }286 }
287
291 pub async fn mktemp_dir(&self) -> Result<String> {288 pub fn ensure_nix_plugin(&self) -> Pin<Box<dyn Future<Output = Result<u16>> + Send + '_>> {
292 let mut cmd = self.cmd("mktemp").await?;289 Box::pin(async {
290 self.nix_plugin
291 .get_or_try_init(|| async {
292 let pkgs = self.pkgs()?;
293 let name = "remowt-plugin-fleet";
294 let plugin = nix_go!(pkgs[{ name }]);
295 let built = plugin
296 .build("out")
297 .context("failed to build the fleet nix plugin")?;
293 cmd.arg("-d");298 let copied = self
299 .remote_derivation(&built)
300 .await
301 .context("failed to copy the fleet nix plugin to the host store")?;
294 let path = cmd.run_string().await?;302 let bin = copied.join("bin/remowt-plugin-fleet");
303 self.remowt()
304 .await?
305 .run0_load_plugin_path(NIX_PLUGIN_ID, bin.as_str())
306 .await
307 .context("failed to load the fleet nix plugin")?;
295 Ok(path.trim_end().to_owned())308 self.remowt()
309 .await?
310 .rpc()
311 .wait_for_connection_to(Address::Plugin(NIX_PLUGIN_ID))
312 .await
313 .map_err(|e| anyhow!("failed to wait for plugin"))?;
314 anyhow::Ok(())
315 })
316 .await?;
317 Ok(NIX_PLUGIN_ID)
318 })
296 }319 }
297 pub async fn file_exists(&self, path: impl AsRef<OsStr>) -> Result<bool> {320
298 let mut cmd = self.cmd("sh").await?;321 async fn nix_store(&self) -> Result<Arc<Store>> {
299 cmd.arg("-c")
300 .arg("test -e \"$1\" && echo true || echo false")
301 .arg("_")
302 .arg(path);
303 cmd.run_value().await
304 }
305 pub async fn read_file_bin(&self, path: impl AsRef<OsStr>) -> Result<Vec<u8>> {
306 let mut cmd = self.cmd("cat").await?;322 if let Some(store) = self.nix_store.get() {
307 cmd.arg(path);
308 cmd.run_bytes().await
309 }
310 pub async fn read_file_text(&self, path: impl AsRef<OsStr>) -> Result<String> {
311 let mut cmd = self.cmd("cat").await?;
312 cmd.arg(path);
313 cmd.run_string().await
314 }
315 pub async fn read_dir(&self, path: impl AsRef<OsStr>) -> Result<Vec<String>> {
316 let mut cmd = self.cmd("ls").await?;323 return Ok(store.clone());
317 cmd.arg(path);
318 let out = cmd.run_string().await?;
319 let mut lines = out.split('\n');
320 if let Some(last) = lines.next_back() {
321 ensure!(last.is_empty(), "output of ls should end with newline");
322 }324 }
323 Ok(lines.map(ToOwned::to_owned).collect())325 let conn = self.connection().await?;
326 let socket = match self.deploy_kind().await? {
327 DeployKind::NixosInstall => {
328 remowt_fleet::nix_store_socket(conn, "/mnt?require-sigs=false").await?
329 }
330 _ => remowt_fleet::nix_store_socket(conn, "auto").await?,
331 };
332 let uri = format!("unix://{}", socket.display());
333 let store = Arc::new(Store::open(&uri)?);
334 let _ = self.nix_store.set(store);
335 Ok(self.nix_store.get().expect("just set").clone())
324 }336 }
325 #[allow(dead_code)]
326 pub async fn read_file_json<D: DeserializeOwned>(&self, path: impl AsRef<OsStr>) -> Result<D> {
327 let text = self.read_file_text(path).await?;
328 Ok(serde_json::from_str(&text)?)
329 }
330 pub async fn read_env(&self, env: &str) -> Result<String> {
331 let mut cmd = self.cmd("printenv").await?;
332 cmd.arg(env);
333 cmd.run_string().await
334 }
335 pub async fn find_in_path(&self, command: &str) -> Result<String> {
336 // // `which` is not a part of coreutils, and it might not exist on machine.
337 // let path = self.read_env("PATH").await?;
338 // // Assuming delimiter is :, we don't work with windows host, this check will be much
339 // // more sophisticated in remowt backend (and quicker, since actual PATH search will be done on remote machine)
340 // for ele in path.split(':') {
341 // let test_path = format!("{ele}/{cmd}");
342 // test -x etc
343 // }
344 // let mut cmd = self.cmd("printenv").await?;
345 // cmd.arg(env);
346 // Ok(cmd.run_string().await?)
347 // Assuming this is an environment issue if which doesn't exist, will be fixed with remowt.
348 let mut cmd = self
349 .cmd_escalation(
350 // Not used
351 EscalationStrategy::Su,
352 "which",
353 )
354 .await?;
355 cmd.arg(command);
356 cmd.run_string().await
357 }
358 pub async fn read_file_value<D: FromStr>(&self, path: impl AsRef<OsStr>) -> Result<D>
359 where
360 <D as FromStr>::Err: Display,
361 {
362 let text = self.read_file_text(path).await?;
363 D::from_str(&text).map_err(|e| anyhow!("failed to parse value: {e}"))
364 }
365 pub async fn cmd(&self, cmd: impl AsRef<OsStr>) -> Result<MyCommand> {
366 self.cmd_escalation(self.escalation_strategy().await?, cmd)
367 .await
368 }
369 pub async fn cmd_escalation(
370 &self,
371 escalation: EscalationStrategy,
372 cmd: impl AsRef<OsStr>,
373 ) -> Result<MyCommand> {
374 if self.local {
375 Ok(MyCommand::new(escalation, cmd))
376 } else {
377 let session = self.open_session().await?;
378 Ok(MyCommand::new_on(escalation, cmd, session))
379 }
380 }
381 pub async fn nix_cmd(&self) -> Result<MyCommand> {
382 let mut nix = self.cmd("nix").await?;
383 nix.args([
384 "--extra-experimental-features",
385 "nix-command",
386 "--extra-experimental-features",
387 "flakes",
388 ]);
389 Ok(nix)
390 }
391337
392 pub async fn decrypt(&self, data: SecretData) -> Result<Vec<u8>> {338 pub async fn decrypt(&self, data: SecretData) -> Result<Vec<u8>> {
393 ensure!(data.encrypted, "secret is not encrypted");339 ensure!(data.encrypted, "secret is not encrypted");
394 let mut cmd = self.cmd("fleet-install-secrets").await?;340 let remowt = self.remowt().await?;
341 let mut cmd = remowt.cmd("fleet-install-secrets");
395 cmd.arg("decrypt").eqarg("--secret", data.to_string());342 cmd.arg("decrypt").eqarg("--secret", data.to_string());
396 let encoded = cmd343 let encoded = cmd
397 .sudo()344 .sudo()
434 data: SecretData,381 data: SecretData,
435 targets: BTreeSet<SecretOwner>,382 targets: BTreeSet<SecretOwner>,
436 ) -> Result<SecretData> {383 ) -> Result<SecretData> {
384 let remowt = self.remowt().await?;
437 ensure!(data.encrypted, "secret is not encrypted");385 ensure!(data.encrypted, "secret is not encrypted");
438 let mut cmd = self.cmd("fleet-install-secrets").await?;386 let mut cmd = remowt.cmd("fleet-install-secrets");
439 cmd.arg("reencrypt").eqarg("--secret", data.to_string());387 cmd.arg("reencrypt").eqarg("--secret", data.to_string());
440 for target in targets {388 for target in targets {
441 let key = self.config.key(&target).await?;389 let key = self.config.key(&target).await?;
451 Ok(data)399 Ok(data)
452 }400 }
453 /// Returns path for futureproofing, as path might change i.e on conversion to CA401 /// Returns path for futureproofing, as path might change i.e on conversion to CA
454 pub async fn remote_derivation(&self, path: &PathBuf) -> Result<PathBuf> {402 pub async fn remote_derivation(&self, path: impl AsRef<Utf8Path>) -> Result<Utf8PathBuf> {
403 let path = path.as_ref().to_owned();
455 if self.local {404 if self.local {
456 // Path is located locally, thus already trusted.405 // Path is located locally, thus already trusted.
457 return Ok(path.to_owned());406 return Ok(path);
458 }407 }
459 let mut sign = MyCommand::new(408 let sign: Pin<Box<dyn Future<Output = Result<()>> + Send>> = {
460 // TODO: Look at the current escalation strategy.409 let path = path.clone();
461 // ... or switch to run0 right after polkit update410 Box::pin(async move {
411 let local = self.config.local_host();
412 let plugin_id = local.ensure_nix_plugin().await?;
462 EscalationStrategy::Sudo,413 let nix = local
463 "nix",414 .remowt()
464 );
465 sign.arg("store")415 .await?
466 .arg("sign")416 .plugin_endpoints::<remowt_fleet::NixClient<_>>(plugin_id);
467 .comparg("--key-file", "/etc/nix/private-key")417 nix.sign_closure(path, Utf8PathBuf::from("/etc/nix/private-key"))
468 .arg("-r")418 .await
419 .map_err(|e| anyhow!("{e:?}"))?
469 .arg(&path);420 .map_err(|e| anyhow!("{e}"))?;
470 if let Err(e) = sign.sudo().run_nix().await {421 Ok(())
422 })
423 };
424 if let Err(e) = sign.await {
471 warn!("failed to sign store paths: {e}");425 warn!("failed to sign store paths: {e}");
472 }426 }
473 let mut nix = MyCommand::new(427 let store = self.nix_store().await?;
474 // Not used
475 EscalationStrategy::Su,
476 "nix",
477 );
478 nix.arg("copy").arg("--substitute-on-destination");
479
480 let proto = if self.legacy_ssh_store.get().cloned().unwrap_or(false) {428 {
481 "ssh"429 let path = path.clone();
482 } else {
483 "ssh-ng"
484 };
485
486 match self.deploy_kind().await? {
487 DeployKind::Fleet | DeployKind::UpgradeToFleet | DeployKind::NixosLustrate => {430 spawn_blocking(move || nix_eval::copy_closure_to(&store, path.as_ref()))
488 nix.comparg("--to", format!("{proto}://{}", self.name));
489 }431 .await?
490 DeployKind::NixosInstall => {
491 nix
492 // Signature checking makes no sense with remote-store store argument set, as we're not even interacting with remote nix daemon
493 .arg("--no-check-sigs")
494 .comparg(432 .context("copying closure to remote store")?;
495 "--to",
496 format!("{proto}://root@{}?remote-store=/mnt", self.name),
497 );
498 }
499 }433 }
500 nix.arg(path);434 Ok(path)
501 nix.run_nix().await.context("nix copy")?;
502 Ok(path.to_owned())
503 }435 }
504 pub async fn systemctl_stop(&self, name: &str) -> Result<()> {
505 let mut cmd = self.cmd("systemctl").await?;
506 cmd.arg("stop").arg(name);
507 cmd.sudo().run().await
508 }
509 pub async fn systemctl_start(&self, name: &str) -> Result<()> {
510 let mut cmd = self.cmd("systemctl").await?;
511 cmd.arg("start").arg(name);
512 cmd.sudo().run().await
513 }
514
515 pub async fn rm_file(&self, path: impl AsRef<OsStr>, sudo: bool) -> Result<()> {
516 let mut cmd = self.cmd("rm").await?;
517 cmd.arg("-f").arg(path);
518 if sudo {
519 cmd = cmd.sudo()
520 }
521 cmd.run().await
522 }
523}436}
524437
525struct HostSecretDefinition(Value);438struct HostSecretDefinition(Value);
630 }543 }
631 Ok(out)544 Ok(out)
632 }545 }
633 pub fn local_host(&self) -> ConfigHost {546 pub fn local_host(&self) -> Arc<ConfigHost> {
634 ConfigHost {547 self.local_host
548 .get_or_init(|| {
549 Arc::new(ConfigHost {
635 config: self.clone(),550 config: self.clone(),
636 name: "<virtual localhost>".to_owned(),551 name: "<virtual localhost>".to_owned(),
637 host_config: None,552 host_config: None,
638 nixos_config: OnceLock::new(),553 nixos_config: OnceLock::new(),
639 nixos_unchecked_config: OnceLock::new(),554 nixos_unchecked_config: OnceLock::new(),
640 groups: {555 groups: {
641 let cell = OnceLock::new();556 let cell = OnceLock::new();
642 let _ = cell.set(vec![]);557 let _ = cell.set(vec![]);
643 cell558 cell
644 },559 },
645 pkgs_override: Some(self.default_pkgs.clone()),560 pkgs_override: Some(self.default_pkgs.clone()),
646561
647 local: true,562 local: true,
648 session: OnceLock::new(),563 remowt: OnceLock::new(),
649 deploy_kind: OnceLock::new(),564 nix_store: OnceLock::new(),
565 nix_plugin: tokio::sync::OnceCell::new(),
566 deploy_kind: OnceLock::new(),
650 session_destination: OnceLock::new(),567 session_destination: OnceLock::new(),
651 legacy_ssh_store: OnceLock::new(),568 legacy_ssh_store: OnceLock::new(),
652 }569 })
570 })
571 .clone()
653 }572 }
654573
655 pub fn preferred_hosts(574 pub fn preferred_hosts(
684603
685 // TODO: Remove with connectivit refactor604 // TODO: Remove with connectivit refactor
686 local: self.localhost == name,605 local: self.localhost == name,
687 session: OnceLock::new(),606 remowt: OnceLock::new(),
607 nix_store: OnceLock::new(),
608 nix_plugin: tokio::sync::OnceCell::new(),
688 deploy_kind: OnceLock::new(),609 deploy_kind: OnceLock::new(),
689 session_destination: OnceLock::new(),610 session_destination: OnceLock::new(),
690 legacy_ssh_store: OnceLock::new(),611 legacy_ssh_store: OnceLock::new(),
modifiedcrates/fleet-base/src/keys.rsdiffbeforeafterboth
31 } else {31 } else {
32 warn!("Loading key for {}", host);32 warn!("Loading key for {}", host);
33 let host = self.host(host)?;33 let host = self.host(host)?;
34 let mut cmd = host.cmd("cat").await?;34 let remowt = host.remowt().await?;
35 let mut cmd = remowt.cmd("cat");
35 cmd.arg("/etc/ssh/ssh_host_ed25519_key.pub");36 cmd.arg("/etc/ssh/ssh_host_ed25519_key.pub");
36 let key = cmd.run_string().await?;37 let key = cmd.run_string().await?;
37 self.update_key(&host.name, key.clone());38 self.update_key(&host.name, key.clone());
modifiedcrates/fleet-base/src/lib.rsdiffbeforeafterboth
1pub mod command;
2pub mod deploy;1pub mod deploy;
3pub mod fleetdata;2pub mod fleetdata;
4pub mod host;3pub mod host;
5mod keys;4mod keys;
6pub mod opts;5pub mod opts;
7pub mod primops;6pub mod primops;
8pub mod secret_storage;
97
modifiedcrates/fleet-base/src/opts.rsdiffbeforeafterboth
1use std::{1use std::{
2 collections::{BTreeMap, BTreeSet},2 collections::{BTreeMap, BTreeSet},
3 env::current_dir,3 env::current_dir,
4 ffi::OsString,
5 str::FromStr,4 str::FromStr,
6 sync::{Arc, Mutex},5 sync::{Arc, OnceLock},
7};6};
87
9use anyhow::{Context, Result, bail};8use anyhow::{Context, Result, bail};
196 }195 }
197196
198 // TODO: Config should be detached from opts.197 // TODO: Config should be detached from opts.
199 pub fn build(&self, nix_args: Vec<OsString>, assert: bool) -> Result<Config> {198 pub fn build(&self, assert: bool) -> Result<Config> {
200 let cwd = current_dir()?;199 let cwd = current_dir()?;
201 let mut directory = cwd.clone();200 let mut directory = cwd.clone();
202 let mut fleet_data_path = directory.join("fleet.nix");201 let mut fleet_data_path = directory.join("fleet.nix");
274 data,273 data,
275 flake_outputs: flake,274 flake_outputs: flake,
276 local_system: self.local_system.clone(),275 local_system: self.local_system.clone(),
277 nix_args,
278 config_field,276 config_field,
279 default_pkgs,277 default_pkgs,
280 nixpkgs,278 nixpkgs,
281 localhost: self.localhost.to_owned(),279 localhost: self.localhost.to_owned(),
280 local_host: OnceLock::new(),
282 }));281 }));
283282
284 PRIMOPS_DATA283 PRIMOPS_DATA
modifiedcrates/fleet-base/src/primops.rsdiffbeforeafterboth
1use std::collections::{BTreeMap, BTreeSet, HashMap};1use std::collections::{BTreeMap, BTreeSet, HashMap};
2use std::sync::OnceLock;2use std::sync::{Arc, OnceLock};
33
4use anyhow::{Context, bail, ensure};4use anyhow::{Context, bail, ensure};
5use fleet_shared::SecretData;5use fleet_shared::SecretData;
6use itertools::Itertools;6use itertools::Itertools;
7use nix_eval::{NativeFn, Value, await_in_nix, nix_go, nix_go_json};7use nix_eval::{NativeFn, Value, await_in_nix, nix_go, nix_go_json};
8use remowt_endpoints::fs::FsClient;
9use remowt_link_shared::BifConfig;
8use serde::Deserialize;10use serde::Deserialize;
9use tracing::{info, warn};11use tracing::{info, warn};
1012
28 let pkgs = host_on.pkgs()?;30 let pkgs = host_on.pkgs()?;
29 let default_mk_secret_generators = nix_go!(pkgs.mkSecretGenerators);31 let default_mk_secret_generators = nix_go!(pkgs.mkSecretGenerators);
30 let generators = nix_go!(default_mk_secret_generators(Obj { recipients }));32 let generators = nix_go!(default_mk_secret_generators(Obj { recipients }));
31 Ok(pkgs.clone().attrs_update(generators)?)33 pkgs.clone().attrs_update(generators)
32}34}
33pub fn get_default_pkgs_and_generators(config: &Config) -> Result<Value> {35pub fn get_default_pkgs_and_generators(config: &Config) -> Result<Value> {
34 let host_on = config.local_host();36 let host_on = config.local_host();
91 let impure_on: Option<String> = nix_go_json!(default_generator_drv.impureOn);93 let impure_on: Option<String> = nix_go_json!(default_generator_drv.impureOn);
9294
93 let host_on = if let Some(on) = &impure_on {95 let host_on = if let Some(on) = &impure_on {
96 Arc::new(
94 config97 config
95 .host(on)98 .host(on)
96 .context("failed to get secret generation target host")?99 .context("failed to get secret generation target host")?,
100 )
97 } else {101 } else {
98 config.local_host()102 config.local_host()
99 };103 };
104
105 let remowt = host_on.remowt().await?;
106 let fs = remowt.endpoints::<FsClient<BifConfig>>();
107
100 let mut recipients = Vec::new();108 let mut recipients = Vec::new();
101 for owner in &expectations.owners {109 for owner in &expectations.owners {
116 .context("failed to copy generator to target host")?;124 .context("failed to copy generator to target host")?;
117125
118 // TODO: Remove destdir after everything is done126 // TODO: Remove destdir after everything is done
119 let out_parent = host_on127 let out_parent = fs
120 .mktemp_dir()128 .mktemp_dir()
129 .await
121 .await130 .map_err(|e| anyhow!("{e:?}"))
122 .context("failed to prepare generator output dir on target host")?;131 .context("failed to prepare generator output dir on target host")?;
123 let out = format!("{out_parent}/out");132 let out = out_parent.join("out");
124 let mut generator_cmd = host_on.cmd(generator).await?;133 let mut generator_cmd = remowt.cmd(generator);
125 generator_cmd.env("out", &out);134 generator_cmd.env("out", &out);
126 if impure_on.is_none() {135 if impure_on.is_none() {
127 let project_path: String = config136 let project_path: String = config
138 .context("failed to run impure generator")?;147 .context("failed to run impure generator")?;
139148
140 {149 {
141 let marker = host_on.read_file_text(format!("{out}/marker")).await?;150 let marker = fs.read_file_text(out.join("marker")).await?;
142 ensure!(151 ensure!(
143 marker == "SUCCESS",152 marker == "SUCCESS",
144 "impure generator ended prematurely, secret generation failed"153 "impure generator ended prematurely, secret generation failed"
147156
148 let mut missing_parts = expectations.parts.clone();157 let mut missing_parts = expectations.parts.clone();
149 let mut parts = BTreeMap::new();158 let mut parts = BTreeMap::new();
150 for part in host_on.read_dir(&out).await? {159 for part in fs.read_dir(&out).await? {
160 let part = part.into_string();
151 if part == "created_at" || part == "expires_at" || part == "marker" {161 if part == "created_at" || part == "expires_at" || part == "marker" {
152 continue;162 continue;
153 }163 }
154 let Some(part_def) = missing_parts.remove(&part) else {164 let Some(part_def) = missing_parts.remove(&part) else {
155 bail!("secret generator has produced an unexpected part: {part}");165 bail!("secret generator has produced an unexpected part: {part}");
156 };166 };
157 let contents: SecretData = host_on167 let contents: SecretData = fs
158 .read_file_text(format!("{out}/{part}"))168 .read_file_text(out.join("part"))
159 .await?169 .await?
160 .parse()170 .parse()
161 .map_err(|e| anyhow!("failed to decode secret {out:?} part {part:?}: {e}"))?;171 .map_err(|e| anyhow!("failed to decode secret {out:?} part {part:?}: {e}"))?;
178 );188 );
179 }189 }
180190
181 let created_at = host_on.read_file_value(format!("{out}/created_at")).await?;191 let created_at = fs.read_file_value(out.join("created_at")).await??;
182 let expires_at = host_on192 let expires_at = match fs.read_file_value(out.join("expires_at")).await {
183 .read_file_value(format!("{out}/expires_at"))193 Ok(v) => Some(v?),
184 .await194 Err(remowt_endpoints::fs::Error::NotFound) => None,
185 .ok();195 Err(e) => return Err(e.into()),
196 };
186197
187 let new_data = FleetSecretData {198 let new_data = FleetSecretData {
188 created_at,199 created_at,
deletedcrates/fleet-base/src/secret_storage.rsdiffbeforeafterboth

no changes

modifiedcrates/nix-eval/Cargo.tomldiffbeforeafterboth
10nixlike.workspace = true10nixlike.workspace = true
11serde = { workspace = true, features = ["derive"] }11serde = { workspace = true, features = ["derive"] }
12serde_json.workspace = true12serde_json.workspace = true
13thiserror.workspace = true13tracing.workspace = true
14
14tracing.workspace = true15camino = { workspace = true, features = ["serde1"] }
15
16cxx.workspace = true16cxx.workspace = true
17futures.workspace = true
17itertools.workspace = true18itertools.workspace = true
18test-log.workspace = true19test-log.workspace = true
19tokio.workspace = true20tokio.workspace = true
modifiedcrates/nix-eval/src/drv.rsdiffbeforeafterboth
66#[derive(Debug, Deserialize)]66#[derive(Debug, Deserialize)]
67pub struct DrvParsed {67pub struct DrvParsed {
68 pub inputs: DrvInputs,68 pub inputs: DrvInputs,
69 pub outputs: HashMap<String, serde_json::Value>,69 pub outputs: HashMap<String, DrvParsedOutput>,
70}70}
71
72#[derive(Debug, Deserialize)]
73pub struct DrvParsedOutput {
74 #[serde(default)]
75 pub path: Option<String>,
76}
7177
72#[derive(Debug, Deserialize)]78#[derive(Debug, Deserialize)]
73pub struct DrvInputs {79pub struct DrvInputs {
82 pub outputs: Vec<String>,88 pub outputs: Vec<String>,
83}89}
8490
85#[derive(Debug)]91#[derive(Debug, Clone)]
86pub struct DrvGraph {92pub struct DrvGraph {
87 pub root: String,93 pub root: String,
88 pub nodes: HashMap<String, DrvNode>,94 pub nodes: HashMap<String, DrvNode>,
89}95}
9096
91#[derive(Debug)]97#[derive(Debug, Clone)]
92pub struct DrvNode {98pub struct DrvNode {
93 pub name: String,99 pub name: String,
94 pub input_drvs: HashMap<String, Vec<String>>,100 pub input_drvs: HashMap<String, Vec<String>>,
95 pub input_srcs: Vec<String>,101 pub input_srcs: Vec<String>,
102 // TODO: CA outputs without a known paths are skipped
96 pub outputs: Vec<String>,103 pub outputs: HashMap<String, String>,
97}104}
98105
99impl DrvGraph {106impl DrvGraph {
124 }131 }
125 }132 }
133
134 let outputs: HashMap<String, String> = parsed
135 .outputs
136 .into_iter()
137 .filter_map(|(name, out)| out.path.map(|p| (name, to_absolute_store_path(&sd, &p))))
138 .collect();
126139
127 nodes.insert(140 nodes.insert(
128 path.clone(),141 path.clone(),
129 DrvNode {142 DrvNode {
130 name: extract_drv_name(&path),143 name: extract_drv_name(&path),
131 input_drvs,144 input_drvs,
132 input_srcs: parsed.inputs.srcs,145 input_srcs: parsed.inputs.srcs,
133 outputs: parsed.outputs.into_keys().collect(),146 outputs,
134 },147 },
135 );148 );
136 }149 }
137150
138 Ok(Self { root, nodes })151 Ok(Self { root, nodes })
139 }152 }
153
154 pub fn wanted_outputs(&self, root_outputs: &[String]) -> HashMap<String, Vec<String>> {
155 let mut wanted: HashMap<String, HashSet<String>> = HashMap::new();
156 wanted.insert(self.root.clone(), root_outputs.iter().cloned().collect());
157
158 let mut queue: VecDeque<String> = VecDeque::new();
159 queue.push_back(self.root.clone());
160 while let Some(path) = queue.pop_front() {
161 let Some(node) = self.nodes.get(&path) else {
162 continue;
163 };
164 for (dep_path, dep_outputs) in &node.input_drvs {
165 let entry = wanted.entry(dep_path.clone()).or_default();
166 let mut changed = false;
167 for o in dep_outputs {
168 if entry.insert(o.clone()) {
169 changed = true;
170 }
171 }
172 if changed {
173 queue.push_back(dep_path.clone());
174 }
175 }
176 }
177
178 wanted
179 .into_iter()
180 .map(|(k, v)| {
181 let mut v: Vec<_> = v.into_iter().collect();
182 v.sort();
183 (k, v)
184 })
185 .collect()
186 }
140}187}
141188
142fn extract_drv_name(drv_path: &str) -> String {189fn extract_drv_name(drv_path: &str) -> String {
modifiedcrates/nix-eval/src/lib.ccdiffbeforeafterboth
1#include "nix-eval/src/lib.rs"1#include "nix-eval/src/lib.rs"
2#include "lib.hh"2#include "lib.hh"
3#include <nix/fetchers/fetch-settings.hh>3#include <nix/fetchers/fetch-settings.hh>
4#include <nix/store/build-result.hh>
5#include <nix/store/content-address.hh>
6#include <nix/store/derived-path.hh>
7#include <nix/store/local-fs-store.hh>
8#include <nix/store/outputs-spec.hh>
9#include <nix/store/path-info.hh>
10#include <nix/store/profiles.hh>
11#include <nix/store/realisation.hh>
12#include <nix/store/store-api.hh>
13#include <nix/util/file-system.hh>
14#include <nix/util/hash.hh>
15#include <nix/util/posix-source-accessor.hh>
4#include <nix/util/ref.hh>16#include <nix/util/ref.hh>
17#include <nix/util/signature/local-keys.hh>
18#include <nix/util/signature/signer.hh>
19#include <nix/util/source-path.hh>
5#include <nix_api_fetchers.h>20#include <nix_api_fetchers.h>
21#include <nix_api_store_internal.h>
22#include <sstream>
623
7struct nix_fetchers_settings {24struct nix_fetchers_settings {
8 nix::ref<nix::fetchers::Settings> settings;25 nix::ref<nix::fetchers::Settings> settings;
16}33}
17}34}
35
36rust::String switch_profile(Store *store, rust::Str profile,
37 rust::Str store_path) {
38 try {
39 auto nixStore = store->ptr;
40 auto *lfs = dynamic_cast<nix::LocalFSStore *>(&*nixStore);
41 if (!lfs)
42 return rust::String("destination is not a local-fs store");
43 auto path = nixStore->parseStorePath(std::string(store_path));
44 std::filesystem::path prof = std::string(profile);
45 auto gen = nix::createGeneration(*lfs, prof, path);
46 nix::switchLink(prof, gen);
47 return rust::String();
48 } catch (const std::exception &e) {
49 return rust::String(e.what());
50 }
51}
52
53rust::String sign_closure(Store *store, rust::Str store_path,
54 rust::Str key_file) {
55 try {
56 auto nixStore = store->ptr;
57 nix::LocalSigner signer(
58 nix::SecretKey::parse(nix::readFile(std::string(key_file))));
59 auto root = nixStore->parseStorePath(std::string(store_path));
60 nix::StorePathSet closure;
61 nixStore->computeFSClosure(root, closure);
62 for (auto &p : closure) {
63 auto info = nixStore->queryPathInfo(p);
64 nix::ValidPathInfo info2(*info);
65 info2.sign(*nixStore, signer);
66 nixStore->addSignatures(p, info2.sigs);
67 }
68 return rust::String();
69 } catch (const std::exception &e) {
70 return rust::String(e.what());
71 }
72}
73
74CxxListGenerationsResult list_generations(rust::Str profile_path) {
75 CxxListGenerationsResult out{rust::String(), {}};
76 try {
77 auto [gens, current] =
78 nix::findGenerations(std::filesystem::path(std::string(profile_path)));
79 for (auto &g : gens) {
80 CxxProfileGeneration cg{};
81 cg.id = g.number;
82 cg.store_path = rust::String(g.path.string());
83 cg.creation_time_unix = static_cast<int64_t>(g.creationTime);
84 cg.current = current.has_value() && *current == g.number;
85 out.generations.push_back(cg);
86 }
87 } catch (const std::exception &e) {
88 out.error = rust::String(e.what());
89 }
90 return out;
91}
92
93static std::vector<std::string> split_lines(rust::Str joined) {
94 std::vector<std::string> out;
95 std::string buf;
96 std::istringstream iss((std::string(joined)));
97 while (std::getline(iss, buf)) {
98 if (!buf.empty())
99 out.push_back(buf);
100 }
101 return out;
102}
103
104CxxBuildResult build_drv_outputs(Store *store, rust::Str drv_path,
105 // TODO: Vec<str>
106 rust::Str output_names_joined) {
107 CxxBuildResult res{rust::String(), {}};
108 try {
109 auto nixStore = store->ptr;
110 auto sp = nixStore->parseStorePath(std::string(drv_path));
111
112 nix::DerivedPath::Built built{
113 .drvPath = nix::makeConstantStorePathRef(sp),
114 .outputs = nix::OutputsSpec{nix::OutputsSpec::All{}},
115 };
116 auto names = split_lines(output_names_joined);
117 if (!names.empty()) {
118 std::set<nix::OutputName, std::less<>> nameSet;
119 for (auto &n : names)
120 nameSet.insert(n);
121 built.outputs =
122 nix::OutputsSpec{nix::OutputsSpec::Names{std::move(nameSet)}};
123 }
124
125 std::vector<nix::DerivedPath> reqs;
126 reqs.push_back(built);
127
128 auto results = nixStore->buildPathsWithResults(reqs);
129 for (auto &r : results) {
130 if (auto *failure = r.tryGetFailure()) {
131 res.error = rust::String(failure->what());
132 return res;
133 }
134 }
135 for (auto &r : results) {
136 if (auto *success = r.tryGetSuccess()) {
137 for (auto &[name, real] : success->builtOutputs) {
138 res.outputs.push_back(
139 rust::String(nixStore->printStorePath(real.outPath)));
140 }
141 }
142 }
143 } catch (const std::exception &e) {
144 res.error = rust::String(e.what());
145 }
146 return res;
147}
148
149CxxBuildResult substitute_paths(Store *store, rust::Str paths_joined) {
150 CxxBuildResult res{rust::String(), {}};
151 try {
152 auto nixStore = store->ptr;
153 auto paths = split_lines(paths_joined);
154
155 std::vector<nix::DerivedPath> reqs;
156 reqs.reserve(paths.size());
157 for (auto &p : paths) {
158 reqs.push_back(nix::DerivedPath::Opaque{nixStore->parseStorePath(p)});
159 }
160
161 // Substituter miss will cause scheduler to trigger build
162 auto results = nixStore->buildPathsWithResults(reqs);
163 for (auto &r : results) {
164 if (r.tryGetSuccess() == nullptr)
165 continue;
166 if (auto *opaque = std::get_if<nix::DerivedPath::Opaque>(&r.path.raw())) {
167 res.outputs.push_back(
168 rust::String(nixStore->printStorePath(opaque->path)));
169 }
170 }
171 } catch (const std::exception &e) {
172 res.error = rust::String(e.what());
173 }
174 return res;
175}
176
177bool is_valid_path(Store *store, rust::Str path) {
178 try {
179 auto nixStore = store->ptr;
180 auto sp = nixStore->parseStorePath(std::string(path));
181 return nixStore->isValidPath(sp);
182 } catch (const std::exception &) {
183 return false;
184 }
185}
186
187AddFileToStoreResult add_file_to_store(Store *store, rust::Str name,
188 rust::Str path) {
189 AddFileToStoreResult out{rust::String(), rust::String(), rust::String()};
190 try {
191 auto nixStore = store->ptr;
192 auto src = nix::PosixSourceAccessor::createAtRoot(
193 std::filesystem::path(std::string(path)));
194 auto info = nixStore->addToStoreSlow(std::string(name), src,
195 nix::ContentAddressMethod::Raw::Flat,
196 nix::HashAlgorithm::SHA256);
197 out.store_path = rust::String(nixStore->printStorePath(info.path));
198 if (info.ca.has_value()) {
199 out.hash =
200 rust::String(info.ca->hash.to_string(nix::HashFormat::SRI, true));
201 }
202 } catch (const std::exception &e) {
203 out.error = rust::String(e.what());
204 }
205 return out;
206}
18207
modifiedcrates/nix-eval/src/lib.hhdiffbeforeafterboth
1#pragma once1#pragma once
2#include "rust/cxx.h"
2#include <nix_api_fetchers.h>3#include <nix_api_fetchers.h>
4
5struct Store;
6
7struct AddFileToStoreResult;
8struct CxxBuildResult;
39
4extern "C" {10extern "C" {
5void set_fetcher_setting(nix_fetchers_settings *settings, const char *setting,11void set_fetcher_setting(nix_fetchers_settings *settings, const char *setting,
6 const char *value);12 const char *value);
7}13}
14
15rust::String switch_profile(Store *store, rust::Str profile,
16 rust::Str store_path);
17
18rust::String sign_closure(Store *store, rust::Str store_path,
19 rust::Str key_file);
20
21struct CxxListGenerationsResult;
22CxxListGenerationsResult list_generations(rust::Str profile_path);
23
24AddFileToStoreResult add_file_to_store(Store *store, rust::Str name,
25 rust::Str path);
26
27CxxBuildResult build_drv_outputs(Store *store, rust::Str drv_path,
28 rust::Str output_names_joined);
29
30CxxBuildResult substitute_paths(Store *store, rust::Str paths_joined);
31
32bool is_valid_path(Store *store, rust::Str path);
833
modifiedcrates/nix-eval/src/lib.rsdiffbeforeafterboth
1use std::borrow::Cow;1use std::borrow::Cow;
2use std::cell::RefCell;2use std::cell::RefCell;
3use std::collections::HashMap;
3use std::ffi::{CStr, CString, c_char, c_int, c_uint, c_void};4use std::ffi::{CStr, CString, c_char, c_int, c_uint, c_void};
4use std::ptr::{null, null_mut};5use std::ptr::{null, null_mut};
5use std::sync::{Arc, LazyLock, OnceLock};6use std::sync::{Arc, LazyLock, OnceLock};
6use std::{array, fmt, slice};7use std::{array, fmt, slice};
7use std::{collections::HashMap, path::PathBuf};
88
9use anyhow::{Context, anyhow, bail};9use anyhow::{Context, anyhow, bail};
10use camino::{Utf8Path, Utf8PathBuf};
10use itertools::Itertools;11use itertools::Itertools;
11use serde::Serialize;12use serde::Serialize;
12use serde::de::DeserializeOwned;13use serde::de::DeserializeOwned;
38 make_attrs, make_bindings_builder, make_list, make_list_builder, realised_string,39 make_attrs, make_bindings_builder, make_list, make_list_builder, realised_string,
39 realised_string_free, realised_string_get_buffer_size, realised_string_get_buffer_start,40 realised_string_free, realised_string_get_buffer_size, realised_string_get_buffer_start,
40 realised_string_get_store_path, realised_string_get_store_path_count, register_primop,41 realised_string_get_store_path, realised_string_get_store_path_count, register_primop,
41 set_err_msg, setting_set, state_free, store_open, store_parse_path, store_path_free,42 set_err_msg, setting_set, state_free, store_copy_closure, store_free, store_open,
42 store_path_name, string_realise, value, value_call, value_decref, value_force, value_incref,43 store_parse_path, store_path_free, store_path_name, string_realise, value, value_call,
44 value_decref, value_force, value_incref,
43};45};
47pub mod logging;49pub mod logging;
48#[doc(hidden)]50#[doc(hidden)]
49pub mod macros;51pub mod macros;
52pub mod scheduler;
5053
51#[doc(hidden)]54#[doc(hidden)]
52pub mod __macro_support {55pub mod __macro_support {
68}71}
69#[cxx::bridge]72#[cxx::bridge]
70pub mod nix_cxx {73pub mod nix_cxx {
74 struct AddFileToStoreResult {
75 error: String,
76 store_path: String,
77 hash: String,
78 }
79 struct CxxProfileGeneration {
80 id: u64,
81 store_path: String,
82 creation_time_unix: i64,
83 current: bool,
84 }
85 struct CxxListGenerationsResult {
86 error: String,
87 generations: Vec<CxxProfileGeneration>,
88 }
89 struct CxxBuildResult {
90 error: String,
91 outputs: Vec<String>,
92 }
71 unsafe extern "C++" {93 unsafe extern "C++" {
72 type nix_fetchers_settings;94 type nix_fetchers_settings;
95 type Store;
73 include!("nix-eval/src/lib.hh");96 include!("nix-eval/src/lib.hh");
7497
75 #[allow(clippy::missing_safety_doc)]98 #[allow(clippy::missing_safety_doc)]
79 value: *const c_char,102 value: *const c_char,
80 );103 );
104
105 #[allow(clippy::missing_safety_doc)]
106 unsafe fn switch_profile(store: *mut Store, profile: &str, store_path: &str) -> String;
107
108 #[allow(clippy::missing_safety_doc)]
109 unsafe fn sign_closure(store: *mut Store, store_path: &str, key_file: &str) -> String;
110
111 #[allow(clippy::missing_safety_doc)]
112 unsafe fn add_file_to_store(
113 store: *mut Store,
114 name: &str,
115 path: &str,
116 ) -> AddFileToStoreResult;
117
118 fn list_generations(profile_path: &str) -> CxxListGenerationsResult;
119
120 #[allow(clippy::missing_safety_doc)]
121 unsafe fn build_drv_outputs(
122 store: *mut Store,
123 drv_path: &str,
124 output_names_joined: &str,
125 ) -> CxxBuildResult;
126
127 #[allow(clippy::missing_safety_doc)]
128 unsafe fn substitute_paths(store: *mut Store, paths_joined: &str) -> CxxBuildResult;
129
130 #[allow(clippy::missing_safety_doc)]
131 unsafe fn is_valid_path(store: *mut Store, path: &str) -> bool;
81 }132 }
82}133}
83134
186 unsafe { set_err_msg(self.0, err as c_int, msg.as_ptr()) };237 unsafe { set_err_msg(self.0, err as c_int, msg.as_ptr()) };
187 }238 }
188 pub fn set_err(&mut self, err: anyhow::Error) {239 pub fn set_err(&mut self, err: anyhow::Error) {
189 let mut fmt = format!("{err:?}").replace("\0", "\\0");240 let fmt = format!("{err:?}").replace("\0", "\\0");
190 self.set_err_raw(241 self.set_err_raw(
191 NixErrorKind::Generic,242 NixErrorKind::Generic,
192 &CString::new(fmt).expect("NUL bytes were just replaced"),243 &CString::new(fmt).expect("NUL bytes were just replaced"),
352 with_default_context(|c, _| unsafe { setting_set(c, s.as_ptr(), v.as_ptr()) }).map(|_| ())403 with_default_context(|c, _| unsafe { setting_set(c, s.as_ptr(), v.as_ptr()) }).map(|_| ())
353}404}
405
406#[instrument(skip(dst))]
407pub fn copy_closure_to(dst: &Store, path: &Utf8Path) -> Result<()> {
408 let path_c = CString::new(path.as_str())?;
409 with_store_context(|c, src_store, _state| -> Result<()> {
410 let sp = unsafe { store_parse_path(c, src_store, path_c.as_ptr()) };
411 if sp.is_null() {
412 bail!("failed to parse store path {path}");
413 }
414 let rc = unsafe { store_copy_closure(c, src_store, dst.0, sp) };
415 unsafe { store_path_free(sp) };
416 if rc != nix_raw::err_NIX_OK {
417 bail!("store_copy_closure failed (code {rc})");
418 }
419 Ok(())
420 })?
421}
422
423#[instrument]
424pub fn switch_profile(profile: &str, store_path: &Utf8Path) -> Result<()> {
425 let msg = with_store_context(|_c, store, _state| unsafe {
426 nix_cxx::switch_profile(store.cast(), profile, store_path.as_str())
427 })?
428 .to_string();
429 if msg.is_empty() {
430 Ok(())
431 } else {
432 bail!("failed to switch profile {profile}: {msg}");
433 }
434}
435
436// TODO: fleet operator-managed key file
437#[instrument]
438pub fn sign_closure(store_path: &str, key_file: &str) -> Result<()> {
439 let msg = with_store_context(|_c, store, _state| unsafe {
440 nix_cxx::sign_closure(store.cast(), store_path, key_file)
441 })?
442 .to_string();
443 if msg.is_empty() {
444 Ok(())
445 } else {
446 bail!("failed to sign {store_path}: {msg}");
447 }
448}
449
450#[derive(Debug)]
451pub struct AddedFile {
452 pub store_path: Utf8PathBuf,
453 pub hash: String,
454}
455
456#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
457pub struct ProfileGeneration {
458 pub id: u64,
459 pub store_path: Utf8PathBuf,
460 pub creation_time_unix: i64,
461 pub current: bool,
462}
463
464#[instrument]
465pub fn list_generations(profile_path: &str) -> Result<Vec<ProfileGeneration>> {
466 let res = nix_cxx::list_generations(profile_path);
467 if !res.error.is_empty() {
468 bail!(
469 "failed to list generations at {profile_path}: {}",
470 res.error
471 );
472 }
473 Ok(res
474 .generations
475 .into_iter()
476 .map(|g| ProfileGeneration {
477 id: g.id,
478 store_path: Utf8PathBuf::from(g.store_path),
479 creation_time_unix: g.creation_time_unix,
480 current: g.current,
481 })
482 .collect())
483}
484
485#[instrument]
486pub fn add_file_to_store(name: &str, path: &Utf8Path) -> Result<AddedFile> {
487 let res = with_store_context(|_c, store, _state| unsafe {
488 nix_cxx::add_file_to_store(store.cast(), name, path.as_str())
489 })?;
490 if !res.error.is_empty() {
491 bail!("failed to add {path} to store: {}", res.error);
492 }
493 Ok(AddedFile {
494 store_path: Utf8PathBuf::from(res.store_path),
495 hash: res.hash,
496 })
497}
498
499pub fn build_drv_outputs(drv_path: &str, output_names: &[String]) -> Result<Vec<String>> {
500 let joined = output_names.join("\n");
501 let res = with_store_context(|_c, store, _state| unsafe {
502 nix_cxx::build_drv_outputs(store.cast(), drv_path, &joined)
503 })?;
504 if !res.error.is_empty() {
505 bail!("build of {drv_path} failed: {}", res.error);
506 }
507 Ok(res.outputs)
508}
509
510pub fn substitute_paths(paths: &[String]) -> Result<Vec<String>> {
511 let joined = paths.join("\n");
512 let res = with_store_context(|_c, store, _state| unsafe {
513 nix_cxx::substitute_paths(store.cast(), &joined)
514 })?;
515 if !res.error.is_empty() {
516 warn!("substitute_paths reported: {}", res.error);
517 }
518 Ok(res.outputs)
519}
520
521pub fn is_valid_path(path: &str) -> Result<bool> {
522 with_store_context(|_c, store, _state| unsafe { nix_cxx::is_valid_path(store.cast(), path) })
523}
354524
355pub struct FetchSettings(*mut fetchers_settings);525pub struct FetchSettings(*mut fetchers_settings);
356impl FetchSettings {526impl FetchSettings {
450 unsafe { *user_data.cast::<String>() = s.to_owned() };620 unsafe { *user_data.cast::<String>() = s.to_owned() };
451}621}
452622
453struct Store(*mut c_store);623pub struct Store(*mut c_store);
454unsafe impl Send for Store {}624unsafe impl Send for Store {}
455unsafe impl Sync for Store {}625unsafe impl Sync for Store {}
456626
457impl Store {627impl Store {
628 pub fn open(uri: &str) -> Result<Self> {
629 let uri = CString::new(uri)?;
630 let ptr = with_default_context(|c, _| unsafe { store_open(c, uri.as_ptr(), null_mut()) })?;
631 if ptr.is_null() {
632 bail!("failed to open store");
633 }
634 Ok(Store(ptr))
635 }
636
458 fn parse_path(&self, path: &CStr) -> Result<StorePath> {637 fn parse_path(&self, path: &CStr) -> Result<StorePath> {
459 with_default_context(|c, _| {638 with_default_context(|c, _| {
460 StorePath(unsafe { store_parse_path(c, self.0, path.as_ptr()) })639 StorePath(unsafe { store_parse_path(c, self.0, path.as_ptr()) })
461 })640 })
462 }641 }
463}642}
643impl Drop for Store {
644 fn drop(&mut self) {
645 unsafe { store_free(self.0) }
646 }
647}
464648
465#[repr(transparent)]649#[repr(transparent)]
466pub struct EvalState(*mut c_eval_state);650pub struct EvalState(*mut c_eval_state);
858 Ok(out)1042 Ok(out)
859 }1043 }
860 #[instrument(name = "build", skip(self), fields(output))]1044 #[instrument(name = "build", skip(self), fields(output))]
861 pub fn build(&self, output: &str) -> Result<PathBuf> {1045 pub fn build(&self, output: &str) -> Result<Utf8PathBuf> {
862 if !self.is_derivation() {1046 if !self.is_derivation() {
863 bail!("expected derivation to build")1047 bail!("expected derivation to build")
864 }1048 }
880 .get_field("drvPath")1064 .get_field("drvPath")
881 .context("getting drvPath")?1065 .context("getting drvPath")?
882 .to_string()?;1066 .to_string()?;
883 let graph = drv::DrvGraph::resolve(&drv_path)?;1067 let graph = Arc::new(drv::DrvGraph::resolve(&drv_path)?);
884 let _guard = logging::register_build_graph(&Span::current(), &graph);1068 let _guard = logging::register_build_graph(&Span::current(), &graph);
8851069
886 // to_string here blocks until the path is built1070 scheduler::build_graph_sync(graph.clone(), vec![output.to_owned()])?;
1071
887 let s = v.builtin_to_string()?;1072 let s = v.builtin_to_string()?;
888 let rs = s.to_realised_string()?;1073 let rs = s.to_realised_string()?;
889 let out_path = rs.as_str().to_owned();1074 let out_path = rs.as_str().to_owned();
890 Ok(PathBuf::from(out_path))1075 Ok(Utf8PathBuf::from(out_path))
891 }1076 }
892 pub fn as_json<T: DeserializeOwned>(&self) -> Result<T> {1077 pub fn as_json<T: DeserializeOwned>(&self) -> Result<T> {
893 let to_json = Self::eval("builtins.toJSON")?;1078 let to_json = Self::eval("builtins.toJSON")?;
modifiedcrates/nix-eval/src/logging.ccdiffbeforeafterboth
9696
97extern "C" {97extern "C" {
98void apply_tracing_logger() {98void apply_tracing_logger() {
99 auto old = logger;
99 logger = std::make_unique<TracingLogger>();100 logger = new TracingLogger();
101 delete old;
100 // verbosity = lvlVomit;102 // verbosity = lvlVomit;
101}103}
102rust::Box<ErrorInfoBuilder>104rust::Box<ErrorInfoBuilder>
modifiedcrates/nix-eval/src/logging.rsdiffbeforeafterboth
499 } else if level == Level::INFO {499 } else if level == Level::INFO {
500 info!(target: "nix", "{}", s)500 info!(target: "nix", "{}", s)
501 } else if level == Level::DEBUG {501 } else if level == Level::DEBUG {
502 if s != "querying info about missing paths" {
502 debug!(target: "nix", "{}", s)503 debug!(target: "nix", "{}", s)
503 } else {504 }
505 } else {
504 trace!(target: "nix", "{}", s)506 trace!(target: "nix", "{}", s)
505 }507 }
583 } else if level == Level::INFO {585 } else if level == Level::INFO {
584 info!(target: "nix", "{v}")586 info!(target: "nix", "{v}")
585 } else if level == Level::DEBUG {587 } else if level == Level::DEBUG {
588 if v != "querying info about missing paths" {
586 debug!(target: "nix", "{v}")589 debug!(target: "nix", "{v}")
587 } else {590 }
591 } else {
588 trace!(target: "nix", "{v}")592 trace!(target: "nix", "{v}")
589 }593 }
addedcrates/nix-eval/src/scheduler.rsdiffbeforeafterboth

no changes

modifiedcrates/nixlike/Cargo.tomldiffbeforeafterboth
11linked-hash-map.workspace = true11linked-hash-map.workspace = true
12peg.workspace = true12peg.workspace = true
13serde.workspace = true13serde.workspace = true
14serde-transcode.workspace = true
15serde_json.workspace = true
1614
addedcrates/remowt-fleet/Cargo.tomldiffbeforeafterboth

no changes

addedcrates/remowt-fleet/src/lib.rsdiffbeforeafterboth

no changes

modifiedflake.lockdiffbeforeafterboth
2 "nodes": {2 "nodes": {
3 "crane": {3 "crane": {
4 "locked": {4 "locked": {
5 "lastModified": 1773189535,5 "lastModified": 1780532242,
6 "owner": "ipetkov",6 "owner": "ipetkov",
7 "repo": "crane",7 "repo": "crane",
8 "rev": "6fa2fb4cf4a89ba49fc9dd5a3eb6cde99d388269",8 "rev": "59a82a1222dd3b2080b5cc52a1a2e8d5f1b77f37",
9 "type": "github"9 "type": "github"
10 },10 },
11 "original": {11 "original": {
37 ]37 ]
38 },38 },
39 "locked": {39 "locked": {
40 "lastModified": 1772408722,40 "lastModified": 1778716662,
41 "owner": "hercules-ci",41 "owner": "hercules-ci",
42 "repo": "flake-parts",42 "repo": "flake-parts",
43 "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",43 "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
44 "type": "github"44 "type": "github"
45 },45 },
46 "original": {46 "original": {
62 ]62 ]
63 },63 },
64 "locked": {64 "locked": {
65 "lastModified": 1759080490,65 "lastModified": 1780160585,
66 "owner": "CertainLach",66 "owner": "CertainLach",
67 "repo": "fleet-tf",67 "repo": "fleet-tf",
68 "rev": "878bd8c23933d628bf750378bbe527b841901c3d",68 "rev": "aa2200a3f8f93a8c0d3b87bb29f11d9d9b0a23e6",
69 "type": "github"69 "type": "github"
70 },70 },
71 "original": {71 "original": {
111 "nixpkgs-regression": "nixpkgs-regression"111 "nixpkgs-regression": "nixpkgs-regression"
112 },112 },
113 "locked": {113 "locked": {
114 "lastModified": 1768702010,114 "lastModified": 1781448983,
115 "owner": "deltarocks",115 "owner": "deltarocks",
116 "repo": "nix",116 "repo": "nix",
117 "rev": "b05b52670b9c7affff5b9be3edb539a1603c39e6",117 "rev": "bb8784f285658e77642437409824619f5c34a854",
118 "type": "github"118 "type": "github"
119 },119 },
120 "original": {120 "original": {
126 },126 },
127 "nixpkgs": {127 "nixpkgs": {
128 "locked": {128 "locked": {
129 "lastModified": 1773268153,129 "lastModified": 1781402740,
130 "owner": "nixos",130 "owner": "nixos",
131 "repo": "nixpkgs",131 "repo": "nixpkgs",
132 "rev": "63ca4f465b79edbaa9ff113ea7ff48fb49ea0db0",132 "rev": "49145c5aba740948d6da1265f584826bd27619ad",
133 "type": "github"133 "type": "github"
134 },134 },
135 "original": {135 "original": {
171 "type": "github"171 "type": "github"
172 }172 }
173 },173 },
174 "remowt-agents": {
175 "inputs": {
176 "crane": [
177 "crane"
178 ],
179 "flake-parts": [
180 "flake-parts"
181 ],
182 "nixpkgs": [
183 "nixpkgs"
184 ],
185 "rust-overlay": "rust-overlay",
186 "shelly": [
187 "shelly"
188 ]
189 },
190 "locked": {
191 "lastModified": 1781471358,
192 "rev": "c69dddc33f8e2081ef685ae20a7278f92cfcd32e",
193 "revCount": 37,
194 "type": "git",
195 "url": "file:/home/lach/build/remowt-agents"
196 },
197 "original": {
198 "type": "git",
199 "url": "file:/home/lach/build/remowt-agents"
200 }
201 },
174 "root": {202 "root": {
175 "inputs": {203 "inputs": {
176 "crane": "crane",204 "crane": "crane",
177 "flake-parts": "flake-parts",205 "flake-parts": "flake-parts",
178 "fleet-tf": "fleet-tf",206 "fleet-tf": "fleet-tf",
179 "nix": "nix",207 "nix": "nix",
180 "nixpkgs": "nixpkgs",208 "nixpkgs": "nixpkgs",
209 "remowt-agents": "remowt-agents",
181 "rust-overlay": "rust-overlay",210 "rust-overlay": "rust-overlay_2",
182 "shelly": "shelly",211 "shelly": "shelly",
183 "treefmt-nix": "treefmt-nix"212 "treefmt-nix": "treefmt-nix"
184 }213 }
185 },214 },
186 "rust-overlay": {215 "rust-overlay": {
187 "inputs": {216 "inputs": {
188 "nixpkgs": [217 "nixpkgs": [
218 "remowt-agents",
189 "nixpkgs"219 "nixpkgs"
190 ]220 ]
191 },221 },
192 "locked": {222 "locked": {
193 "lastModified": 1773216618,223 "lastModified": 1769309768,
194 "owner": "oxalica",224 "owner": "oxalica",
195 "repo": "rust-overlay",225 "repo": "rust-overlay",
196 "rev": "07d7dc6fcc5eae76b4fb0e19d4afd939437bec97",226 "rev": "140c9dc582cb73ada2d63a2180524fcaa744fad5",
197 "type": "github"227 "type": "github"
198 },228 },
199 "original": {229 "original": {
202 "type": "github"232 "type": "github"
203 }233 }
204 },234 },
235 "rust-overlay_2": {
236 "inputs": {
237 "nixpkgs": [
238 "nixpkgs"
239 ]
240 },
241 "locked": {
242 "lastModified": 1781320681,
243 "owner": "oxalica",
244 "repo": "rust-overlay",
245 "rev": "5b929d8c854149d926d05ea0cd6469bf4e54db27",
246 "type": "github"
247 },
248 "original": {
249 "owner": "oxalica",
250 "repo": "rust-overlay",
251 "type": "github"
252 }
253 },
205 "shelly": {254 "shelly": {
206 "locked": {255 "locked": {
207 "lastModified": 1756323923,256 "lastModified": 1756323923,
223 ]272 ]
224 },273 },
225 "locked": {274 "locked": {
226 "lastModified": 1772660329,275 "lastModified": 1780220602,
227 "owner": "numtide",276 "owner": "numtide",
228 "repo": "treefmt-nix",277 "repo": "treefmt-nix",
229 "rev": "3710e0e1218041bbad640352a0440114b1e10428",278 "rev": "db947814a175b7ca6ded66e21383d938df01c227",
230 "type": "github"279 "type": "github"
231 },280 },
232 "original": {281 "original": {
modifiedflake.nixdiffbeforeafterboth
23 url = "github:numtide/treefmt-nix";23 url = "github:numtide/treefmt-nix";
24 inputs.nixpkgs.follows = "nixpkgs";24 inputs.nixpkgs.follows = "nixpkgs";
25 };25 };
26 remowt-agents = {
27 url = "git+file:/home/lach/build/remowt-agents";
28 inputs.nixpkgs.follows = "nixpkgs";
29 inputs.flake-parts.follows = "flake-parts";
30 inputs.crane.follows = "crane";
31 inputs.shelly.follows = "shelly";
32 };
26 # DeterminateSystem's nix fork is controversial, but I don't mind it,33 # DeterminateSystem's nix fork is controversial, but I don't mind it,
27 # and it has lazy-trees support which is useful for fleet.34 # and it has lazy-trees support which is useful for fleet.
28 nix = {35 nix = {
147 packages = lib.mkIf deployerSystem (154 packages = lib.mkIf deployerSystem (
148 let155 let
149 packages = pkgs.callPackages ./pkgs {156 packages = pkgs.callPackages ./pkgs {
150 inherit craneLib inputs';157 inherit craneLib inputs;
151 };158 };
152 in159 in
153 packages // { default = packages.fleet; }160 packages // { default = packages.fleet; }
modifiedlib/flakePart.nixdiffbeforeafterboth
57 modules = (import ../modules/module-list.nix) ++ [57 modules = (import ../modules/module-list.nix) ++ [
58 module58 module
59 (59 (
60 { inputs', ... }:60 { inputs, ... }:
61 {61 {
62 config = {62 config = {
63 data = if isPath data then import data else data;63 data = if isPath data then import data else data;
66 (final: prev: {66 (final: prev: {
67 inherit67 inherit
68 (import ../pkgs {68 (import ../pkgs {
69 inherit (prev) callPackage;69 inherit (final) callPackage;
70 inherit inputs';70 inherit inputs;
71 craneLib = crane.mkLib prev;71 craneLib = crane.mkLib prev;
72 })72 })
73 fleet-install-secrets73 fleet-install-secrets
74 fleet-generator-helper74 fleet-generator-helper
75 remowt-plugin-fleet
75 ;76 ;
76 })77 })
77 ];78 ];
modifiedmodules/nixpkgs.nixdiffbeforeafterboth
43 defaultText = literalExpression "config.nixpkgs.buildUsing";43 defaultText = literalExpression "config.nixpkgs.buildUsing";
44 };44 };
45 config.nixos = {45 config.nixos =
46 { inputs', ... }:
47 {
46 inherit _file;48 inherit _file;
47 nixpkgs.overlays = config.nixpkgs.overlays;49 nixpkgs.overlays = config.nixpkgs.overlays;
modifiedpkgs/default.nixdiffbeforeafterboth
1{1{
2 callPackage,2 callPackage,
3 craneLib,3 craneLib,
4 inputs',4 inputs,
5}:5}:
6{6{
7 fleet = callPackage ./fleet.nix { inherit craneLib inputs'; };7 fleet = callPackage ./fleet.nix { inherit craneLib inputs; };
8 remowt-plugin-fleet = callPackage ./remowt-plugin-fleet.nix { inherit craneLib inputs; };
8 fleet-install-secrets = callPackage ./fleet-install-secrets.nix { inherit craneLib; };9 fleet-install-secrets = callPackage ./fleet-install-secrets.nix { inherit craneLib; };
9 fleet-generator-helper = callPackage ./fleet-generator-helper.nix { inherit craneLib; };10 fleet-generator-helper = callPackage ./fleet-generator-helper.nix { inherit craneLib; };
10}11}
modifiedpkgs/fleet.nixdiffbeforeafterboth
2 lib,2 lib,
3 craneLib,3 craneLib,
4 installShellFiles,4 installShellFiles,
5 inputs',5 inputs,
6
7 stdenv,
6 pkg-config,8 pkg-config,
7 rustPlatform,9 rustPlatform,
10 rofi,
8}:11}:
12let
13 system = stdenv.hostPlatform.system;
14in
9craneLib.buildPackage rec {15craneLib.buildPackage rec {
10 pname = "fleet";16 pname = "fleet";
11 src = lib.cleanSourceWith {17 src = lib.cleanSourceWith {
2026
21 cargoExtraArgs = "--locked -p ${pname}";27 cargoExtraArgs = "--locked -p ${pname}";
28
29 REMOWT_AGENTS_DIR = "${inputs.remowt-agents.packages.${system}.remowt-agents}";
30 # TODO: built-in fleet prompter should be a prodash widget, or it should require
31 # tty remowt prompter running on host machine idk.
32 ROFI = "${rofi}/bin/rofi";
2233
23 buildInputs = [34 buildInputs = [
24 inputs'.nix.packages.nix-expr-c35 inputs.nix.packages.${system}.nix-expr-c
25 inputs'.nix.packages.nix-flake-c36 inputs.nix.packages.${system}.nix-flake-c
26 inputs'.nix.packages.nix-fetchers-c37 inputs.nix.packages.${system}.nix-fetchers-c
27 ];38 ];
28 nativeBuildInputs = [39 nativeBuildInputs = [
29 installShellFiles40 installShellFiles
addedpkgs/remowt-plugin-fleet.nixdiffbeforeafterboth

no changes