mirror of
https://github.com/ellie/atuin.git
synced 2024-09-11 21:18:22 +03:00
feat(gui): runbooks that run (#2233)
* add initial runbooks frontend * fix buttons, scroll, add shell support to editor * work * some tweaks * wip - run crate * functioning executable blocks * handle resizing, killing ptys * clear properly on stop * move terminal to its own component, handle lifecycle better * fix all build issues * ffs codespelll * update lockfile * clippy is needy once more * only build pty stuff on mac/linux * vendor pty handling into desktop * update lockfile
This commit is contained in:
parent
f56a66add9
commit
5b38448733
@ -1,6 +1,6 @@
|
||||
[codespell]
|
||||
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
|
||||
skip = .git*,*.lock,.codespellrc,CODE_OF_CONDUCT.md
|
||||
skip = .git*,*.lock,.codespellrc,CODE_OF_CONDUCT.md,ui/pnpm-lock.yaml
|
||||
check-hidden = true
|
||||
# ignore-regex =
|
||||
ignore-words-list = crate,ratatui,inbetween
|
||||
|
2
.github/workflows/codespell.yml
vendored
2
.github/workflows/codespell.yml
vendored
@ -25,4 +25,4 @@ jobs:
|
||||
# This is regenerated from commit history
|
||||
# we cannot rewrite commit history, and I'd rather not correct it
|
||||
# every time
|
||||
exclude_file: CHANGELOG.md
|
||||
exclude_file: CHANGELOG.md,ui/pnpm-lock.yaml
|
||||
|
284
Cargo.lock
generated
284
Cargo.lock
generated
@ -162,7 +162,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -173,7 +173,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -185,15 +185,6 @@ dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atomic"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atomic-waker"
|
||||
version = "1.1.2"
|
||||
@ -503,7 +494,7 @@ dependencies = [
|
||||
"http 1.1.0",
|
||||
"http-body 1.0.0",
|
||||
"http-body-util",
|
||||
"hyper 1.3.1",
|
||||
"hyper 1.4.0",
|
||||
"hyper-util",
|
||||
"itoa",
|
||||
"matchit",
|
||||
@ -574,7 +565,7 @@ dependencies = [
|
||||
"http 1.1.0",
|
||||
"http-body 1.0.0",
|
||||
"http-body-util",
|
||||
"hyper 1.3.1",
|
||||
"hyper 1.4.0",
|
||||
"hyper-util",
|
||||
"pin-project-lite",
|
||||
"rustls",
|
||||
@ -632,9 +623,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.5.0"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
||||
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
@ -669,12 +660,6 @@ version = "3.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
@ -695,18 +680,18 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
|
||||
|
||||
[[package]]
|
||||
name = "castaway"
|
||||
version = "0.2.2"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
|
||||
checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5"
|
||||
dependencies = [
|
||||
"rustversion",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.99"
|
||||
version = "1.0.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695"
|
||||
checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
@ -735,7 +720,7 @@ dependencies = [
|
||||
"iana-time-zone",
|
||||
"num-traits",
|
||||
"serde",
|
||||
"windows-targets 0.52.5",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -751,9 +736,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.7"
|
||||
version = "4.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f"
|
||||
checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
@ -761,9 +746,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.7"
|
||||
version = "4.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f"
|
||||
checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
@ -774,9 +759,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_complete"
|
||||
version = "4.5.5"
|
||||
version = "4.5.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2020fa13af48afc65a9a87335bda648309ab3d154cd03c7ff95b378c7ed39c4"
|
||||
checksum = "1d598e88f6874d4b888ed40c71efbcbf4076f1dfbae128a08a8c9e45f710605d"
|
||||
dependencies = [
|
||||
"clap",
|
||||
]
|
||||
@ -793,14 +778,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.5.5"
|
||||
version = "4.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6"
|
||||
checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085"
|
||||
dependencies = [
|
||||
"heck 0.5.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -982,7 +967,7 @@ version = "0.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"crossterm_winapi",
|
||||
"filedescriptor",
|
||||
"libc",
|
||||
@ -1052,7 +1037,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1076,7 +1061,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1087,7 +1072,7 @@ checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1205,7 +1190,7 @@ checksum = "27540baf49be0d484d8f0130d7d8da3011c32a44d4fc873368154f1510e574a2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1246,9 +1231,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.12.0"
|
||||
version = "1.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b"
|
||||
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
@ -1381,7 +1366,7 @@ checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"spin 0.9.8",
|
||||
"spin",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1475,7 +1460,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1740,9 +1725,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "httparse"
|
||||
version = "1.9.3"
|
||||
version = "1.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545"
|
||||
checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
|
||||
|
||||
[[package]]
|
||||
name = "httpdate"
|
||||
@ -1782,9 +1767,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "hyper"
|
||||
version = "1.3.1"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d"
|
||||
checksum = "c4fe55fb7a772d59a5ff1dfbff4fe0258d19b89fec4b233e75d35d5d2316badc"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-channel",
|
||||
@ -1829,16 +1814,16 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "hyper-util"
|
||||
version = "0.1.5"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56"
|
||||
checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"http 1.1.0",
|
||||
"http-body 1.0.0",
|
||||
"hyper 1.3.1",
|
||||
"hyper 1.4.0",
|
||||
"pin-project-lite",
|
||||
"socket2",
|
||||
"tokio",
|
||||
@ -2011,11 +1996,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
dependencies = [
|
||||
"spin 0.5.2",
|
||||
"spin",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2036,7 +2021,7 @@ version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"libc",
|
||||
]
|
||||
|
||||
@ -2080,9 +2065,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.21"
|
||||
version = "0.4.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
||||
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
||||
|
||||
[[package]]
|
||||
name = "logos"
|
||||
@ -2105,7 +2090,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex-syntax 0.8.4",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2221,7 +2206,7 @@ checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2259,7 +2244,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2276,9 +2261,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.7.3"
|
||||
version = "0.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae"
|
||||
checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
@ -2466,9 +2451,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.36.0"
|
||||
version = "0.36.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434"
|
||||
checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
@ -2531,9 +2516,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall 0.5.1",
|
||||
"redox_syscall 0.5.2",
|
||||
"smallvec",
|
||||
"windows-targets 0.52.5",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2610,7 +2595,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2715,14 +2700,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.85"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23"
|
||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@ -2754,7 +2739,7 @@ dependencies = [
|
||||
"prost",
|
||||
"prost-types",
|
||||
"regex",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
"tempfile",
|
||||
]
|
||||
|
||||
@ -2768,7 +2753,7 @@ dependencies = [
|
||||
"itertools 0.12.1",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2881,7 +2866,7 @@ version = "0.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d16546c5b5962abf8ce6e2881e722b4e0ae3b6f1a08a26ae3573c55853ca68d3"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"cassowary",
|
||||
"compact_str",
|
||||
"crossterm",
|
||||
@ -2936,11 +2921,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.1"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
|
||||
checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3058,7 +3043,7 @@ dependencies = [
|
||||
"http 1.1.0",
|
||||
"http-body 1.0.0",
|
||||
"http-body-util",
|
||||
"hyper 1.3.1",
|
||||
"hyper 1.4.0",
|
||||
"hyper-util",
|
||||
"ipnet",
|
||||
"js-sys",
|
||||
@ -3090,7 +3075,7 @@ dependencies = [
|
||||
"cfg-if",
|
||||
"getrandom",
|
||||
"libc",
|
||||
"spin 0.9.8",
|
||||
"spin",
|
||||
"untrusted",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
@ -3183,7 +3168,7 @@ version = "0.38.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
@ -3344,7 +3329,7 @@ version = "2.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"core-foundation",
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
@ -3384,14 +3369,14 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.119"
|
||||
version = "1.0.120"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8eddb61f0697cc3989c5d64b452f5488e2b8a60fd7d5076a3045076ffef8cb0"
|
||||
checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
@ -3432,9 +3417,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_with"
|
||||
version = "3.8.1"
|
||||
version = "3.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20"
|
||||
checksum = "e73139bc5ec2d45e6c5fd85be5a46949c1c39a4c18e56915f5eb4c12f975e377"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
@ -3450,14 +3435,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_with_macros"
|
||||
version = "3.8.1"
|
||||
version = "3.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
|
||||
checksum = "b80d3d6b56b64335c0180e5ffde23b3c5e08c14c585b51a15bd0e95393f46703"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3571,12 +3556,6 @@ dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spin"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
|
||||
|
||||
[[package]]
|
||||
name = "spin"
|
||||
version = "0.9.8"
|
||||
@ -3720,7 +3699,7 @@ checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
|
||||
dependencies = [
|
||||
"atoi",
|
||||
"base64 0.21.7",
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"byteorder",
|
||||
"bytes",
|
||||
"crc",
|
||||
@ -3764,7 +3743,7 @@ checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
|
||||
dependencies = [
|
||||
"atoi",
|
||||
"base64 0.21.7",
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"byteorder",
|
||||
"crc",
|
||||
"dotenvy",
|
||||
@ -3824,12 +3803,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "stability"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ff9eaf853dec4c8802325d8b6d3dffa86cc707fd7a1a4cdbf416e13b061787a"
|
||||
checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3863,9 +3842,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||
|
||||
[[package]]
|
||||
name = "strum"
|
||||
version = "0.26.2"
|
||||
version = "0.26.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29"
|
||||
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
|
||||
dependencies = [
|
||||
"strum_macros",
|
||||
]
|
||||
@ -3880,14 +3859,14 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "subtle"
|
||||
version = "2.5.0"
|
||||
version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
|
||||
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
@ -3902,9 +3881,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.66"
|
||||
version = "2.0.68"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
|
||||
checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -3998,7 +3977,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4065,9 +4044,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tinyvec"
|
||||
version = "1.6.0"
|
||||
version = "1.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
|
||||
checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82"
|
||||
dependencies = [
|
||||
"tinyvec_macros",
|
||||
]
|
||||
@ -4115,7 +4094,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4198,7 +4177,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"prost-build",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4238,7 +4217,7 @@ version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags 2.6.0",
|
||||
"bytes",
|
||||
"http 1.1.0",
|
||||
"http-body 1.0.0",
|
||||
@ -4281,7 +4260,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4372,7 +4351,7 @@ checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4477,11 +4456,10 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.9.0"
|
||||
version = "1.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ea73390fe27785838dcbf75b91b1d84799e28f1ce71e6f372a5dc2200c80de5"
|
||||
checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439"
|
||||
dependencies = [
|
||||
"atomic",
|
||||
"getrandom",
|
||||
"serde",
|
||||
]
|
||||
@ -4546,7 +4524,7 @@ dependencies = [
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
@ -4580,7 +4558,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
@ -4715,7 +4693,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
"windows-targets 0.52.5",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4724,7 +4702,7 @@ version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
|
||||
dependencies = [
|
||||
"windows-targets 0.52.5",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4742,7 +4720,7 @@ version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets 0.52.5",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4762,18 +4740,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
|
||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm 0.52.5",
|
||||
"windows_aarch64_msvc 0.52.5",
|
||||
"windows_i686_gnu 0.52.5",
|
||||
"windows_aarch64_gnullvm 0.52.6",
|
||||
"windows_aarch64_msvc 0.52.6",
|
||||
"windows_i686_gnu 0.52.6",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc 0.52.5",
|
||||
"windows_x86_64_gnu 0.52.5",
|
||||
"windows_x86_64_gnullvm 0.52.5",
|
||||
"windows_x86_64_msvc 0.52.5",
|
||||
"windows_i686_msvc 0.52.6",
|
||||
"windows_x86_64_gnu 0.52.6",
|
||||
"windows_x86_64_gnullvm 0.52.6",
|
||||
"windows_x86_64_msvc 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4784,9 +4762,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
|
||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
@ -4796,9 +4774,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
|
||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
@ -4808,15 +4786,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
|
||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
|
||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
@ -4826,9 +4804,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
|
||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
@ -4838,9 +4816,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
|
||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
@ -4850,9 +4828,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
|
||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
@ -4862,9 +4840,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.52.5"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
|
||||
[[package]]
|
||||
name = "winreg"
|
||||
@ -4949,22 +4927,22 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.7.34"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
|
||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
||||
dependencies = [
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.7.34"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
|
||||
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4984,5 +4962,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
"syn 2.0.68",
|
||||
]
|
||||
|
471
ui/backend/Cargo.lock
generated
471
ui/backend/Cargo.lock
generated
@ -152,6 +152,12 @@ dependencies = [
|
||||
"password-hash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
||||
|
||||
[[package]]
|
||||
name = "async-broadcast"
|
||||
version = "0.7.1"
|
||||
@ -328,12 +334,6 @@ dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atomic"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
|
||||
|
||||
[[package]]
|
||||
name = "atomic-waker"
|
||||
version = "1.1.2"
|
||||
@ -342,7 +342,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
|
||||
|
||||
[[package]]
|
||||
name = "atuin-client"
|
||||
version = "18.3.0"
|
||||
version = "18.4.0-beta.1"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"atuin-common",
|
||||
@ -390,10 +390,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "atuin-common"
|
||||
version = "18.3.0"
|
||||
version = "18.4.0-beta.1"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"directories",
|
||||
"eyre",
|
||||
"getrandom 0.2.15",
|
||||
"lazy_static",
|
||||
"rand 0.8.5",
|
||||
"semver",
|
||||
@ -408,7 +410,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "atuin-dotfiles"
|
||||
version = "0.3.0"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"atuin-client",
|
||||
"atuin-common",
|
||||
@ -422,7 +424,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "atuin-history"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"atuin-client",
|
||||
@ -504,6 +506,21 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bit-set"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
|
||||
dependencies = [
|
||||
"bit-vec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bit-vec"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
@ -779,7 +796,8 @@ dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"clap_lex",
|
||||
"strsim",
|
||||
"strsim 0.11.1",
|
||||
"terminal_size",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -846,6 +864,26 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "comrak"
|
||||
version = "0.22.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0436149c9f6a1935b13306206c739b1ba84fa81f551b5eb87fc2ca7a13700af"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"derive_builder",
|
||||
"entities",
|
||||
"memchr",
|
||||
"once_cell",
|
||||
"regex",
|
||||
"shell-words",
|
||||
"slug",
|
||||
"syntect",
|
||||
"typed-arena",
|
||||
"unicode_categories",
|
||||
"xdg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "concurrent-queue"
|
||||
version = "2.5.0"
|
||||
@ -1155,14 +1193,38 @@ dependencies = [
|
||||
"syn 2.0.66",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.14.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
|
||||
dependencies = [
|
||||
"darling_core 0.14.4",
|
||||
"darling_macro 0.14.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.20.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
"darling_core 0.20.9",
|
||||
"darling_macro 0.20.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.14.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim 0.10.0",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1175,17 +1237,28 @@ dependencies = [
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"strsim 0.11.1",
|
||||
"syn 2.0.66",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.14.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
|
||||
dependencies = [
|
||||
"darling_core 0.14.4",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.20.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_core 0.20.9",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
]
|
||||
@ -1228,6 +1301,37 @@ dependencies = [
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_builder"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
|
||||
dependencies = [
|
||||
"derive_builder_macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_builder_core"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
|
||||
dependencies = [
|
||||
"darling 0.14.4",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_builder_macro"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
|
||||
dependencies = [
|
||||
"derive_builder_core",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "0.99.17"
|
||||
@ -1241,6 +1345,12 @@ dependencies = [
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deunicode"
|
||||
version = "1.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00"
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
@ -1359,6 +1469,12 @@ version = "0.15.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||
|
||||
[[package]]
|
||||
name = "downcast-rs"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
|
||||
|
||||
[[package]]
|
||||
name = "dpi"
|
||||
version = "0.1.1"
|
||||
@ -1469,6 +1585,12 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
|
||||
|
||||
[[package]]
|
||||
name = "entities"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca"
|
||||
|
||||
[[package]]
|
||||
name = "enumflags2"
|
||||
version = "0.7.10"
|
||||
@ -1554,6 +1676,16 @@ dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fancy-regex"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
|
||||
dependencies = [
|
||||
"bit-set",
|
||||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.1.0"
|
||||
@ -1581,7 +1713,7 @@ version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
|
||||
dependencies = [
|
||||
"memoffset",
|
||||
"memoffset 0.9.1",
|
||||
"rustc_version",
|
||||
]
|
||||
|
||||
@ -2657,12 +2789,40 @@ dependencies = [
|
||||
"time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ioctl-rs"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ipnet"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
|
||||
|
||||
[[package]]
|
||||
name = "is-docker"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-wsl"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
|
||||
dependencies = [
|
||||
"is-docker",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.70.0"
|
||||
@ -3022,6 +3182,15 @@ version = "2.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.9.1"
|
||||
@ -3125,6 +3294,20 @@ version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.25.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"bitflags 1.3.2",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"memoffset 0.6.5",
|
||||
"pin-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.27.1"
|
||||
@ -3134,7 +3317,19 @@ dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"memoffset",
|
||||
"memoffset 0.9.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"cfg-if",
|
||||
"cfg_aliases",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3442,6 +3637,17 @@ version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
||||
|
||||
[[package]]
|
||||
name = "open"
|
||||
version = "5.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5ca541f22b1c46d4bb9801014f234758ab4297e7870b904b6a8415b980a7388"
|
||||
dependencies = [
|
||||
"is-wsl",
|
||||
"libc",
|
||||
"pathdiff",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-probe"
|
||||
version = "0.1.5"
|
||||
@ -3464,6 +3670,16 @@ dependencies = [
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "os_pipe"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "overload"
|
||||
version = "0.1.1"
|
||||
@ -3840,6 +4056,27 @@ version = "1.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
|
||||
|
||||
[[package]]
|
||||
name = "portable-pty"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "806ee80c2a03dbe1a9fb9534f8d19e4c0546b790cde8fd1fea9d6390644cb0be"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 1.3.2",
|
||||
"downcast-rs",
|
||||
"filedescriptor",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"log",
|
||||
"nix 0.25.1",
|
||||
"serial",
|
||||
"shared_library",
|
||||
"shell-words",
|
||||
"winapi",
|
||||
"winreg 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "powerfmt"
|
||||
version = "0.2.0"
|
||||
@ -4605,9 +4842,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.117"
|
||||
version = "1.0.120"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
|
||||
checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
|
||||
dependencies = [
|
||||
"itoa 1.0.11",
|
||||
"ryu",
|
||||
@ -4680,12 +4917,54 @@ version = "3.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"darling 0.20.9",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.66",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86"
|
||||
dependencies = [
|
||||
"serial-core",
|
||||
"serial-unix",
|
||||
"serial-windows",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-core"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-unix"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7"
|
||||
dependencies = [
|
||||
"ioctl-rs",
|
||||
"libc",
|
||||
"serial-core",
|
||||
"termios",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-windows"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"serial-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serialize-to-javascript"
|
||||
version = "0.1.1"
|
||||
@ -4749,6 +5028,32 @@ dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shared_child"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shared_library"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shell-words"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
|
||||
|
||||
[[package]]
|
||||
name = "shellexpand"
|
||||
version = "3.1.0"
|
||||
@ -4819,6 +5124,16 @@ dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slug"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4"
|
||||
dependencies = [
|
||||
"deunicode",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.13.2"
|
||||
@ -5194,6 +5509,12 @@ dependencies = [
|
||||
"unicode-properties",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.11.1"
|
||||
@ -5264,6 +5585,7 @@ checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"bitflags 1.3.2",
|
||||
"fancy-regex",
|
||||
"flate2",
|
||||
"fnv",
|
||||
"once_cell",
|
||||
@ -5552,6 +5874,27 @@ dependencies = [
|
||||
"urlpattern",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-shell"
|
||||
version = "2.0.0-beta.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8675bf7ab71f571a99192d0685ae870eb7af1264bdbbb66a1d655609f6c7ebd"
|
||||
dependencies = [
|
||||
"encoding_rs",
|
||||
"log",
|
||||
"open",
|
||||
"os_pipe",
|
||||
"regex",
|
||||
"schemars",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"shared_child",
|
||||
"tauri",
|
||||
"tauri-plugin",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-single-instance"
|
||||
version = "2.0.0-beta.9"
|
||||
@ -5696,6 +6039,25 @@ dependencies = [
|
||||
"utf-8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "terminal_size"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
|
||||
dependencies = [
|
||||
"rustix",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termios"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thin-slice"
|
||||
version = "0.1.1"
|
||||
@ -6067,6 +6429,12 @@ version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
||||
|
||||
[[package]]
|
||||
name = "typed-arena"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
|
||||
|
||||
[[package]]
|
||||
name = "typed-builder"
|
||||
version = "0.18.2"
|
||||
@ -6099,7 +6467,7 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
|
||||
dependencies = [
|
||||
"memoffset",
|
||||
"memoffset 0.9.1",
|
||||
"tempfile",
|
||||
"winapi",
|
||||
]
|
||||
@ -6112,7 +6480,11 @@ dependencies = [
|
||||
"atuin-common",
|
||||
"atuin-dotfiles",
|
||||
"atuin-history",
|
||||
"bytes",
|
||||
"comrak",
|
||||
"eyre",
|
||||
"nix 0.29.0",
|
||||
"portable-pty",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sqlx",
|
||||
@ -6120,11 +6492,13 @@ dependencies = [
|
||||
"tauri",
|
||||
"tauri-build",
|
||||
"tauri-plugin-http",
|
||||
"tauri-plugin-shell",
|
||||
"tauri-plugin-single-instance",
|
||||
"tauri-plugin-sql",
|
||||
"time",
|
||||
"tokio",
|
||||
"uuid",
|
||||
"vt100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -6286,11 +6660,10 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.8.0"
|
||||
version = "1.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
|
||||
checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439"
|
||||
dependencies = [
|
||||
"atomic",
|
||||
"getrandom 0.2.15",
|
||||
"serde",
|
||||
]
|
||||
@ -6339,6 +6712,39 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vt100"
|
||||
version = "0.15.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de"
|
||||
dependencies = [
|
||||
"itoa 1.0.11",
|
||||
"log",
|
||||
"unicode-width",
|
||||
"vte",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vte"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"utf8parse",
|
||||
"vte_generate_state_changes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vte_generate_state_changes"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "walkdir"
|
||||
version = "2.5.0"
|
||||
@ -6974,6 +7380,15 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winreg"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winreg"
|
||||
version = "0.50.0"
|
||||
@ -7069,6 +7484,12 @@ dependencies = [
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xdg"
|
||||
version = "2.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
|
||||
|
||||
[[package]]
|
||||
name = "xdg-home"
|
||||
version = "1.2.0"
|
||||
@ -7135,7 +7556,7 @@ dependencies = [
|
||||
"futures-sink",
|
||||
"futures-util",
|
||||
"hex",
|
||||
"nix",
|
||||
"nix 0.27.1",
|
||||
"ordered-stream",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
|
@ -27,6 +27,12 @@ syntect = "5.2.0"
|
||||
tauri-plugin-http = "2.0.0-beta"
|
||||
tauri-plugin-single-instance = "2.0.0-beta"
|
||||
tokio = "1.38.0"
|
||||
tauri-plugin-shell = "2.0.0-beta.7"
|
||||
comrak = "0.22"
|
||||
portable-pty = "0.8.1"
|
||||
vt100 = "0.15.2"
|
||||
bytes = "1.6.0"
|
||||
nix = "0.29.0"
|
||||
|
||||
[dependencies.sqlx]
|
||||
version = "0.7"
|
||||
|
@ -11,6 +11,7 @@
|
||||
"resources:default",
|
||||
"menu:default",
|
||||
"tray:default",
|
||||
"shell:allow-open",
|
||||
"sql:allow-load",
|
||||
"sql:allow-execute",
|
||||
"sql:allow-select",
|
||||
|
@ -1,2 +1,2 @@
|
||||
[toolchain]
|
||||
channel = "1.77"
|
||||
channel = "1.79"
|
||||
|
@ -174,6 +174,41 @@ impl HistoryDB {
|
||||
Ok(history)
|
||||
}
|
||||
|
||||
pub async fn prefix_search(&self, query: &str) -> Result<Vec<UIHistory>, String> {
|
||||
let context = Context {
|
||||
session: "".to_string(),
|
||||
cwd: "".to_string(),
|
||||
host_id: "".to_string(),
|
||||
hostname: "".to_string(),
|
||||
git_root: None,
|
||||
};
|
||||
|
||||
let filters = OptFilters {
|
||||
limit: Some(5),
|
||||
..OptFilters::default()
|
||||
};
|
||||
|
||||
let history = self
|
||||
.0
|
||||
.search(
|
||||
SearchMode::Prefix,
|
||||
FilterMode::Global,
|
||||
&context,
|
||||
query,
|
||||
filters,
|
||||
)
|
||||
.await
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
let history = history
|
||||
.into_iter()
|
||||
.filter(|h| h.duration > 0)
|
||||
.map(|h| h.into())
|
||||
.collect();
|
||||
|
||||
Ok(history)
|
||||
}
|
||||
|
||||
pub async fn calendar(&self) -> Result<Vec<(String, u64)>, String> {
|
||||
let query = "select count(1) as count, strftime('%F', datetime(timestamp / 1000000000, 'unixepoch')) as day from history where timestamp > ((unixepoch() - 31536000) * 1000000000) group by day;";
|
||||
|
||||
|
@ -24,7 +24,8 @@ pub(crate) async fn install_cli() -> Result<(), String> {
|
||||
pub(crate) async fn is_cli_installed() -> Result<bool, String> {
|
||||
let shell = Shell::default_shell().map_err(|e| format!("Failed to get default shell: {e}"))?;
|
||||
let output = if shell == Shell::Powershell {
|
||||
shell.run_interactive(&["atuin --version; if ($?) {echo 'ATUIN FOUND'}"])
|
||||
shell
|
||||
.run_interactive(&["atuin --version; if ($?) {echo 'ATUIN FOUND'}"])
|
||||
.map_err(|e| format!("Failed to run interactive command"))?
|
||||
} else {
|
||||
shell
|
||||
|
@ -1,6 +1,8 @@
|
||||
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||
|
||||
use tauri::State;
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
use tauri::{AppHandle, Manager};
|
||||
@ -9,6 +11,9 @@ use time::format_description::well_known::Rfc3339;
|
||||
mod db;
|
||||
mod dotfiles;
|
||||
mod install;
|
||||
mod pty;
|
||||
mod run;
|
||||
mod state;
|
||||
mod store;
|
||||
|
||||
use atuin_client::settings::Settings;
|
||||
@ -168,7 +173,7 @@ async fn home_info() -> Result<HomeInfo, String> {
|
||||
}
|
||||
|
||||
// Match the format that the frontend library we use expects
|
||||
// All the processing in Rust, not JS.
|
||||
// All the processing in Rust, not JSunwrap.
|
||||
// Faaaassssssst af ⚡️🦀
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
pub struct HistoryCalendarDay {
|
||||
@ -215,6 +220,19 @@ async fn history_calendar() -> Result<Vec<HistoryCalendarDay>, String> {
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn prefix_search(query: &str) -> Result<Vec<String>, String> {
|
||||
let settings = Settings::new().map_err(|e| e.to_string())?;
|
||||
|
||||
let db_path = PathBuf::from(settings.db_path.as_str());
|
||||
let db = HistoryDB::new(db_path, settings.local_timeout).await?;
|
||||
|
||||
let history = db.prefix_search(query).await?;
|
||||
let commands = history.into_iter().map(|h| h.command).collect();
|
||||
|
||||
Ok(commands)
|
||||
}
|
||||
|
||||
fn show_window(app: &AppHandle) {
|
||||
let windows = app.webview_windows();
|
||||
|
||||
@ -228,9 +246,11 @@ fn show_window(app: &AppHandle) {
|
||||
|
||||
fn main() {
|
||||
tauri::Builder::default()
|
||||
.plugin(tauri_plugin_shell::init())
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
list,
|
||||
search,
|
||||
prefix_search,
|
||||
global_stats,
|
||||
aliases,
|
||||
home_info,
|
||||
@ -239,6 +259,10 @@ fn main() {
|
||||
login,
|
||||
register,
|
||||
history_calendar,
|
||||
run::pty::pty_open,
|
||||
run::pty::pty_write,
|
||||
run::pty::pty_resize,
|
||||
run::pty::pty_kill,
|
||||
install::install_cli,
|
||||
install::is_cli_installed,
|
||||
install::setup_cli,
|
||||
@ -254,6 +278,7 @@ fn main() {
|
||||
.plugin(tauri_plugin_single_instance::init(|app, args, cwd| {
|
||||
let _ = show_window(app);
|
||||
}))
|
||||
.manage(state::AtuinState::default())
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
}
|
||||
|
112
ui/backend/src/pty.rs
Normal file
112
ui/backend/src/pty.rs
Normal file
@ -0,0 +1,112 @@
|
||||
use std::{
|
||||
io::Write,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use bytes::Bytes;
|
||||
use eyre::{eyre, Result};
|
||||
use portable_pty::{CommandBuilder, MasterPty, PtySize};
|
||||
|
||||
pub struct Pty {
|
||||
tx: tokio::sync::mpsc::Sender<Bytes>,
|
||||
|
||||
pub master: Arc<Mutex<Box<dyn MasterPty + Send>>>,
|
||||
pub reader: Arc<Mutex<Box<dyn std::io::Read + Send>>>,
|
||||
}
|
||||
|
||||
impl Pty {
|
||||
pub async fn open<'a>(rows: u16, cols: u16) -> Result<Self> {
|
||||
let sys = portable_pty::native_pty_system();
|
||||
|
||||
let pair = sys
|
||||
.openpty(PtySize {
|
||||
rows,
|
||||
cols,
|
||||
pixel_width: 0,
|
||||
pixel_height: 0,
|
||||
})
|
||||
.map_err(|e| eyre!("Failed to open pty: {}", e))?;
|
||||
|
||||
let cmd = CommandBuilder::new_default_prog();
|
||||
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let mut child = pair.slave.spawn_command(cmd).unwrap();
|
||||
// Wait for the child to exit
|
||||
let _ = child.wait().unwrap();
|
||||
|
||||
// Ensure slave is dropped
|
||||
// This closes file handles, we can deadlock if this is not done correctly.
|
||||
drop(pair.slave);
|
||||
});
|
||||
|
||||
// Handle input -> write to master writer
|
||||
let (master_tx, mut master_rx) = tokio::sync::mpsc::channel::<Bytes>(32);
|
||||
|
||||
let mut writer = pair.master.take_writer().unwrap();
|
||||
let reader = pair
|
||||
.master
|
||||
.try_clone_reader()
|
||||
.map_err(|e| e.to_string())
|
||||
.expect("Failed to clone reader");
|
||||
|
||||
tokio::spawn(async move {
|
||||
while let Some(bytes) = master_rx.recv().await {
|
||||
writer.write_all(&bytes).unwrap();
|
||||
writer.flush().unwrap();
|
||||
}
|
||||
|
||||
// When the channel has been closed, we won't be getting any more input. Close the
|
||||
// writer and the master.
|
||||
// This will also close the writer, which sends EOF to the underlying shell. Ensuring
|
||||
// that is also closed.
|
||||
drop(writer);
|
||||
});
|
||||
|
||||
Ok(Pty {
|
||||
tx: master_tx,
|
||||
master: Arc::new(Mutex::new(pair.master)),
|
||||
reader: Arc::new(Mutex::new(reader)),
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn resize(&self, rows: u16, cols: u16) -> Result<()> {
|
||||
let master = self
|
||||
.master
|
||||
.lock()
|
||||
.map_err(|e| eyre!("Failed to lock pty master: {e}"))?;
|
||||
|
||||
master
|
||||
.resize(PtySize {
|
||||
rows,
|
||||
cols,
|
||||
pixel_width: 0,
|
||||
pixel_height: 0,
|
||||
})
|
||||
.map_err(|e| eyre!("Failed to resize terminal: {e}"))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn send_bytes(&self, bytes: Bytes) -> Result<()> {
|
||||
self.tx
|
||||
.send(bytes)
|
||||
.await
|
||||
.map_err(|e| eyre!("Failed to write to master tx: {}", e))
|
||||
}
|
||||
|
||||
pub async fn send_string(&self, cmd: &str) -> Result<()> {
|
||||
let bytes: Vec<u8> = cmd.bytes().collect();
|
||||
let bytes = Bytes::from(bytes);
|
||||
|
||||
self.send_bytes(bytes).await
|
||||
}
|
||||
|
||||
pub async fn send_single_string(&self, cmd: &str) -> Result<()> {
|
||||
let mut bytes: Vec<u8> = cmd.bytes().collect();
|
||||
bytes.push(0x04);
|
||||
|
||||
let bytes = Bytes::from(bytes);
|
||||
|
||||
self.send_bytes(bytes).await
|
||||
}
|
||||
}
|
1
ui/backend/src/run/mod.rs
Normal file
1
ui/backend/src/run/mod.rs
Normal file
@ -0,0 +1 @@
|
||||
pub mod pty;
|
93
ui/backend/src/run/pty.rs
Normal file
93
ui/backend/src/run/pty.rs
Normal file
@ -0,0 +1,93 @@
|
||||
use eyre::{Result, WrapErr};
|
||||
use std::io::BufRead;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::state::AtuinState;
|
||||
use tauri::{Manager, State};
|
||||
|
||||
use atuin_client::{database::Sqlite, record::sqlite_store::SqliteStore, settings::Settings};
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn pty_open<'a>(
|
||||
app: tauri::AppHandle,
|
||||
state: State<'a, AtuinState>,
|
||||
) -> Result<uuid::Uuid, String> {
|
||||
let id = uuid::Uuid::new_v4();
|
||||
let pty = crate::pty::Pty::open(24, 80).await.unwrap();
|
||||
|
||||
let reader = pty.reader.clone();
|
||||
|
||||
tauri::async_runtime::spawn_blocking(move || loop {
|
||||
let mut buf = [0u8; 512];
|
||||
|
||||
match reader.lock().unwrap().read(&mut buf) {
|
||||
// EOF
|
||||
Ok(0) => {
|
||||
println!("reader loop hit eof");
|
||||
break;
|
||||
}
|
||||
|
||||
Ok(n) => {
|
||||
println!("read {n} bytes");
|
||||
|
||||
// TODO: sort inevitable encoding issues
|
||||
let out = String::from_utf8_lossy(&buf).to_string();
|
||||
let out = out.trim_matches(char::from(0));
|
||||
let channel = format!("pty-{id}");
|
||||
|
||||
app.emit(channel.as_str(), out).unwrap();
|
||||
}
|
||||
|
||||
Err(e) => {
|
||||
println!("failed to read: {e}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
state.pty_sessions.write().await.insert(id, pty);
|
||||
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub(crate) async fn pty_write(
|
||||
pid: uuid::Uuid,
|
||||
data: String,
|
||||
state: tauri::State<'_, AtuinState>,
|
||||
) -> Result<(), String> {
|
||||
let sessions = state.pty_sessions.read().await;
|
||||
let pty = sessions.get(&pid).ok_or("Pty not found")?;
|
||||
|
||||
let bytes = data.as_bytes().to_vec();
|
||||
pty.send_bytes(bytes.into())
|
||||
.await
|
||||
.map_err(|e| e.to_string())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub(crate) async fn pty_resize(
|
||||
pid: uuid::Uuid,
|
||||
rows: u16,
|
||||
cols: u16,
|
||||
state: tauri::State<'_, AtuinState>,
|
||||
) -> Result<(), String> {
|
||||
let sessions = state.pty_sessions.read().await;
|
||||
let pty = sessions.get(&pid).ok_or("Pty not found")?;
|
||||
|
||||
pty.resize(rows, cols).await.map_err(|e| e.to_string())?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub(crate) async fn pty_kill(
|
||||
pid: uuid::Uuid,
|
||||
state: tauri::State<'_, AtuinState>,
|
||||
) -> Result<(), String> {
|
||||
let pty = state.pty_sessions.write().await.remove(&pid).unwrap();
|
||||
println!("RIP {pid:?}");
|
||||
|
||||
Ok(())
|
||||
}
|
10
ui/backend/src/state.rs
Normal file
10
ui/backend/src/state.rs
Normal file
@ -0,0 +1,10 @@
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Mutex;
|
||||
use tauri::async_runtime::RwLock;
|
||||
|
||||
use crate::pty::Pty;
|
||||
|
||||
#[derive(Default)]
|
||||
pub(crate) struct AtuinState {
|
||||
pub pty_sessions: RwLock<HashMap<uuid::Uuid, Pty>>,
|
||||
}
|
@ -10,6 +10,16 @@
|
||||
"tauri": "tauri"
|
||||
},
|
||||
"dependencies": {
|
||||
"@blocknote/core": "^0.14.2",
|
||||
"@blocknote/mantine": "^0.14.2",
|
||||
"@blocknote/react": "^0.14.2",
|
||||
"@codemirror/autocomplete": "^6.16.3",
|
||||
"@codemirror/commands": "^6.6.0",
|
||||
"@codemirror/language": "^6.10.2",
|
||||
"@codemirror/lint": "^6.8.1",
|
||||
"@codemirror/search": "^6.5.6",
|
||||
"@codemirror/state": "^6.4.1",
|
||||
"@codemirror/view": "^6.28.2",
|
||||
"@headlessui/react": "^2.1.1",
|
||||
"@heroicons/react": "^2.1.4",
|
||||
"@radix-ui/react-dialog": "^1.1.1",
|
||||
@ -21,7 +31,13 @@
|
||||
"@tanstack/react-virtual": "^3.5.1",
|
||||
"@tauri-apps/api": "2.0.0-beta.13",
|
||||
"@tauri-apps/plugin-http": "2.0.0-beta.5",
|
||||
"@tauri-apps/plugin-shell": "2.0.0-beta.6",
|
||||
"@tauri-apps/plugin-sql": "2.0.0-beta.5",
|
||||
"@uiw/codemirror-extensions-langs": "^4.22.2",
|
||||
"@uiw/react-codemirror": "^4.22.2",
|
||||
"@xterm/addon-fit": "^0.10.0",
|
||||
"@xterm/addon-webgl": "^0.18.0",
|
||||
"@xterm/xterm": "^5.5.0",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.1",
|
||||
"core": "link:@tauri-apps/api/core",
|
||||
|
6875
ui/pnpm-lock.yaml
6875
ui/pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,9 @@ import {
|
||||
ClockIcon,
|
||||
WrenchScrewdriverIcon,
|
||||
} from "@heroicons/react/24/outline";
|
||||
|
||||
import { ChevronRightSquare } from "lucide-react";
|
||||
|
||||
import Logo from "./assets/logo-light.svg";
|
||||
|
||||
function classNames(...classes: any) {
|
||||
@ -23,11 +26,13 @@ import Home from "./pages/Home.tsx";
|
||||
import History from "./pages/History.tsx";
|
||||
import Dotfiles from "./pages/Dotfiles.tsx";
|
||||
import LoginOrRegister from "./components/LoginOrRegister.tsx";
|
||||
import Runbooks from "./pages/Runbooks.tsx";
|
||||
|
||||
enum Section {
|
||||
Home,
|
||||
History,
|
||||
Dotfiles,
|
||||
Runbooks,
|
||||
}
|
||||
|
||||
function renderMain(section: Section): ReactElement {
|
||||
@ -38,6 +43,8 @@ function renderMain(section: Section): ReactElement {
|
||||
return <History />;
|
||||
case Section.Dotfiles:
|
||||
return <Dotfiles />;
|
||||
case Section.Runbooks:
|
||||
return <Runbooks />;
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,6 +72,11 @@ function App() {
|
||||
icon: WrenchScrewdriverIcon,
|
||||
section: Section.Dotfiles,
|
||||
},
|
||||
{
|
||||
name: "Runbooks",
|
||||
icon: ChevronRightSquare,
|
||||
section: Section.Runbooks,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
|
91
ui/src/components/runbooks/editor/Editor.tsx
Normal file
91
ui/src/components/runbooks/editor/Editor.tsx
Normal file
@ -0,0 +1,91 @@
|
||||
import "@blocknote/core/fonts/inter.css";
|
||||
import "@blocknote/mantine/style.css";
|
||||
import "./index.css";
|
||||
|
||||
import {
|
||||
BlockNoteSchema,
|
||||
defaultBlockSpecs,
|
||||
filterSuggestionItems,
|
||||
insertOrUpdateBlock,
|
||||
} from "@blocknote/core";
|
||||
import "@blocknote/core/fonts/inter.css";
|
||||
|
||||
import {
|
||||
SuggestionMenuController,
|
||||
AddBlockButton,
|
||||
getDefaultReactSlashMenuItems,
|
||||
useCreateBlockNote,
|
||||
SideMenu,
|
||||
SideMenuController,
|
||||
} from "@blocknote/react";
|
||||
import { BlockNoteView } from "@blocknote/mantine";
|
||||
|
||||
import { Code } from "lucide-react";
|
||||
|
||||
import RunBlock from "@/components/runbooks/editor/blocks/RunBlock";
|
||||
import { DeleteBlock } from "@/components/runbooks/editor/ui/DeleteBlockButton";
|
||||
|
||||
// Our schema with block specs, which contain the configs and implementations for blocks
|
||||
// that we want our editor to use.
|
||||
const schema = BlockNoteSchema.create({
|
||||
blockSpecs: {
|
||||
// Adds all default blocks.
|
||||
...defaultBlockSpecs,
|
||||
|
||||
// Adds the code block.
|
||||
run: RunBlock,
|
||||
},
|
||||
});
|
||||
|
||||
// Slash menu item to insert an Alert block
|
||||
const insertRun = (editor: typeof schema.BlockNoteEditor) => ({
|
||||
title: "Code block",
|
||||
onItemClick: () => {
|
||||
insertOrUpdateBlock(editor, {
|
||||
type: "run",
|
||||
});
|
||||
},
|
||||
icon: <Code size={18} />,
|
||||
aliases: ["code", "run"],
|
||||
group: "Code",
|
||||
});
|
||||
|
||||
export default function Editor() {
|
||||
// Creates a new editor instance.
|
||||
const editor = useCreateBlockNote({
|
||||
schema,
|
||||
initialContent: [
|
||||
{
|
||||
type: "heading",
|
||||
content: "Atuin runbooks",
|
||||
id: "foo",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Renders the editor instance.
|
||||
return (
|
||||
<div>
|
||||
<BlockNoteView editor={editor} slashMenu={false} sideMenu={false}>
|
||||
<SuggestionMenuController
|
||||
triggerCharacter={"/"}
|
||||
getItems={async (query) =>
|
||||
filterSuggestionItems(
|
||||
[...getDefaultReactSlashMenuItems(editor), insertRun(editor)],
|
||||
query,
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
||||
<SideMenuController
|
||||
sideMenu={(props) => (
|
||||
<SideMenu {...props}>
|
||||
<AddBlockButton {...props} />
|
||||
<DeleteBlock {...props} />
|
||||
</SideMenu>
|
||||
)}
|
||||
/>
|
||||
</BlockNoteView>
|
||||
</div>
|
||||
);
|
||||
}
|
158
ui/src/components/runbooks/editor/blocks/RunBlock/extensions.ts
Normal file
158
ui/src/components/runbooks/editor/blocks/RunBlock/extensions.ts
Normal file
@ -0,0 +1,158 @@
|
||||
// Based on the basicSetup extension, as suggested by the source. Customized for Atuin.
|
||||
|
||||
import {
|
||||
KeyBinding,
|
||||
lineNumbers,
|
||||
highlightActiveLineGutter,
|
||||
highlightSpecialChars,
|
||||
drawSelection,
|
||||
dropCursor,
|
||||
rectangularSelection,
|
||||
crosshairCursor,
|
||||
highlightActiveLine,
|
||||
keymap,
|
||||
} from "@codemirror/view";
|
||||
import { EditorState, Extension } from "@codemirror/state";
|
||||
import { history, defaultKeymap, historyKeymap } from "@codemirror/commands";
|
||||
import { highlightSelectionMatches, searchKeymap } from "@codemirror/search";
|
||||
|
||||
import {
|
||||
closeBrackets,
|
||||
autocompletion,
|
||||
closeBracketsKeymap,
|
||||
completionKeymap,
|
||||
CompletionContext,
|
||||
} from "@codemirror/autocomplete";
|
||||
|
||||
import {
|
||||
foldGutter,
|
||||
indentOnInput,
|
||||
syntaxHighlighting,
|
||||
defaultHighlightStyle,
|
||||
bracketMatching,
|
||||
indentUnit,
|
||||
foldKeymap,
|
||||
} from "@codemirror/language";
|
||||
|
||||
import { lintKeymap } from "@codemirror/lint";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
export interface MinimalSetupOptions {
|
||||
highlightSpecialChars?: boolean;
|
||||
history?: boolean;
|
||||
drawSelection?: boolean;
|
||||
syntaxHighlighting?: boolean;
|
||||
|
||||
defaultKeymap?: boolean;
|
||||
historyKeymap?: boolean;
|
||||
}
|
||||
|
||||
export interface BasicSetupOptions extends MinimalSetupOptions {
|
||||
lineNumbers?: boolean;
|
||||
highlightActiveLineGutter?: boolean;
|
||||
foldGutter?: boolean;
|
||||
dropCursor?: boolean;
|
||||
allowMultipleSelections?: boolean;
|
||||
indentOnInput?: boolean;
|
||||
bracketMatching?: boolean;
|
||||
closeBrackets?: boolean;
|
||||
autocompletion?: boolean;
|
||||
rectangularSelection?: boolean;
|
||||
crosshairCursor?: boolean;
|
||||
highlightActiveLine?: boolean;
|
||||
highlightSelectionMatches?: boolean;
|
||||
|
||||
closeBracketsKeymap?: boolean;
|
||||
searchKeymap?: boolean;
|
||||
foldKeymap?: boolean;
|
||||
completionKeymap?: boolean;
|
||||
lintKeymap?: boolean;
|
||||
tabSize?: number;
|
||||
}
|
||||
|
||||
function myCompletions(context: CompletionContext) {
|
||||
let word = context.matchBefore(/^.*/);
|
||||
|
||||
if (!word) return null;
|
||||
if (word.from == word.to && !context.explicit) return null;
|
||||
|
||||
return invoke("prefix_search", { query: word.text }).then(
|
||||
// @ts-ignore
|
||||
(results: string[]) => {
|
||||
let options = results.map((i) => {
|
||||
return { label: i, type: "text" };
|
||||
});
|
||||
|
||||
return {
|
||||
from: word.from,
|
||||
options,
|
||||
};
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const buildAutocomplete = (): Extension => {
|
||||
let ac = autocompletion({ override: [myCompletions] });
|
||||
|
||||
return ac;
|
||||
};
|
||||
|
||||
export const extensions = (options: BasicSetupOptions = {}): Extension[] => {
|
||||
const { crosshairCursor: initCrosshairCursor = false } = options;
|
||||
|
||||
let keymaps: KeyBinding[] = [];
|
||||
if (options.closeBracketsKeymap !== false) {
|
||||
keymaps = keymaps.concat(closeBracketsKeymap);
|
||||
}
|
||||
if (options.defaultKeymap !== false) {
|
||||
keymaps = keymaps.concat(defaultKeymap);
|
||||
}
|
||||
if (options.searchKeymap !== false) {
|
||||
keymaps = keymaps.concat(searchKeymap);
|
||||
}
|
||||
if (options.historyKeymap !== false) {
|
||||
keymaps = keymaps.concat(historyKeymap);
|
||||
}
|
||||
if (options.foldKeymap !== false) {
|
||||
keymaps = keymaps.concat(foldKeymap);
|
||||
}
|
||||
if (options.completionKeymap !== false) {
|
||||
keymaps = keymaps.concat(completionKeymap);
|
||||
}
|
||||
if (options.lintKeymap !== false) {
|
||||
keymaps = keymaps.concat(lintKeymap);
|
||||
}
|
||||
const extensions: Extension[] = [];
|
||||
if (options.lineNumbers !== false) extensions.push(lineNumbers());
|
||||
if (options.highlightActiveLineGutter !== false)
|
||||
extensions.push(highlightActiveLineGutter());
|
||||
if (options.highlightSpecialChars !== false)
|
||||
extensions.push(highlightSpecialChars());
|
||||
if (options.history !== false) extensions.push(history());
|
||||
if (options.foldGutter !== false) extensions.push(foldGutter());
|
||||
if (options.drawSelection !== false) extensions.push(drawSelection());
|
||||
if (options.dropCursor !== false) extensions.push(dropCursor());
|
||||
if (options.allowMultipleSelections !== false)
|
||||
extensions.push(EditorState.allowMultipleSelections.of(true));
|
||||
if (options.indentOnInput !== false) extensions.push(indentOnInput());
|
||||
if (options.syntaxHighlighting !== false)
|
||||
extensions.push(
|
||||
syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
|
||||
);
|
||||
|
||||
if (options.bracketMatching !== false) extensions.push(bracketMatching());
|
||||
if (options.closeBrackets !== false) extensions.push(closeBrackets());
|
||||
if (options.autocompletion !== false) extensions.push(buildAutocomplete());
|
||||
|
||||
if (options.rectangularSelection !== false)
|
||||
extensions.push(rectangularSelection());
|
||||
if (initCrosshairCursor !== false) extensions.push(crosshairCursor());
|
||||
if (options.highlightActiveLine !== false)
|
||||
extensions.push(highlightActiveLine());
|
||||
if (options.highlightSelectionMatches !== false)
|
||||
extensions.push(highlightSelectionMatches());
|
||||
if (options.tabSize && typeof options.tabSize === "number")
|
||||
extensions.push(indentUnit.of(" ".repeat(options.tabSize)));
|
||||
|
||||
return extensions.concat([keymap.of(keymaps.flat())]).filter(Boolean);
|
||||
};
|
@ -0,0 +1,9 @@
|
||||
ProseMirror-focused {
|
||||
outline: none !important;
|
||||
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.cm-editor.cm-focused {
|
||||
outline: none !important;
|
||||
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1) !important;
|
||||
}
|
146
ui/src/components/runbooks/editor/blocks/RunBlock/index.tsx
Normal file
146
ui/src/components/runbooks/editor/blocks/RunBlock/index.tsx
Normal file
@ -0,0 +1,146 @@
|
||||
import { createReactBlockSpec } from "@blocknote/react";
|
||||
import "./index.css";
|
||||
|
||||
import CodeMirror from "@uiw/react-codemirror";
|
||||
import { langs } from "@uiw/codemirror-extensions-langs";
|
||||
|
||||
import { Play, Square } from "lucide-react";
|
||||
import { useState } from "react";
|
||||
|
||||
import { extensions } from "./extensions";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import Terminal from "./terminal.tsx";
|
||||
|
||||
import "@xterm/xterm/css/xterm.css";
|
||||
|
||||
interface RunBlockProps {
|
||||
onChange: (val: string) => void;
|
||||
onPlay?: () => void;
|
||||
onStop?: () => void;
|
||||
id: string;
|
||||
code: string;
|
||||
type: string;
|
||||
isEditable: boolean;
|
||||
}
|
||||
|
||||
const RunBlock = ({ onPlay, id, code, isEditable }: RunBlockProps) => {
|
||||
const [isRunning, setIsRunning] = useState(false);
|
||||
const [showTerminal, setShowTerminal] = useState(false);
|
||||
const [value, setValue] = useState<String>(code);
|
||||
|
||||
const [pty, setPty] = useState<string | null>(null);
|
||||
|
||||
const onChange = (val: any) => {
|
||||
setValue(val);
|
||||
};
|
||||
|
||||
const handleToggle = async (event: any) => {
|
||||
event.stopPropagation();
|
||||
|
||||
// If there's no code, don't do anything
|
||||
if (!value) return;
|
||||
|
||||
setIsRunning(!isRunning);
|
||||
setShowTerminal(!isRunning);
|
||||
|
||||
if (isRunning) {
|
||||
// send sigkill
|
||||
console.log("sending sigkill");
|
||||
await invoke("pty_kill", { pid: pty });
|
||||
}
|
||||
|
||||
if (!isRunning) {
|
||||
if (onPlay) onPlay();
|
||||
|
||||
let pty = await invoke<string>("pty_open");
|
||||
setPty(pty);
|
||||
console.log(pty);
|
||||
|
||||
let val = !value.endsWith("\n") ? value + "\n" : value;
|
||||
await invoke("pty_write", { pid: pty, data: val });
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="w-full !outline-none">
|
||||
<div className="flex items-start">
|
||||
<button
|
||||
onClick={handleToggle}
|
||||
className={`flex items-center justify-center flex-shrink-0 w-8 h-8 mr-2 rounded border focus:outline-none focus:ring-2 transition-all duration-300 ease-in-out ${
|
||||
isRunning
|
||||
? "border-red-200 bg-red-50 text-red-600 hover:bg-red-100 hover:border-red-300 focus:ring-red-300"
|
||||
: "border-green-200 bg-green-50 text-green-600 hover:bg-green-100 hover:border-green-300 focus:ring-green-300"
|
||||
}`}
|
||||
aria-label={isRunning ? "Stop code" : "Run code"}
|
||||
>
|
||||
<span
|
||||
className={`inline-block transition-transform duration-300 ease-in-out ${isRunning ? "rotate-180" : ""}`}
|
||||
>
|
||||
{isRunning ? <Square size={16} /> : <Play size={16} />}
|
||||
</span>
|
||||
</button>
|
||||
<div className="flex-grow">
|
||||
<CodeMirror
|
||||
id={id}
|
||||
placeholder={"Write your code here..."}
|
||||
className="!pt-0 border border-gray-300 rounded"
|
||||
value={code}
|
||||
editable={isEditable}
|
||||
width="100%"
|
||||
autoFocus
|
||||
onChange={onChange}
|
||||
extensions={[...extensions(), langs.shell()]}
|
||||
basicSetup={false}
|
||||
/>
|
||||
<div
|
||||
className={`overflow-hidden transition-all duration-300 ease-in-out ${
|
||||
showTerminal ? "block" : "hidden"
|
||||
}`}
|
||||
>
|
||||
{pty && <Terminal pty={pty} />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default createReactBlockSpec(
|
||||
{
|
||||
type: "run",
|
||||
propSchema: {
|
||||
type: {
|
||||
default: "bash",
|
||||
},
|
||||
code: { default: "" },
|
||||
},
|
||||
content: "none",
|
||||
},
|
||||
{
|
||||
// @ts-ignore
|
||||
render: ({ block, editor, code, type }) => {
|
||||
const onInputChange = (val: string) => {
|
||||
editor.updateBlock(block, {
|
||||
props: { ...block.props, code: val },
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<RunBlock
|
||||
onChange={onInputChange}
|
||||
id={block?.id}
|
||||
code={code}
|
||||
type={type}
|
||||
isEditable={editor.isEditable}
|
||||
/>
|
||||
);
|
||||
},
|
||||
toExternalHTML: ({ block }) => {
|
||||
return (
|
||||
<pre lang="beep boop">
|
||||
<code lang="bash">{block?.props?.code}</code>
|
||||
</pre>
|
||||
);
|
||||
},
|
||||
},
|
||||
);
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
export const openTerm = (pty: string, id: string) => {
|
||||
const term = new Terminal({
|
||||
fontSize: 12,
|
||||
fontFamily: "Courier New",
|
||||
});
|
||||
|
||||
let element = document.getElementById(id);
|
||||
term.open(element);
|
||||
|
||||
//term.onResize(onResize(pty));
|
||||
|
||||
//const fitAddon = new FitAddon();
|
||||
//term.loadAddon(fitAddon);
|
||||
//term.loadAddon(new WebglAddon());
|
||||
|
||||
/*
|
||||
const onSize = (e) => {
|
||||
e.stopPropagation();
|
||||
fitAddon.fit();
|
||||
};
|
||||
fitAddon.fit();
|
||||
|
||||
window.addEventListener("resize", onSize, false);
|
||||
*/
|
||||
|
||||
import { useEffect, useRef } from "react";
|
||||
import { Terminal } from "@xterm/xterm";
|
||||
import { listen } from "@tauri-apps/api/event";
|
||||
import { FitAddon } from "@xterm/addon-fit";
|
||||
import { WebglAddon } from "@xterm/addon-webgl";
|
||||
import "@xterm/xterm/css/xterm.css";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
const onResize = (pty: string) => async (size: any) => {
|
||||
await invoke("pty_resize", {
|
||||
pid: pty,
|
||||
cols: size.cols,
|
||||
rows: size.rows,
|
||||
});
|
||||
};
|
||||
|
||||
const TerminalComponent = ({ pty }: any) => {
|
||||
const terminalRef = useRef(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (pty == null) return;
|
||||
if (!terminalRef.current) return;
|
||||
|
||||
const terminal = new Terminal();
|
||||
const fitAddon = new FitAddon();
|
||||
|
||||
terminal.open(terminalRef.current);
|
||||
terminal.loadAddon(new WebglAddon());
|
||||
terminal.loadAddon(fitAddon);
|
||||
terminal.onResize(onResize(pty));
|
||||
|
||||
const windowResize = () => {
|
||||
fitAddon.fit();
|
||||
};
|
||||
|
||||
listen(`pty-${pty}`, (event: any) => {
|
||||
terminal.write(event.payload);
|
||||
}).then(() => {
|
||||
console.log("Listening for pty events");
|
||||
});
|
||||
|
||||
window.addEventListener("resize", windowResize);
|
||||
|
||||
fitAddon.fit();
|
||||
|
||||
// Customize further as needed
|
||||
return () => {
|
||||
terminal.dispose();
|
||||
window.removeEventListener("resize", windowResize);
|
||||
};
|
||||
}, [pty]);
|
||||
|
||||
return <div ref={terminalRef} />;
|
||||
};
|
||||
|
||||
export default TerminalComponent;
|
7
ui/src/components/runbooks/editor/index.css
Normal file
7
ui/src/components/runbooks/editor/index.css
Normal file
@ -0,0 +1,7 @@
|
||||
.editor a {
|
||||
color: #0000ee;
|
||||
}
|
||||
|
||||
.editor a:hover {
|
||||
cursor: pointer;
|
||||
}
|
28
ui/src/components/runbooks/editor/ui/DeleteBlockButton.tsx
Normal file
28
ui/src/components/runbooks/editor/ui/DeleteBlockButton.tsx
Normal file
@ -0,0 +1,28 @@
|
||||
import {
|
||||
SideMenuProps,
|
||||
useBlockNoteEditor,
|
||||
useComponentsContext,
|
||||
} from "@blocknote/react";
|
||||
import { TrashIcon } from "lucide-react";
|
||||
|
||||
// Custom Side Menu button to remove the hovered block.
|
||||
export function DeleteBlock(props: SideMenuProps) {
|
||||
const editor = useBlockNoteEditor();
|
||||
|
||||
const Components = useComponentsContext()!;
|
||||
|
||||
return (
|
||||
<Components.SideMenu.Button
|
||||
label="Remove block"
|
||||
className="mx-1"
|
||||
icon={
|
||||
<TrashIcon
|
||||
size={24}
|
||||
onClick={() => {
|
||||
editor.removeBlocks([props.block]);
|
||||
}}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import React, { useEffect } from "react";
|
||||
import { formatRelative } from "date-fns";
|
||||
import { Tooltip as ReactTooltip } from "react-tooltip";
|
||||
|
||||
@ -41,16 +41,24 @@ function Header({ name }: any) {
|
||||
{greeting}
|
||||
</h2>
|
||||
<h3 className="text-xl leading-7 text-gray-900 pt-4">
|
||||
Welcome to Atuin.
|
||||
Welcome to{" "}
|
||||
<a
|
||||
href="https://atuin.sh"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer nofollow"
|
||||
>
|
||||
Atuin
|
||||
</a>
|
||||
.
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const explicitTheme: ThemeInput = {
|
||||
const explicitTheme = {
|
||||
light: ["#f0f0f0", "#c4edde", "#7ac7c4", "#f73859", "#384259"],
|
||||
dark: ["#383838", "#4D455D", "#7DB9B6", "#F5E9CF", "#E96479"],
|
||||
dark: ["#f0f0f0", "#c4edde", "#7ac7c4", "#f73859", "#384259"],
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
@ -147,7 +155,7 @@ export default function Home() {
|
||||
<ActivityCalendar
|
||||
theme={explicitTheme}
|
||||
data={calendar}
|
||||
weekStart={weekStart}
|
||||
weekStart={weekStart as any}
|
||||
renderBlock={(block, activity) =>
|
||||
React.cloneElement(block, {
|
||||
"data-tooltip-id": "react-tooltip",
|
||||
|
9
ui/src/pages/Runbooks.tsx
Normal file
9
ui/src/pages/Runbooks.tsx
Normal file
@ -0,0 +1,9 @@
|
||||
import Editor from "@/components/runbooks/editor/Editor";
|
||||
|
||||
export default function Runbooks() {
|
||||
return (
|
||||
<div className="pl-60 p-4 ">
|
||||
<Editor />
|
||||
</div>
|
||||
);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import { create } from "zustand";
|
||||
import { persist, createJSONStorage } from "zustand/middleware";
|
||||
import { persist } from "zustand/middleware";
|
||||
|
||||
import { parseISO } from "date-fns";
|
||||
|
||||
@ -39,13 +39,15 @@ interface AtuinState {
|
||||
historyNextPage: (query?: string) => void;
|
||||
}
|
||||
|
||||
let state = (set, get): AtuinState => ({
|
||||
let state = (set: any, get: any): AtuinState => ({
|
||||
user: DefaultUser,
|
||||
homeInfo: DefaultHomeInfo,
|
||||
aliases: [],
|
||||
vars: [],
|
||||
shellHistory: [],
|
||||
calendar: [],
|
||||
|
||||
// @ts-ignore
|
||||
weekStart: new Intl.Locale(navigator.language).getWeekInfo().firstDay,
|
||||
|
||||
refreshAliases: () => {
|
||||
|
Loading…
Reference in New Issue
Block a user