From ff4d8b0f86affa9e3140c6d77ef77c3e40183ba1 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:07 +0800 Subject: [PATCH 1/9] @ chore: remove bundle files, add *.bundle to .gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 清理两个 bundle 文件 (v0.8.0-rebase-cherry-pick.bundle + agit.bundle), 在 .gitignore 添加 *.bundle 规则防止再次误提交。 Co-Authored-By: Claude @ --- .gitignore | 3 +++ agit.bundle | Bin 275132 -> 0 bytes 2 files changed, 3 insertions(+) delete mode 100644 agit.bundle diff --git a/.gitignore b/.gitignore index 7bbeefa..4a9a718 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ target /target release/ + +# Bundle files (git bundle) +*.bundle diff --git a/agit.bundle b/agit.bundle deleted file mode 100644 index a6d137eefa2fdd0a214759a32652a72c8e4c84d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275132 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 z 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 From 85d008d1397f041d9f68fa375c40ceccf99d9c76 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:19 +0800 Subject: [PATCH 2/9] @ refactor: create workspace with agit-core library crate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原 src/core/、src/config/、src/utils/ 迁移至 agit-core 库 crate。 - 扁平化模块层级(不再嵌套 crate::core::) - 约 20 项 pub(crate) → pub 提升可见性 - resolve_llm_provider 改为 pub 供 agit-ai 使用 - 新增 Index/Tree 的 Default trait 实现 Co-Authored-By: Claude @ --- Cargo.lock | 1237 ++++++++++++++--- Cargo.toml | 31 +- agit-core/Cargo.toml | 21 + {src/core => agit-core/src}/bisect.rs | 8 +- {src/core => agit-core/src}/checkout.rs | 12 +- {src/core => agit-core/src}/compression.rs | 0 {src => agit-core/src}/config/mod.rs | 0 {src/core => agit-core/src}/hash.rs | 0 {src/core => agit-core/src}/ignore.rs | 0 {src/core => agit-core/src}/index.rs | 8 +- src/core/mod.rs => agit-core/src/lib.rs | 2 + {src/core => agit-core/src}/merge.rs | 20 +- {src/core => agit-core/src}/objects/blob.rs | 2 +- {src/core => agit-core/src}/objects/commit.rs | 2 +- {src/core => agit-core/src}/objects/mod.rs | 0 {src/core => agit-core/src}/objects/tag.rs | 2 +- {src/core => agit-core/src}/objects/tree.rs | 10 +- {src/core => agit-core/src}/protocol.rs | 14 +- {src/core => agit-core/src}/rebase.rs | 37 +- {src/core => agit-core/src}/reflog.rs | 2 +- {src/core => agit-core/src}/refs.rs | 0 {src/core => agit-core/src}/remote_utils.rs | 44 +- {src/core => agit-core/src}/repo.rs | 19 +- {src/core => agit-core/src}/ssh_transport.rs | 6 +- {src/core => agit-core/src}/ssh_url.rs | 0 {src/core => agit-core/src}/storage.rs | 4 +- {src => agit-core/src}/utils/error.rs | 0 {src => agit-core/src}/utils/mod.rs | 0 28 files changed, 1180 insertions(+), 301 deletions(-) create mode 100644 agit-core/Cargo.toml rename {src/core => agit-core/src}/bisect.rs (98%) rename {src/core => agit-core/src}/checkout.rs (95%) rename {src/core => agit-core/src}/compression.rs (100%) rename {src => agit-core/src}/config/mod.rs (100%) rename {src/core => agit-core/src}/hash.rs (100%) rename {src/core => agit-core/src}/ignore.rs (100%) rename {src/core => agit-core/src}/index.rs (98%) rename src/core/mod.rs => agit-core/src/lib.rs (90%) rename {src/core => agit-core/src}/merge.rs (97%) rename {src/core => agit-core/src}/objects/blob.rs (98%) rename {src/core => agit-core/src}/objects/commit.rs (99%) rename {src/core => agit-core/src}/objects/mod.rs (100%) rename {src/core => agit-core/src}/objects/tag.rs (99%) rename {src/core => agit-core/src}/objects/tree.rs (97%) rename {src/core => agit-core/src}/protocol.rs (98%) rename {src/core => agit-core/src}/rebase.rs (89%) rename {src/core => agit-core/src}/reflog.rs (98%) rename {src/core => agit-core/src}/refs.rs (100%) rename {src/core => agit-core/src}/remote_utils.rs (80%) rename {src/core => agit-core/src}/repo.rs (95%) rename {src/core => agit-core/src}/ssh_transport.rs (98%) rename {src/core => agit-core/src}/ssh_url.rs (100%) rename {src/core => agit-core/src}/storage.rs (97%) rename {src => agit-core/src}/utils/error.rs (100%) rename {src => agit-core/src}/utils/mod.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 11b67d5..e8e94df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,16 +9,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "agit" -version = "0.10.0" +name = "agit-ai" +version = "0.13.1" dependencies = [ - "anyhow", + "agit-core", + "reqwest", + "serde", +] + +[[package]] +name = "agit-cli" +version = "0.13.1" +dependencies = [ + "agit-ai", + "agit-core", "clap", - "flate2", - "native-tls", "serde", "serde_json", "serde_yaml", + "toml", +] + +[[package]] +name = "agit-core" +version = "0.13.1" +dependencies = [ + "anyhow", + "flate2", + "native-tls", + "serde", "sha1", "toml", "url", @@ -60,7 +79,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -71,7 +90,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -80,11 +99,23 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -95,11 +126,23 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytes" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" + [[package]] name = "cc" -version = "1.2.62" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "shlex", @@ -111,6 +154,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "clap" version = "4.6.1" @@ -157,6 +206,16 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -213,15 +272,24 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -235,7 +303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -261,10 +329,10 @@ dependencies = [ ] [[package]] -name = "foldhash" -version = "0.1.5" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foreign-types" @@ -290,6 +358,55 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -302,24 +419,59 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", - "wasip3", + "wasm-bindgen", ] [[package]] -name = "hashbrown" -version = "0.15.5" +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "h2" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ - "foldhash", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -334,6 +486,123 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + [[package]] name = "icu_collections" version = "2.2.0" @@ -416,12 +685,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -450,11 +713,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", + "hashbrown", ] +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -468,10 +735,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] -name = "leb128fmt" -version = "0.1.0" +name = "js-sys" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] [[package]] name = "libc" @@ -493,15 +765,27 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[package]] +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" @@ -513,6 +797,17 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + [[package]] name = "native-tls" version = "0.2.18" @@ -544,9 +839,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.80" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ "bitflags", "cfg-if", @@ -575,9 +870,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.116" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -591,6 +886,12 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "pkg-config" version = "0.3.33" @@ -607,13 +908,12 @@ dependencies = [ ] [[package]] -name = "prettyplease" -version = "0.2.37" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "proc-macro2", - "syn", + "zerocopy", ] [[package]] @@ -625,6 +925,61 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + [[package]] name = "quote" version = "1.0.45" @@ -634,12 +989,113 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + [[package]] name = "rustix" version = "1.1.4" @@ -650,9 +1106,50 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.23" @@ -665,7 +1162,7 @@ version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -675,7 +1172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -691,12 +1188,6 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" version = "1.0.228" @@ -729,9 +1220,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -750,21 +1241,33 @@ dependencies = [ ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "indexmap", + "form_urlencoded", "itoa", "ryu", "serde", - "unsafe-libyaml", ] [[package]] -name = "sha1" -version = "0.10.6" +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ @@ -775,9 +1278,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "simd-adler32" @@ -785,11 +1288,27 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] [[package]] name = "stable_deref_trait" @@ -803,17 +1322,32 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -825,6 +1359,27 @@ dependencies = [ "syn", ] +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -832,10 +1387,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -848,6 +1423,68 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.23" @@ -889,11 +1526,81 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -901,18 +1608,18 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.8" @@ -949,56 +1656,112 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", + "wit-bindgen", ] [[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +name = "wasm-bindgen" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" dependencies = [ - "wit-bindgen 0.51.0", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] -name = "wasm-encoder" -version = "0.244.0" +name = "wasm-bindgen-futures" +version = "0.4.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" dependencies = [ - "leb128fmt", - "wasmparser", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "wasm-metadata" -version = "0.244.0" +name = "wasm-bindgen-macro" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", + "quote", + "wasm-bindgen-macro-support", ] [[package]] -name = "wasmparser" -version = "0.244.0" +name = "wasm-bindgen-macro-support" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +dependencies = [ + "rustls-pki-types", ] [[package]] @@ -1008,117 +1771,205 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-sys" -version = "0.61.2" +name = "windows-registry" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "winnow" -version = "0.7.15" +name = "windows-result" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "memchr", + "windows-link", ] [[package]] -name = "wit-bindgen" -version = "0.51.0" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "wit-bindgen-rust-macro", + "windows-link", ] [[package]] -name = "wit-bindgen" -version = "0.57.1" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "wit-bindgen-core" -version = "0.51.0" +name = "windows-sys" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "anyhow", - "heck", - "wit-parser", + "windows-targets 0.53.5", ] [[package]] -name = "wit-bindgen-rust" -version = "0.51.0" +name = "windows-sys" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", + "windows-link", ] [[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "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]] -name = "wit-component" -version = "0.244.0" +name = "windows-targets" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] -name = "wit-parser" -version = "0.244.0" +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", + "memchr", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "writeable" version = "0.6.3" @@ -1127,9 +1978,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -1148,6 +1999,26 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zerocopy" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zerofrom" version = "0.1.8" @@ -1169,6 +2040,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + [[package]] name = "zerotrie" version = "0.2.4" diff --git a/Cargo.toml b/Cargo.toml index 27a8830..8ddbba9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,31 +1,6 @@ -[package] -name = "agit" -version = "0.13.1" -edition = "2021" -description = "AI-native Git tool - pure Rust implementation" -license = "Apache-2.0" -repository = "https://github.com/bit-torch/AdapterGit" - -[dependencies] -clap = { version = "4", features = ["derive"] } -serde = { version = "1", features = ["derive"] } -serde_json = "1" -serde_yaml = "0.9" -flate2 = "1" -sha1 = "0.10" -anyhow = "1" -url = "2" -native-tls = { version = "0.2", optional = true } -toml = "0.8" -reqwest = { version = "0.12", features = ["json", "rustls-tls", "blocking"], optional = true } - -[features] -default = ["tag", "tls"] -tag = [] -tls = ["native-tls"] -ai = ["reqwest"] -# lite 版: cargo build --no-default-features -F tag (纯本地操作, 无 TLS) -# full 版: cargo build --all-features (全功能, 含 TLS + AI) +[workspace] +members = ["agit-core", "agit-ai", "agit-cli"] +resolver = "2" [profile.release] opt-level = "z" diff --git a/agit-core/Cargo.toml b/agit-core/Cargo.toml new file mode 100644 index 0000000..55931e2 --- /dev/null +++ b/agit-core/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "agit-core" +version = "0.13.1" +edition = "2021" +description = "Pure-Rust Git core library — objects, refs, storage, protocol" +license = "Apache-2.0" +repository = "https://github.com/bit-torch/AdapterGit" + +[dependencies] +serde = { version = "1", features = ["derive"] } +flate2 = "1" +sha1 = "0.10" +anyhow = "1" +url = "2" +toml = "0.8" +native-tls = { version = "0.2", optional = true } + +[features] +default = ["tag", "tls"] +tag = [] +tls = ["native-tls"] diff --git a/src/core/bisect.rs b/agit-core/src/bisect.rs similarity index 98% rename from src/core/bisect.rs rename to agit-core/src/bisect.rs index e3bf0f7..7ca577a 100644 --- a/src/core/bisect.rs +++ b/agit-core/src/bisect.rs @@ -11,9 +11,9 @@ //! - `.git/BISECT_LOG` — 操作日志 //! - `.git/BISECT_START` — 原始的 HEAD 引用,用于 reset -use crate::core::objects::commit::Commit; -use crate::core::objects::format_object_data; -use crate::core::{refs, storage}; +use crate::objects::commit::Commit; +use crate::objects::format_object_data; +use crate::{refs, storage}; use std::fs; use std::path::Path; @@ -293,7 +293,7 @@ pub fn read_bisect_log(repo: &Path) -> Result #[cfg(test)] mod tests { use super::*; - use crate::core::storage; + use crate::storage; use std::fs; use std::path::PathBuf; diff --git a/src/core/checkout.rs b/agit-core/src/checkout.rs similarity index 95% rename from src/core/checkout.rs rename to agit-core/src/checkout.rs index 10f9895..0a9be39 100644 --- a/src/core/checkout.rs +++ b/agit-core/src/checkout.rs @@ -1,6 +1,6 @@ -use crate::core::objects::blob::Blob; -use crate::core::objects::tree::Tree; -use crate::core::{index, refs, storage}; +use crate::objects::blob::Blob; +use crate::objects::tree::Tree; +use crate::{index, refs, storage}; use std::collections::BTreeSet; use std::fs; use std::path::Path; @@ -16,7 +16,7 @@ pub fn restore_from_commit( return Err(format!("object {} is not a commit", commit_sha).into()); } let commit_data = with_object_header("commit", &body); - let commit = crate::core::objects::commit::Commit::deserialize(&commit_data)?; + let commit = crate::objects::commit::Commit::deserialize(&commit_data)?; let old_index = index::Index::load(repo)?; let old_tracked: BTreeSet = old_index.entries.keys().cloned().collect(); @@ -47,7 +47,7 @@ pub fn rebuild_index_from_commit( return Err(format!("object {} is not a commit", commit_sha).into()); } let commit_data = with_object_header("commit", &body); - let commit = crate::core::objects::commit::Commit::deserialize(&commit_data)?; + let commit = crate::objects::commit::Commit::deserialize(&commit_data)?; let mut new_index = index::Index::new(); rebuild_index_from_tree(repo, &commit.tree, Path::new(""), &mut new_index)?; new_index.save(repo)?; @@ -90,7 +90,7 @@ pub fn switch_branch(repo: &Path, branch_name: &str) -> Result<(), Box Self { + Self::new() + } +} + impl Index { pub fn new() -> Self { Index { @@ -105,7 +111,7 @@ impl Index { } // SHA-1 校验和 - let sha1 = crate::core::hash::hash_bytes(&data); + let sha1 = crate::hash::hash_bytes(&data); data.extend_from_slice(&hex_to_bytes(&sha1)?); Ok(data) diff --git a/src/core/mod.rs b/agit-core/src/lib.rs similarity index 90% rename from src/core/mod.rs rename to agit-core/src/lib.rs index a87fa9d..74f1296 100644 --- a/src/core/mod.rs +++ b/agit-core/src/lib.rs @@ -1,6 +1,7 @@ pub mod bisect; pub mod checkout; pub mod compression; +pub mod config; pub mod hash; pub mod ignore; pub mod index; @@ -15,3 +16,4 @@ pub mod repo; pub mod ssh_transport; pub mod ssh_url; pub mod storage; +pub mod utils; diff --git a/src/core/merge.rs b/agit-core/src/merge.rs similarity index 97% rename from src/core/merge.rs rename to agit-core/src/merge.rs index ea7fc1b..14b6aa0 100644 --- a/src/core/merge.rs +++ b/agit-core/src/merge.rs @@ -1,7 +1,7 @@ -use crate::core::objects::blob::Blob; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::{index, refs, storage}; +use crate::objects::blob::Blob; +use crate::objects::commit::Commit; +use crate::objects::tree::Tree; +use crate::{index, refs, storage}; use std::collections::{BTreeMap, BTreeSet}; use std::fs; use std::path::Path; @@ -113,7 +113,7 @@ pub fn merge_branch( } /// 查找两个 commit 的共同祖先(简易 BFS)。 -pub(crate) fn find_merge_base( +pub fn find_merge_base( repo: &Path, sha1: &str, sha2: &str, @@ -175,7 +175,7 @@ pub(crate) fn find_merge_base( /// 3-way merge: 比较 base/ours/theirs 的 tree,生成合并结果。 /// 返回是否产生了冲突。 -pub(crate) fn three_way_merge( +pub fn three_way_merge( repo: &Path, base_sha: &str, ours_sha: &str, @@ -200,7 +200,7 @@ pub(crate) fn three_way_merge( /// 3-way merge 核心逻辑:接受预计算的文件映射。 /// `custom_theirs_label` — 冲突标记 `>>>>>>>` 后使用的自定义标签(None 则用路径名)。 -pub(crate) fn three_way_merge_with_files( +pub fn three_way_merge_with_files( repo: &Path, base_files: &BTreeMap, ours_files: &BTreeMap, @@ -287,13 +287,13 @@ pub(crate) fn three_way_merge_with_files( /// 文件信息:SHA-1 和 mode。 #[derive(Debug, PartialEq)] -pub(crate) struct FileInfo { +pub struct FileInfo { pub sha1: String, pub mode: String, } /// 从 commit SHA 出发,读取 tree 中的所有文件映射。 -pub(crate) fn read_tree_files( +pub fn read_tree_files( repo: &Path, commit_sha: &str, ) -> Result, Box> { @@ -333,7 +333,7 @@ fn read_tree_files_recursive( } /// 读取 commit 的 tree 文件映射(公开 API,用于 rebase/cherry-pick)。 -pub(crate) fn read_commit_tree_files( +pub fn read_commit_tree_files( repo: &Path, commit_sha: &str, ) -> Result, Box> { diff --git a/src/core/objects/blob.rs b/agit-core/src/objects/blob.rs similarity index 98% rename from src/core/objects/blob.rs rename to agit-core/src/objects/blob.rs index 432f874..d8580f4 100644 --- a/src/core/objects/blob.rs +++ b/agit-core/src/objects/blob.rs @@ -1,4 +1,4 @@ -use crate::core::hash::hash_git_object; +use crate::hash::hash_git_object; pub struct Blob { pub content: Vec, diff --git a/src/core/objects/commit.rs b/agit-core/src/objects/commit.rs similarity index 99% rename from src/core/objects/commit.rs rename to agit-core/src/objects/commit.rs index 6bd8aea..372dc13 100644 --- a/src/core/objects/commit.rs +++ b/agit-core/src/objects/commit.rs @@ -1,4 +1,4 @@ -use crate::core::hash::hash_git_object; +use crate::hash::hash_git_object; pub struct Commit { pub tree: String, diff --git a/src/core/objects/mod.rs b/agit-core/src/objects/mod.rs similarity index 100% rename from src/core/objects/mod.rs rename to agit-core/src/objects/mod.rs diff --git a/src/core/objects/tag.rs b/agit-core/src/objects/tag.rs similarity index 99% rename from src/core/objects/tag.rs rename to agit-core/src/objects/tag.rs index 8993e2b..9ff6224 100644 --- a/src/core/objects/tag.rs +++ b/agit-core/src/objects/tag.rs @@ -1,4 +1,4 @@ -use crate::core::hash::hash_git_object; +use crate::hash::hash_git_object; /// Git 注释标签(annotated tag)对象。 /// diff --git a/src/core/objects/tree.rs b/agit-core/src/objects/tree.rs similarity index 97% rename from src/core/objects/tree.rs rename to agit-core/src/objects/tree.rs index 3571445..2e19a74 100644 --- a/src/core/objects/tree.rs +++ b/agit-core/src/objects/tree.rs @@ -1,4 +1,4 @@ -use crate::core::hash::hash_git_object; +use crate::hash::hash_git_object; pub struct Tree { pub entries: Vec, @@ -10,6 +10,12 @@ pub struct TreeEntry { pub sha1: String, } +impl Default for Tree { + fn default() -> Self { + Self::new() + } +} + impl Tree { pub fn new() -> Self { Tree { @@ -225,7 +231,7 @@ mod tests { let data = tree.serialize_raw(); let deserialized = - Tree::deserialize(&crate::core::objects::format_object_data("tree", &data)).unwrap(); + Tree::deserialize(&crate::objects::format_object_data("tree", &data)).unwrap(); // 期望排序: a.txt, dir-a, dir (目录末尾有 "/",排在 dir-a 之后), z.txt assert_eq!(deserialized.entries[0].name, "a.txt"); diff --git a/src/core/protocol.rs b/agit-core/src/protocol.rs similarity index 98% rename from src/core/protocol.rs rename to agit-core/src/protocol.rs index ffa5a50..ff229e4 100644 --- a/src/core/protocol.rs +++ b/agit-core/src/protocol.rs @@ -1,7 +1,7 @@ use std::io::{Read, Write}; use std::net::TcpStream; -use crate::core::ssh_url::SshUrl; +use crate::ssh_url::SshUrl; // ── Transport trait ────────────────────────────────────────── @@ -30,9 +30,7 @@ pub fn create_transport(url: &str) -> Result, Box Result { - let (content, n) = crate::core::compression::decompress_stream(&data[pos..])?; + let (content, n) = crate::compression::decompress_stream(&data[pos..])?; (content, n) } _ => { @@ -270,7 +268,7 @@ pub fn parse_packfile(data: &[u8]) -> Result Result Result, ) -> Result> { // 读取被 pick 的 commit let (_, body) = storage::read_object(repo, commit_sha)?; - let commit_data = crate::core::objects::format_object_data("commit", &body); + let commit_data = crate::objects::format_object_data("commit", &body); let commit = Commit::deserialize(&commit_data)?; let head_sha = refs::read_head(repo)?; @@ -119,7 +119,7 @@ pub(crate) fn pick_commit( /// 从当前索引创建 commit,直接写入 HEAD(支持分离 HEAD)。 /// /// 返回新 commit SHA。 -pub(crate) fn create_commit_from_index( +pub fn create_commit_from_index( repo: &Path, author: &str, committer: &str, @@ -157,10 +157,7 @@ pub(crate) fn create_commit_from_index( // ── TODO 状态文件管理 ────────────────────────────────────── /// 写入 REBASE_TODO 文件(每行一个 SHA,最旧的在前)。 -pub(crate) fn write_todo( - repo: &Path, - commits: &[String], -) -> Result<(), Box> { +pub fn write_todo(repo: &Path, commits: &[String]) -> Result<(), Box> { let path = repo.join(".git").join("REBASE_TODO"); let content: String = commits.iter().map(|s| format!("{}\n", s)).collect(); fs::write(path, content)?; @@ -168,7 +165,7 @@ pub(crate) fn write_todo( } /// 读取 REBASE_TODO 文件。 -pub(crate) fn read_todo(repo: &Path) -> Result, Box> { +pub fn read_todo(repo: &Path) -> Result, Box> { let path = repo.join(".git").join("REBASE_TODO"); let content = fs::read_to_string(path)?; Ok(content @@ -179,7 +176,7 @@ pub(crate) fn read_todo(repo: &Path) -> Result, Box Result, Box> { +pub fn pop_todo(repo: &Path) -> Result, Box> { let mut commits = read_todo(repo)?; if commits.is_empty() { return Ok(None); @@ -192,7 +189,7 @@ pub(crate) fn pop_todo(repo: &Path) -> Result, Box Result<(), Box> { @@ -203,7 +200,7 @@ pub(crate) fn write_cherry_todo( } /// 读取 CHERRY_PICK_TODO 文件。 -pub(crate) fn read_cherry_todo(repo: &Path) -> Result, Box> { +pub fn read_cherry_todo(repo: &Path) -> Result, Box> { let path = repo.join(".git").join("CHERRY_PICK_TODO"); let content = fs::read_to_string(path)?; Ok(content @@ -214,7 +211,7 @@ pub(crate) fn read_cherry_todo(repo: &Path) -> Result, Box Result, Box> { +pub fn pop_cherry_todo(repo: &Path) -> Result, Box> { let mut commits = read_cherry_todo(repo)?; if commits.is_empty() { return Ok(None); diff --git a/src/core/reflog.rs b/agit-core/src/reflog.rs similarity index 98% rename from src/core/reflog.rs rename to agit-core/src/reflog.rs index 7e1a76e..4e9154c 100644 --- a/src/core/reflog.rs +++ b/agit-core/src/reflog.rs @@ -79,7 +79,7 @@ pub fn append_reflog( author: &str, message: &str, ) -> Result<(), Box> { - let (timestamp, timestamp_str) = crate::core::repo::get_current_timestamp(); + let (timestamp, timestamp_str) = crate::repo::get_current_timestamp(); let path = reflog_path(repo, ref_name); if let Some(parent) = path.parent() { diff --git a/src/core/refs.rs b/agit-core/src/refs.rs similarity index 100% rename from src/core/refs.rs rename to agit-core/src/refs.rs diff --git a/src/core/remote_utils.rs b/agit-core/src/remote_utils.rs similarity index 80% rename from src/core/remote_utils.rs rename to agit-core/src/remote_utils.rs index a22fa7e..3e03055 100644 --- a/src/core/remote_utils.rs +++ b/agit-core/src/remote_utils.rs @@ -1,6 +1,6 @@ -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::protocol::ObjectList; +use crate::objects::commit::Commit; +use crate::objects::tree::Tree; +use crate::protocol::ObjectList; use std::fs; use std::path::Path; @@ -18,7 +18,7 @@ pub fn write_objects( if let Some(parent) = obj_path.parent() { fs::create_dir_all(parent)?; } - let compressed = crate::core::compression::compress(data)?; + let compressed = crate::compression::compress(data)?; fs::write(&obj_path, &compressed)?; } } @@ -37,14 +37,14 @@ pub fn apply_tree( format!("{}/{}", prefix, entry.name) }; - let (obj_type, content) = crate::core::storage::read_object(repo, &entry.sha1)?; + let (obj_type, content) = crate::storage::read_object(repo, &entry.sha1)?; if obj_type == "tree" { let full_path = repo.join(&path); if !full_path.exists() { fs::create_dir_all(&full_path)?; } - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = crate::objects::format_object_data("tree", &content); let subtree = Tree::deserialize(&tree_data)?; apply_tree(repo, &path, &subtree)?; } else if obj_type == "blob" { @@ -67,8 +67,8 @@ pub fn apply_tree_by_sha1( prefix: &str, tree_sha1: &str, ) -> Result<(), Box> { - let (_, tree_content) = crate::core::storage::read_object(repo, tree_sha1)?; - let tree_data = crate::core::objects::format_object_data("tree", &tree_content); + let (_, tree_content) = crate::storage::read_object(repo, tree_sha1)?; + let tree_data = crate::objects::format_object_data("tree", &tree_content); let tree = Tree::deserialize(&tree_data)?; apply_tree(repo, prefix, &tree) } @@ -139,14 +139,14 @@ pub fn collect_recent_commits( let mut result = Vec::new(); let mut current = sha1.to_string(); for _ in 0..max { - let (obj_type, content) = match crate::core::storage::read_object(repo, ¤t) { + let (obj_type, content) = match crate::storage::read_object(repo, ¤t) { Ok(v) => v, Err(_) => break, }; if obj_type != "commit" { break; } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = crate::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; if commit.parents.is_empty() { break; @@ -161,8 +161,8 @@ pub fn resolve_commit_to_tree( repo: &Path, sha1: &str, ) -> Result> { - let (_, content) = crate::core::storage::read_object(repo, sha1)?; - let commit_data = crate::core::objects::format_object_data("commit", &content); + let (_, content) = crate::storage::read_object(repo, sha1)?; + let commit_data = crate::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; Ok(commit.tree) } @@ -188,7 +188,7 @@ pub fn collect_local_objects_for_push( if remote_sha1s.contains(¤t) { continue; } - let (obj_type, content) = match crate::core::storage::read_object(repo, ¤t) { + let (obj_type, content) = match crate::storage::read_object(repo, ¤t) { Ok(v) => v, Err(_) => continue, }; @@ -196,10 +196,10 @@ pub fn collect_local_objects_for_push( continue; } - let full_object = crate::core::objects::format_object_data("commit", &content); + let full_object = crate::objects::format_object_data("commit", &content); objects.push((current.clone(), full_object)); - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = crate::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; collect_tree_objects(repo, &commit.tree, &mut objects)?; @@ -226,14 +226,14 @@ fn collect_all_ancestors( if !seen.insert(current.clone()) { continue; } - let (obj_type, content) = match crate::core::storage::read_object(repo, ¤t) { + let (obj_type, content) = match crate::storage::read_object(repo, ¤t) { Ok(v) => v, Err(_) => continue, }; if obj_type != "commit" { continue; } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = crate::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; result.push(current); for parent in commit.parents { @@ -250,26 +250,26 @@ fn collect_tree_objects( tree_sha1: &str, objects: &mut Vec<(String, Vec)>, ) -> Result<(), Box> { - let (obj_type, content) = crate::core::storage::read_object(repo, tree_sha1)?; + let (obj_type, content) = crate::storage::read_object(repo, tree_sha1)?; if obj_type != "tree" { return Ok(()); } objects.push(( tree_sha1.to_string(), - crate::core::objects::format_object_data("tree", &content), + crate::objects::format_object_data("tree", &content), )); - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = crate::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { - let (e_type, e_content) = crate::core::storage::read_object(repo, &entry.sha1)?; + let (e_type, e_content) = crate::storage::read_object(repo, &entry.sha1)?; if e_type == "tree" { collect_tree_objects(repo, &entry.sha1, objects)?; } else if e_type == "blob" { objects.push(( entry.sha1.clone(), - crate::core::objects::format_object_data("blob", &e_content), + crate::objects::format_object_data("blob", &e_content), )); } } diff --git a/src/core/repo.rs b/agit-core/src/repo.rs similarity index 95% rename from src/core/repo.rs rename to agit-core/src/repo.rs index b05b439..fc19400 100644 --- a/src/core/repo.rs +++ b/agit-core/src/repo.rs @@ -1,7 +1,7 @@ -use crate::core::index::Index; -use crate::core::objects::blob::Blob; -use crate::core::objects::commit::Commit; -use crate::core::{refs, storage}; +use crate::index::Index; +use crate::objects::blob::Blob; +use crate::objects::commit::Commit; +use crate::{refs, storage}; use std::fs; use std::path::{Path, PathBuf}; @@ -185,10 +185,7 @@ fn windows_tz_offset() -> Option { /// 解析 commit/tree-ish 引用为完整 SHA-1。 /// 支持 HEAD、分支名、标签名、remote ref、完整 SHA、缩写 SHA、~N 后缀。 -pub(crate) fn resolve_commit( - repo: &Path, - spec: &str, -) -> Result> { +pub fn resolve_commit(repo: &Path, spec: &str) -> Result> { // 处理 ~N 后缀:遍历父提交 if let Some(tilde_pos) = spec.find('~') { let base = &spec[..tilde_pos]; @@ -245,12 +242,12 @@ pub(crate) fn resolve_commit( } /// 获取 commit 的第一个 parent SHA。 -pub(crate) fn get_parent(repo: &Path, sha: &str) -> Result> { +pub fn get_parent(repo: &Path, sha: &str) -> Result> { let (obj_type, content) = storage::read_object(repo, sha)?; if obj_type != "commit" { return Err(format!("object {} is not a commit", sha).into()); } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = crate::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; commit .parents @@ -285,7 +282,7 @@ fn find_full_sha(repo: &Path, prefix: &str) -> Option { } /// 检查工作区是否干净(tracked 文件是否被修改或删除)。 -pub(crate) fn is_working_tree_clean( +pub fn is_working_tree_clean( repo: &Path, index: &Index, ) -> Result> { diff --git a/src/core/ssh_transport.rs b/agit-core/src/ssh_transport.rs similarity index 98% rename from src/core/ssh_transport.rs rename to agit-core/src/ssh_transport.rs index e576a17..e387ffa 100644 --- a/src/core/ssh_transport.rs +++ b/agit-core/src/ssh_transport.rs @@ -11,11 +11,11 @@ use std::io::{Read, Write}; use std::process::{Command, Stdio}; -use crate::core::protocol::Transport; -use crate::core::protocol::{ +use crate::protocol::Transport; +use crate::protocol::{ find_pack_start, parse_packfile, parse_refs_data, pkt_line_encode, pkt_line_flush, ObjectList, }; -use crate::core::ssh_url::SshUrl; +use crate::ssh_url::SshUrl; /// SSH 传输实现 pub struct SshTransport { diff --git a/src/core/ssh_url.rs b/agit-core/src/ssh_url.rs similarity index 100% rename from src/core/ssh_url.rs rename to agit-core/src/ssh_url.rs diff --git a/src/core/storage.rs b/agit-core/src/storage.rs similarity index 97% rename from src/core/storage.rs rename to agit-core/src/storage.rs index 6d99264..03fcdf9 100644 --- a/src/core/storage.rs +++ b/agit-core/src/storage.rs @@ -1,4 +1,4 @@ -use crate::core::compression::{compress, decompress}; +use crate::compression::{compress, decompress}; use std::fs; use std::path::{Path, PathBuf}; @@ -35,7 +35,7 @@ pub fn write_object( data.extend_from_slice(header.as_bytes()); data.extend_from_slice(content); - let sha1 = crate::core::hash::hash_bytes(&data); + let sha1 = crate::hash::hash_bytes(&data); let compressed = compress(&data)?; let path = object_path(repo, &sha1); diff --git a/src/utils/error.rs b/agit-core/src/utils/error.rs similarity index 100% rename from src/utils/error.rs rename to agit-core/src/utils/error.rs diff --git a/src/utils/mod.rs b/agit-core/src/utils/mod.rs similarity index 100% rename from src/utils/mod.rs rename to agit-core/src/utils/mod.rs From bd9796f5a017e6f4d4d37a77b1010e1de64ec130 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:28 +0800 Subject: [PATCH 3/9] @ refactor: extract agit-ai crate for AI-powered commit messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 src/ai/llm.rs 提取为独立的 agit-ai 库 crate。 依赖 agit-core::config 获取 LLM 配置,携带 reqwest 重依赖。 双版本分发:lite 版无此 crate,full 版包含 AI 功能。 Co-Authored-By: Claude @ --- agit-ai/Cargo.toml | 12 ++++++++++++ src/ai/llm.rs => agit-ai/src/lib.rs | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 agit-ai/Cargo.toml rename src/ai/llm.rs => agit-ai/src/lib.rs (98%) diff --git a/agit-ai/Cargo.toml b/agit-ai/Cargo.toml new file mode 100644 index 0000000..056b8d4 --- /dev/null +++ b/agit-ai/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "agit-ai" +version = "0.13.1" +edition = "2021" +description = "AI-powered commit message generation for agit" +license = "Apache-2.0" +repository = "https://github.com/bit-torch/AdapterGit" + +[dependencies] +agit-core = { path = "../agit-core" } +serde = { version = "1", features = ["derive"] } +reqwest = { version = "0.12", features = ["json", "rustls-tls", "blocking"] } diff --git a/src/ai/llm.rs b/agit-ai/src/lib.rs similarity index 98% rename from src/ai/llm.rs rename to agit-ai/src/lib.rs index f8c58eb..bcdb295 100644 --- a/src/ai/llm.rs +++ b/agit-ai/src/lib.rs @@ -1,4 +1,4 @@ -//! LLM API 调用模块(需 `ai` feature)。 +//! agit-ai — AI-powered commit message generation for agit. //! //! 支持 OpenAI-compatible API,用于自动生成 commit message。 //! @@ -20,7 +20,7 @@ //! //! `AGIT_LLM_API_URL` 环境变量可直接覆盖 API 端点(优先级最高)。 -use crate::config; +use agit_core::config; use serde::{Deserialize, Serialize}; /// LLM API 运行时配置(已解析)。 From dc8fa02d06e1de88337028f2c5b87432bce0ed43 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:37 +0800 Subject: [PATCH 4/9] @ refactor: create agit-cli binary crate with command dispatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 CLI 层迁移至 agit-cli 二进制 crate。 - cli/mod.rs: clap derive, 29 子命令 - commands/: 29 个命令实现,导入路径改为 agit_core:: - ai/mod.rs: AI 模式开关 + #[cfg(feature = "ai")] re-export agit-ai - output/mod.rs: JSON/YAML/color 输出 - main.rs: 移除 mod core/config/utils,改用 use agit_core::config Co-Authored-By: Claude @ --- agit-cli/Cargo.toml | 26 ++++++++++++++ {src => agit-cli/src}/ai/mod.rs | 2 +- {src => agit-cli/src}/cli/mod.rs | 0 {src => agit-cli/src}/commands/add.rs | 10 +++--- {src => agit-cli/src}/commands/bisect.rs | 26 +++++++------- {src => agit-cli/src}/commands/blame.rs | 8 ++--- {src => agit-cli/src}/commands/branch.rs | 2 +- {src => agit-cli/src}/commands/cat_file.rs | 8 ++--- {src => agit-cli/src}/commands/checkout.rs | 6 ++-- {src => agit-cli/src}/commands/cherry_pick.rs | 12 +++---- {src => agit-cli/src}/commands/clone.rs | 34 +++++++++---------- {src => agit-cli/src}/commands/commit.rs | 20 +++++------ {src => agit-cli/src}/commands/config_cmd.rs | 2 +- {src => agit-cli/src}/commands/diff.rs | 28 +++++++-------- {src => agit-cli/src}/commands/fetch.rs | 8 ++--- {src => agit-cli/src}/commands/init.rs | 2 +- {src => agit-cli/src}/commands/log.rs | 10 +++--- {src => agit-cli/src}/commands/ls_tree.rs | 8 ++--- {src => agit-cli/src}/commands/merge.rs | 4 +-- {src => agit-cli/src}/commands/mod.rs | 0 {src => agit-cli/src}/commands/mv.rs | 4 +-- {src => agit-cli/src}/commands/pull.rs | 34 +++++++++---------- {src => agit-cli/src}/commands/push.rs | 12 +++---- {src => agit-cli/src}/commands/rebase.rs | 14 ++++---- {src => agit-cli/src}/commands/reflog.rs | 4 +-- {src => agit-cli/src}/commands/remote.rs | 2 +- {src => agit-cli/src}/commands/reset.rs | 14 ++++---- {src => agit-cli/src}/commands/rm.rs | 4 +-- {src => agit-cli/src}/commands/show.rs | 14 ++++---- {src => agit-cli/src}/commands/stash.rs | 18 +++++----- {src => agit-cli/src}/commands/status.rs | 26 +++++++------- {src => agit-cli/src}/commands/tag.rs | 6 ++-- {src => agit-cli/src}/main.rs | 4 +-- {src => agit-cli/src}/output/mod.rs | 0 34 files changed, 198 insertions(+), 174 deletions(-) create mode 100644 agit-cli/Cargo.toml rename {src => agit-cli/src}/ai/mod.rs (98%) rename {src => agit-cli/src}/cli/mod.rs (100%) rename {src => agit-cli/src}/commands/add.rs (94%) rename {src => agit-cli/src}/commands/bisect.rs (93%) rename {src => agit-cli/src}/commands/blame.rs (98%) rename {src => agit-cli/src}/commands/branch.rs (98%) rename {src => agit-cli/src}/commands/cat_file.rs (87%) rename {src => agit-cli/src}/commands/checkout.rs (93%) rename {src => agit-cli/src}/commands/cherry_pick.rs (93%) rename {src => agit-cli/src}/commands/clone.rs (84%) rename {src => agit-cli/src}/commands/commit.rs (96%) rename {src => agit-cli/src}/commands/config_cmd.rs (99%) rename {src => agit-cli/src}/commands/diff.rs (95%) rename {src => agit-cli/src}/commands/fetch.rs (94%) rename {src => agit-cli/src}/commands/init.rs (99%) rename {src => agit-cli/src}/commands/log.rs (95%) rename {src => agit-cli/src}/commands/ls_tree.rs (78%) rename {src => agit-cli/src}/commands/merge.rs (97%) rename {src => agit-cli/src}/commands/mod.rs (100%) rename {src => agit-cli/src}/commands/mv.rs (94%) rename {src => agit-cli/src}/commands/pull.rs (87%) rename {src => agit-cli/src}/commands/push.rs (93%) rename {src => agit-cli/src}/commands/rebase.rs (95%) rename {src => agit-cli/src}/commands/reflog.rs (97%) rename {src => agit-cli/src}/commands/remote.rs (99%) rename {src => agit-cli/src}/commands/reset.rs (93%) rename {src => agit-cli/src}/commands/rm.rs (94%) rename {src => agit-cli/src}/commands/show.rs (86%) rename {src => agit-cli/src}/commands/stash.rs (93%) rename {src => agit-cli/src}/commands/status.rs (91%) rename {src => agit-cli/src}/commands/tag.rs (95%) rename {src => agit-cli/src}/main.rs (99%) rename {src => agit-cli/src}/output/mod.rs (100%) diff --git a/agit-cli/Cargo.toml b/agit-cli/Cargo.toml new file mode 100644 index 0000000..2755c62 --- /dev/null +++ b/agit-cli/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "agit-cli" +version = "0.13.1" +edition = "2021" +description = "AI-native Git tool — CLI binary" +license = "Apache-2.0" +repository = "https://github.com/bit-torch/AdapterGit" + +[[bin]] +name = "agit" +path = "src/main.rs" + +[dependencies] +agit-core = { path = "../agit-core" } +agit-ai = { path = "../agit-ai", optional = true } +clap = { version = "4", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_yaml = "0.9" +toml = "0.8" + +[features] +default = ["tag", "tls"] +tag = ["agit-core/tag"] +tls = ["agit-core/tls"] +ai = ["agit-ai"] diff --git a/src/ai/mod.rs b/agit-cli/src/ai/mod.rs similarity index 98% rename from src/ai/mod.rs rename to agit-cli/src/ai/mod.rs index d0cf522..042ae34 100644 --- a/src/ai/mod.rs +++ b/agit-cli/src/ai/mod.rs @@ -1,5 +1,5 @@ #[cfg(feature = "ai")] -pub mod llm; +pub use agit_ai as llm; use std::sync::atomic::{AtomicBool, Ordering}; diff --git a/src/cli/mod.rs b/agit-cli/src/cli/mod.rs similarity index 100% rename from src/cli/mod.rs rename to agit-cli/src/cli/mod.rs diff --git a/src/commands/add.rs b/agit-cli/src/commands/add.rs similarity index 94% rename from src/commands/add.rs rename to agit-cli/src/commands/add.rs index 8e04057..1967074 100644 --- a/src/commands/add.rs +++ b/agit-cli/src/commands/add.rs @@ -1,8 +1,8 @@ -use crate::core::ignore::IgnoreMatcher; -use crate::core::index::Index; -use crate::core::objects::blob::Blob; -use crate::core::repo; -use crate::core::storage; +use agit_core::ignore::IgnoreMatcher; +use agit_core::index::Index; +use agit_core::objects::blob::Blob; +use agit_core::repo; +use agit_core::storage; use std::fs; use std::path::Path; diff --git a/src/commands/bisect.rs b/agit-cli/src/commands/bisect.rs similarity index 93% rename from src/commands/bisect.rs rename to agit-cli/src/commands/bisect.rs index afb277d..a8d8c28 100644 --- a/src/commands/bisect.rs +++ b/agit-cli/src/commands/bisect.rs @@ -11,9 +11,9 @@ //! agit bisect run ... //! ``` -use crate::core::bisect::{self, BisectState}; -use crate::core::checkout; -use crate::core::repo; +use agit_core::bisect::{self, BisectState}; +use agit_core::checkout; +use agit_core::repo; /// bisect 子命令类型(内部使用,与 CLI 枚举独立)。 pub enum BisectSubCmd<'a> { @@ -64,14 +64,14 @@ fn bisect_start( } // 保存原始 HEAD - let original_head = crate::core::refs::read_head(repo)?; + let original_head = agit_core::refs::read_head(repo)?; // 解析 bad 提交 let bad_sha = match bad { Some(rev) => repo::resolve_commit(repo, rev)?, None => { // 默认使用 HEAD - crate::core::refs::read_head(repo)? + agit_core::refs::read_head(repo)? } }; @@ -134,7 +134,7 @@ fn bisect_good( let sha = match rev { Some(r) => repo::resolve_commit(repo, r)?, - None => crate::core::refs::read_head(repo)?, + None => agit_core::refs::read_head(repo)?, }; // 将 good SHA 加入列表 @@ -152,7 +152,7 @@ fn bisect_bad(repo: &std::path::Path, rev: Option<&str>) -> Result<(), Box repo::resolve_commit(repo, r)?, - None => crate::core::refs::read_head(repo)?, + None => agit_core::refs::read_head(repo)?, }; // 更新 bad 为新的 bad 提交 @@ -171,7 +171,7 @@ fn bisect_skip( let sha = match rev { Some(r) => repo::resolve_commit(repo, r)?, - None => crate::core::refs::read_head(repo)?, + None => agit_core::refs::read_head(repo)?, }; if !state.skip.contains(&sha) { @@ -235,16 +235,16 @@ fn bisect_reset(repo: &std::path::Path) -> Result<(), Box && state.original_head.chars().all(|c| c.is_ascii_hexdigit()) { // 分离 HEAD - crate::core::refs::write_head(repo, &state.original_head)?; + agit_core::refs::write_head(repo, &state.original_head)?; } else if let Some(branch) = state.original_head.strip_prefix("ref: refs/heads/") { // 符号引用 - crate::core::refs::write_head(repo, &format!("ref: refs/heads/{}", branch))?; + agit_core::refs::write_head(repo, &format!("ref: refs/heads/{}", branch))?; } else { - crate::core::refs::write_head(repo, &state.original_head)?; + agit_core::refs::write_head(repo, &state.original_head)?; } // 恢复工作树 - let head_sha = crate::core::refs::read_head(repo)?; + let head_sha = agit_core::refs::read_head(repo)?; checkout::restore_from_commit(repo, &head_sha)?; } @@ -352,6 +352,6 @@ fn write_head_detached( repo: &std::path::Path, sha: &str, ) -> Result<(), Box> { - crate::core::refs::write_head(repo, sha)?; + agit_core::refs::write_head(repo, sha)?; Ok(()) } diff --git a/src/commands/blame.rs b/agit-cli/src/commands/blame.rs similarity index 98% rename from src/commands/blame.rs rename to agit-cli/src/commands/blame.rs index 4f7aaef..08f10b6 100644 --- a/src/commands/blame.rs +++ b/agit-cli/src/commands/blame.rs @@ -9,9 +9,9 @@ //! 4. 将变更行归因到对应提交 //! 5. 直到所有行都被归因或到达根提交 -use crate::core::objects::commit::Commit; -use crate::core::objects::format_object_data; -use crate::core::{refs, repo, storage}; +use agit_core::objects::commit::Commit; +use agit_core::objects::format_object_data; +use agit_core::{refs, repo, storage}; use std::collections::HashMap; use std::path::Path; @@ -200,7 +200,7 @@ fn find_in_tree( } let tree_data = format_object_data("tree", &content); - let tree = crate::core::objects::tree::Tree::deserialize(&tree_data)?; + let tree = agit_core::objects::tree::Tree::deserialize(&tree_data)?; // 处理多级路径 let parts: Vec<&str> = file_path.split('/').collect(); diff --git a/src/commands/branch.rs b/agit-cli/src/commands/branch.rs similarity index 98% rename from src/commands/branch.rs rename to agit-cli/src/commands/branch.rs index db00354..6f7f32d 100644 --- a/src/commands/branch.rs +++ b/agit-cli/src/commands/branch.rs @@ -1,4 +1,4 @@ -use crate::core::{refs, repo}; +use agit_core::{refs, repo}; pub fn run( _list: bool, diff --git a/src/commands/cat_file.rs b/agit-cli/src/commands/cat_file.rs similarity index 87% rename from src/commands/cat_file.rs rename to agit-cli/src/commands/cat_file.rs index c7e88cd..a8bc2fd 100644 --- a/src/commands/cat_file.rs +++ b/agit-cli/src/commands/cat_file.rs @@ -1,6 +1,6 @@ -use crate::core::objects::tree::Tree; -use crate::core::repo; -use crate::core::storage; +use agit_core::objects::tree::Tree; +use agit_core::repo; +use agit_core::storage; pub fn run( object: &str, @@ -21,7 +21,7 @@ pub fn run( print!("{}", String::from_utf8_lossy(&content)); } "tree" => { - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = agit_core::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { let type_str = if entry.mode == "40000" { diff --git a/src/commands/checkout.rs b/agit-cli/src/commands/checkout.rs similarity index 93% rename from src/commands/checkout.rs rename to agit-cli/src/commands/checkout.rs index f258504..c65e7e6 100644 --- a/src/commands/checkout.rs +++ b/agit-cli/src/commands/checkout.rs @@ -1,9 +1,9 @@ -use crate::core::index::Index; -use crate::core::{checkout, reflog, refs, repo}; +use agit_core::index::Index; +use agit_core::{checkout, reflog, refs, repo}; pub fn run(branch: &str, force: bool) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; - let cfg = crate::config::load(); + let cfg = agit_core::config::load(); // 检查分支是否存在 let ref_path = format!("refs/heads/{}", branch); diff --git a/src/commands/cherry_pick.rs b/agit-cli/src/commands/cherry_pick.rs similarity index 93% rename from src/commands/cherry_pick.rs rename to agit-cli/src/commands/cherry_pick.rs index 3e00334..f1c27f5 100644 --- a/src/commands/cherry_pick.rs +++ b/agit-cli/src/commands/cherry_pick.rs @@ -1,6 +1,6 @@ -use crate::core::index::Index; -use crate::core::objects::commit::Commit; -use crate::core::{checkout, rebase as core_rebase, refs, repo, storage}; +use agit_core::index::Index; +use agit_core::objects::commit::Commit; +use agit_core::{checkout, rebase as core_rebase, refs, repo, storage}; use std::fs; use std::path::Path; @@ -74,7 +74,7 @@ fn apply_cherry_todo(repo: &Path) -> Result<(), Box> { }; let (_, body) = storage::read_object(repo, &commit_sha)?; - let commit_data = crate::core::objects::format_object_data("commit", &body); + let commit_data = agit_core::objects::format_object_data("commit", &body); let commit = Commit::deserialize(&commit_data)?; let parent_sha = commit.parents.first().cloned(); @@ -115,10 +115,10 @@ fn run_continue(repo: &Path) -> Result<(), Box> { let commit_sha = fs::read_to_string(&cherry_head_path)?.trim().to_string(); let (_, body) = storage::read_object(repo, &commit_sha)?; - let commit_data = crate::core::objects::format_object_data("commit", &body); + let commit_data = agit_core::objects::format_object_data("commit", &body); let original = Commit::deserialize(&commit_data)?; - let config = crate::config::load(); + let config = agit_core::config::load(); let (timestamp, time_str) = repo::get_current_timestamp(); let head_sha = refs::read_head(repo)?; core_rebase::create_commit_from_index( diff --git a/src/commands/clone.rs b/agit-cli/src/commands/clone.rs similarity index 84% rename from src/commands/clone.rs rename to agit-cli/src/commands/clone.rs index bc79824..8b681e6 100644 --- a/src/commands/clone.rs +++ b/agit-cli/src/commands/clone.rs @@ -1,9 +1,9 @@ -use crate::core::index::Index; -use crate::core::protocol::create_transport; -use crate::core::refs; -use crate::core::remote_utils; -use crate::core::repo; -use crate::core::storage; +use agit_core::index::Index; +use agit_core::protocol::create_transport; +use agit_core::refs; +use agit_core::remote_utils; +use agit_core::repo; +use agit_core::storage; use std::fs; use std::io::Write; use std::path::Path; @@ -76,10 +76,10 @@ pub fn run(url: &str) -> Result<(), Box> { // Build index from the checked-out tree let (_, tree_content) = storage::read_object( &repo_dir, - &crate::core::remote_utils::resolve_commit_to_tree(&repo_dir, &head_ref)?, + &agit_core::remote_utils::resolve_commit_to_tree(&repo_dir, &head_ref)?, )?; - let tree_data = crate::core::objects::format_object_data("tree", &tree_content); - let tree = crate::core::objects::tree::Tree::deserialize(&tree_data)?; + let tree_data = agit_core::objects::format_object_data("tree", &tree_content); + let tree = agit_core::objects::tree::Tree::deserialize(&tree_data)?; build_index_from_tree(&repo_dir, &tree, "")?; println!( @@ -150,12 +150,12 @@ fn checkout_head(repo: &Path, head_sha1: &str) -> Result<(), Box Result<(), Box Result<(), Box> { let mut index = Index::load(repo)?; @@ -175,7 +175,7 @@ fn build_index_from_tree( fn add_tree_to_index( repo: &Path, - tree: &crate::core::objects::tree::Tree, + tree: &agit_core::objects::tree::Tree, prefix: &str, index: &mut Index, ) -> Result<(), Box> { @@ -188,8 +188,8 @@ fn add_tree_to_index( if entry.mode == "40000" { let (_, sub_content) = storage::read_object(repo, &entry.sha1)?; - let sub_data = crate::core::objects::format_object_data("tree", &sub_content); - let sub_tree = crate::core::objects::tree::Tree::deserialize(&sub_data)?; + let sub_data = agit_core::objects::format_object_data("tree", &sub_content); + let sub_tree = agit_core::objects::tree::Tree::deserialize(&sub_data)?; add_tree_to_index(repo, &sub_tree, &path, index)?; } else { index.add_entry(&entry.mode, &entry.sha1, &path); diff --git a/src/commands/commit.rs b/agit-cli/src/commands/commit.rs similarity index 96% rename from src/commands/commit.rs rename to agit-cli/src/commands/commit.rs index 7117d4d..ab8ea13 100644 --- a/src/commands/commit.rs +++ b/agit-cli/src/commands/commit.rs @@ -1,14 +1,14 @@ use crate::ai; -use crate::config; -use crate::core::index::Index; +use agit_core::config; +use agit_core::index::Index; #[cfg(feature = "ai")] -use crate::core::objects::blob::Blob; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::reflog; -use crate::core::refs; -use crate::core::repo; -use crate::core::storage; +use agit_core::objects::blob::Blob; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::reflog; +use agit_core::refs; +use agit_core::repo; +use agit_core::storage; pub fn run(message: Option, ai_flag: bool) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; @@ -175,7 +175,7 @@ pub fn run(message: Option, ai_flag: bool) -> Result<(), Box String { let summary = build_staged_summary(repo_root, index); - let cfg = crate::config::load(); + let cfg = agit_core::config::load(); if let Some(llm_cfg) = ai::llm::LlmConfig::from_config(&cfg) { let provider = cfg.llm.provider.as_deref().unwrap_or("openai"); println!( diff --git a/src/commands/config_cmd.rs b/agit-cli/src/commands/config_cmd.rs similarity index 99% rename from src/commands/config_cmd.rs rename to agit-cli/src/commands/config_cmd.rs index 04c7007..57f5007 100644 --- a/src/commands/config_cmd.rs +++ b/agit-cli/src/commands/config_cmd.rs @@ -1,4 +1,4 @@ -use crate::core::repo; +use agit_core::repo; use std::fs; use std::path::PathBuf; use toml::map::Map; diff --git a/src/commands/diff.rs b/agit-cli/src/commands/diff.rs similarity index 95% rename from src/commands/diff.rs rename to agit-cli/src/commands/diff.rs index fb0de4c..064ec9d 100644 --- a/src/commands/diff.rs +++ b/agit-cli/src/commands/diff.rs @@ -1,9 +1,9 @@ -use crate::core::index::Index; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::refs; -use crate::core::repo; -use crate::core::storage; +use agit_core::index::Index; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::refs; +use agit_core::repo; +use agit_core::storage; use std::collections::BTreeMap; use std::fs; use std::path::Path; @@ -160,7 +160,7 @@ fn get_parent(repo: &Path, sha: &str) -> Result Result Result> { let (_, content) = storage::read_object(repo, commit_sha)?; - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = agit_core::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; Ok(commit.tree) } @@ -294,7 +294,7 @@ fn print_tree_vs_working( fn show_untracked_diff(repo: &Path, index: &Index) -> Result<(), Box> { let mut untracked = Vec::new(); - let matcher = crate::core::ignore::IgnoreMatcher::load(repo, Path::new("")); + let matcher = agit_core::ignore::IgnoreMatcher::load(repo, Path::new("")); collect_untracked(repo, repo, index, &matcher, &mut untracked)?; if untracked.is_empty() { return Ok(()); @@ -314,9 +314,9 @@ fn build_head_tree_map(repo: &Path, head_sha1: &str) -> BTreeMap let mut result = BTreeMap::new(); if let Ok((obj_type, content)) = storage::read_object(repo, head_sha1) { if obj_type == "commit" { - if let Ok(commit) = Commit::deserialize(&crate::core::objects::format_object_data( - "commit", &content, - )) { + if let Ok(commit) = + Commit::deserialize(&agit_core::objects::format_object_data("commit", &content)) + { let _ = collect_tree_recursive(repo, &commit.tree, "", &mut result); } } @@ -335,7 +335,7 @@ fn collect_tree_recursive( if obj_type != "tree" { return Ok(()); } - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = agit_core::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { let path = if prefix.is_empty() { @@ -469,7 +469,7 @@ fn collect_untracked( repo: &Path, current: &Path, index: &Index, - matcher: &crate::core::ignore::IgnoreMatcher, + matcher: &agit_core::ignore::IgnoreMatcher, untracked: &mut Vec, ) -> Result<(), Box> { if !current.exists() { diff --git a/src/commands/fetch.rs b/agit-cli/src/commands/fetch.rs similarity index 94% rename from src/commands/fetch.rs rename to agit-cli/src/commands/fetch.rs index 11990e2..4215534 100644 --- a/src/commands/fetch.rs +++ b/agit-cli/src/commands/fetch.rs @@ -1,7 +1,7 @@ -use crate::core::protocol::create_transport; -use crate::core::refs; -use crate::core::remote_utils; -use crate::core::repo; +use agit_core::protocol::create_transport; +use agit_core::refs; +use agit_core::remote_utils; +use agit_core::repo; pub fn run(url: Option<&str>) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; diff --git a/src/commands/init.rs b/agit-cli/src/commands/init.rs similarity index 99% rename from src/commands/init.rs rename to agit-cli/src/commands/init.rs index a8f72e0..66ac328 100644 --- a/src/commands/init.rs +++ b/agit-cli/src/commands/init.rs @@ -1,4 +1,4 @@ -use crate::core::repo; +use agit_core::repo; use std::fs; use std::path::PathBuf; diff --git a/src/commands/log.rs b/agit-cli/src/commands/log.rs similarity index 95% rename from src/commands/log.rs rename to agit-cli/src/commands/log.rs index c009362..0153062 100644 --- a/src/commands/log.rs +++ b/agit-cli/src/commands/log.rs @@ -1,7 +1,7 @@ -use crate::core::objects::commit::Commit; -use crate::core::refs; -use crate::core::repo; -use crate::core::storage; +use agit_core::objects::commit::Commit; +use agit_core::refs; +use agit_core::repo; +use agit_core::storage; pub fn run( oneline: bool, @@ -58,7 +58,7 @@ pub fn run( break; } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = agit_core::objects::format_object_data("commit", &content); let commit = match Commit::deserialize(&commit_data) { Ok(c) => c, Err(_) => break, diff --git a/src/commands/ls_tree.rs b/agit-cli/src/commands/ls_tree.rs similarity index 78% rename from src/commands/ls_tree.rs rename to agit-cli/src/commands/ls_tree.rs index 5d1ae99..26dea79 100644 --- a/src/commands/ls_tree.rs +++ b/agit-cli/src/commands/ls_tree.rs @@ -1,6 +1,6 @@ -use crate::core::objects::tree::Tree; -use crate::core::repo; -use crate::core::storage; +use agit_core::objects::tree::Tree; +use agit_core::repo; +use agit_core::storage; pub fn run(tree_sha1: &str) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; @@ -11,7 +11,7 @@ pub fn run(tree_sha1: &str) -> Result<(), Box> { return Ok(()); } - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = agit_core::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { diff --git a/src/commands/merge.rs b/agit-cli/src/commands/merge.rs similarity index 97% rename from src/commands/merge.rs rename to agit-cli/src/commands/merge.rs index 792144c..75765e4 100644 --- a/src/commands/merge.rs +++ b/agit-cli/src/commands/merge.rs @@ -1,5 +1,5 @@ -use crate::config; -use crate::core::{checkout, merge, reflog, refs, repo}; +use agit_core::config; +use agit_core::{checkout, merge, reflog, refs, repo}; use std::fs; pub fn run( diff --git a/src/commands/mod.rs b/agit-cli/src/commands/mod.rs similarity index 100% rename from src/commands/mod.rs rename to agit-cli/src/commands/mod.rs diff --git a/src/commands/mv.rs b/agit-cli/src/commands/mv.rs similarity index 94% rename from src/commands/mv.rs rename to agit-cli/src/commands/mv.rs index fd36a63..5f7a152 100644 --- a/src/commands/mv.rs +++ b/agit-cli/src/commands/mv.rs @@ -1,7 +1,7 @@ //! mv 命令:在索引和工作区中移动/重命名文件。 -use crate::core::index::Index; -use crate::core::repo; +use agit_core::index::Index; +use agit_core::repo; use std::fs; pub fn run(source: &str, dest: &str) -> Result<(), Box> { diff --git a/src/commands/pull.rs b/agit-cli/src/commands/pull.rs similarity index 87% rename from src/commands/pull.rs rename to agit-cli/src/commands/pull.rs index 8a27d2e..306e175 100644 --- a/src/commands/pull.rs +++ b/agit-cli/src/commands/pull.rs @@ -1,7 +1,7 @@ -use crate::core::index::Index; -use crate::core::refs; -use crate::core::remote_utils; -use crate::core::repo; +use agit_core::index::Index; +use agit_core::refs; +use agit_core::remote_utils; +use agit_core::repo; use std::collections::VecDeque; use std::fs; @@ -62,7 +62,7 @@ fn check_working_tree_clean( repo: &std::path::Path, index: &Index, ) -> Result> { - use crate::core::objects::blob::Blob; + use agit_core::objects::blob::Blob; for (path, entry) in index.entries.iter() { let full_path = repo.join(path); if full_path.exists() { @@ -155,15 +155,15 @@ fn push_parents( sha1: &str, queue: &mut VecDeque, ) -> Result<(), Box> { - let (obj_type, content) = match crate::core::storage::read_object(repo, sha1) { + let (obj_type, content) = match agit_core::storage::read_object(repo, sha1) { Ok(v) => v, Err(_) => return Ok(()), }; if obj_type != "commit" { return Ok(()); } - let commit_data = crate::core::objects::format_object_data("commit", &content); - let commit = crate::core::objects::commit::Commit::deserialize(&commit_data)?; + let commit_data = agit_core::objects::format_object_data("commit", &content); + let commit = agit_core::objects::commit::Commit::deserialize(&commit_data)?; for parent in commit.parents { queue.push_back(parent); } @@ -195,7 +195,7 @@ fn merge_changes( let base_sha = find_common_ancestor(repo, local_sha1, remote_sha1)? .unwrap_or_else(|| local_sha1.to_string()); - let config = crate::config::load(); + let config = agit_core::config::load(); let (timestamp, time_str) = repo::get_current_timestamp(); let author = format!( "{} <{}> {} {}", @@ -205,16 +205,16 @@ fn merge_changes( // 执行 3-way merge(直接操作 tree),写入工作目录和 index let has_conflicts = - crate::core::merge::three_way_merge(repo, &base_sha, local_sha1, remote_sha1)?; + agit_core::merge::three_way_merge(repo, &base_sha, local_sha1, remote_sha1)?; if has_conflicts { println!("Automatic merge failed; fix conflicts and then commit the result."); let git_dir = repo.join(".git"); - crate::utils::atomic_write( + agit_core::utils::atomic_write( &git_dir.join("MERGE_HEAD"), format!("{}\n", remote_sha1).as_bytes(), )?; - crate::utils::atomic_write( + agit_core::utils::atomic_write( &git_dir.join("MERGE_MSG"), format!("Merge branch '{}' of remote into {}\n", branch, branch).as_bytes(), )?; @@ -222,15 +222,15 @@ fn merge_changes( } // 无冲突:从 index 生成 tree 并创建 merge commit - let index = crate::core::index::Index::load(repo)?; - let mut merge_tree = crate::core::objects::tree::Tree::new(); + let index = agit_core::index::Index::load(repo)?; + let mut merge_tree = agit_core::objects::tree::Tree::new(); for entry in index.entries.values() { merge_tree.add_entry(&entry.mode, &entry.path, &entry.sha1); } let tree_sha = merge_tree.hash(); - crate::core::storage::write_object(repo, "tree", &merge_tree.serialize_raw())?; + agit_core::storage::write_object(repo, "tree", &merge_tree.serialize_raw())?; - let mut merge_commit = crate::core::objects::commit::Commit::new( + let mut merge_commit = agit_core::objects::commit::Commit::new( &tree_sha, &author, &committer, @@ -240,7 +240,7 @@ fn merge_changes( merge_commit.add_parent(remote_sha1); let merge_sha1 = merge_commit.hash(); - crate::core::storage::write_object(repo, "commit", &merge_commit.serialize_raw())?; + agit_core::storage::write_object(repo, "commit", &merge_commit.serialize_raw())?; refs::write_ref(repo, &format!("refs/heads/{}", branch), &merge_sha1)?; diff --git a/src/commands/push.rs b/agit-cli/src/commands/push.rs similarity index 93% rename from src/commands/push.rs rename to agit-cli/src/commands/push.rs index 79b9b9a..d13b826 100644 --- a/src/commands/push.rs +++ b/agit-cli/src/commands/push.rs @@ -1,7 +1,7 @@ -use crate::core::protocol::create_transport; -use crate::core::refs; -use crate::core::remote_utils; -use crate::core::repo; +use agit_core::protocol::create_transport; +use agit_core::refs; +use agit_core::remote_utils; +use agit_core::repo; pub fn run(remote: Option<&str>, branch: Option<&str>) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; @@ -106,13 +106,13 @@ fn generate_pack(objects: &[(String, Vec)]) -> Result, Box>= 7; } - let compressed = crate::core::compression::compress(raw_content)?; + let compressed = agit_core::compression::compress(raw_content)?; pack.extend_from_slice(&size_bytes); pack.extend_from_slice(&compressed); } - let sha1 = crate::core::hash::hash_bytes(&pack); + let sha1 = agit_core::hash::hash_bytes(&pack); let sha1_bytes: Vec = (0..40) .step_by(2) .map(|i| u8::from_str_radix(&sha1[i..i + 2], 16).unwrap_or(0)) diff --git a/src/commands/rebase.rs b/agit-cli/src/commands/rebase.rs similarity index 95% rename from src/commands/rebase.rs rename to agit-cli/src/commands/rebase.rs index 3c1a2ac..96d2837 100644 --- a/src/commands/rebase.rs +++ b/agit-cli/src/commands/rebase.rs @@ -1,6 +1,6 @@ -use crate::core::index::Index; -use crate::core::objects::commit::Commit; -use crate::core::{checkout, rebase as core_rebase, refs, repo, storage}; +use agit_core::index::Index; +use agit_core::objects::commit::Commit; +use agit_core::{checkout, rebase as core_rebase, refs, repo, storage}; use std::fs; use std::path::Path; @@ -59,7 +59,7 @@ fn run_start( let head_sha = refs::read_head(repo)?; // 找到 fork point - let fork_point = crate::core::merge::find_merge_base(repo, &head_sha, &upstream_sha)?; + let fork_point = agit_core::merge::find_merge_base(repo, &head_sha, &upstream_sha)?; // 空提交范围检查 if fork_point == head_sha { @@ -110,7 +110,7 @@ fn apply_todo_until_conflict_or_done(repo: &Path) -> Result<(), Box Result<(), Box> { // 读取原始提交的元数据 let commit_sha = fs::read_to_string(&rebase_head_path)?.trim().to_string(); let (_, body) = storage::read_object(repo, &commit_sha)?; - let commit_data = crate::core::objects::format_object_data("commit", &body); + let commit_data = agit_core::objects::format_object_data("commit", &body); let original = Commit::deserialize(&commit_data)?; // 从当前索引创建新 commit(保留原始 author,当前用户为 committer) - let config = crate::config::load(); + let config = agit_core::config::load(); let (timestamp, time_str) = repo::get_current_timestamp(); let head_sha = refs::read_head(repo)?; let _new_sha = core_rebase::create_commit_from_index( diff --git a/src/commands/reflog.rs b/agit-cli/src/commands/reflog.rs similarity index 97% rename from src/commands/reflog.rs rename to agit-cli/src/commands/reflog.rs index 6f38b3c..7c9b48c 100644 --- a/src/commands/reflog.rs +++ b/agit-cli/src/commands/reflog.rs @@ -4,8 +4,8 @@ //! //! 默认显示 HEAD 的引用日志。可以指定分支名查看特定分支的 reflog。 -use crate::core::reflog::{self, ReflogEntry}; -use crate::core::repo; +use agit_core::reflog::{self, ReflogEntry}; +use agit_core::repo; pub fn run(ref_name: Option<&str>) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; diff --git a/src/commands/remote.rs b/agit-cli/src/commands/remote.rs similarity index 99% rename from src/commands/remote.rs rename to agit-cli/src/commands/remote.rs index 468207b..e8efc47 100644 --- a/src/commands/remote.rs +++ b/agit-cli/src/commands/remote.rs @@ -1,6 +1,6 @@ use std::fs; -use crate::core::repo; +use agit_core::repo; pub fn run_add(name: &str, url: &str) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; diff --git a/src/commands/reset.rs b/agit-cli/src/commands/reset.rs similarity index 93% rename from src/commands/reset.rs rename to agit-cli/src/commands/reset.rs index a8dbe9c..d082245 100644 --- a/src/commands/reset.rs +++ b/agit-cli/src/commands/reset.rs @@ -1,7 +1,7 @@ -use crate::core::index::Index; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::{checkout, reflog, refs, repo, storage}; +use agit_core::index::Index; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::{checkout, reflog, refs, repo, storage}; use std::collections::BTreeMap; use std::path::Path; @@ -49,7 +49,7 @@ pub fn run( reset_mixed(&repo_root, &target_sha)?; } - let cfg = crate::config::load(); + let cfg = agit_core::config::load(); let _ = reflog::append_reflog( &repo_root, "HEAD", @@ -132,7 +132,7 @@ fn read_commit_tree( if obj_type != "commit" { return Ok(result); } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = agit_core::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; collect_tree_recursive(repo, &commit.tree, "", &mut result)?; Ok(result) @@ -148,7 +148,7 @@ fn collect_tree_recursive( if obj_type != "tree" { return Ok(()); } - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = agit_core::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { let path = if prefix.is_empty() { diff --git a/src/commands/rm.rs b/agit-cli/src/commands/rm.rs similarity index 94% rename from src/commands/rm.rs rename to agit-cli/src/commands/rm.rs index 09a01b1..d1a1b88 100644 --- a/src/commands/rm.rs +++ b/agit-cli/src/commands/rm.rs @@ -1,7 +1,7 @@ //! rm 命令:从索引和工作区删除文件。 -use crate::core::index::Index; -use crate::core::repo; +use agit_core::index::Index; +use agit_core::repo; use std::fs; pub fn run(cached: bool, files: &[String]) -> Result<(), Box> { diff --git a/src/commands/show.rs b/agit-cli/src/commands/show.rs similarity index 86% rename from src/commands/show.rs rename to agit-cli/src/commands/show.rs index 0791ba1..3907ca4 100644 --- a/src/commands/show.rs +++ b/agit-cli/src/commands/show.rs @@ -1,8 +1,8 @@ -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::refs; -use crate::core::repo; -use crate::core::storage; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::refs; +use agit_core::repo; +use agit_core::storage; pub fn run(object: &str) -> Result<(), Box> { let repo_root = repo::find_repo_root()?; @@ -33,7 +33,7 @@ fn resolve_ref(repo: &std::path::Path, name: &str) -> Result Result<(), Box> { - let commit_data = crate::core::objects::format_object_data("commit", content); + let commit_data = agit_core::objects::format_object_data("commit", content); let commit = Commit::deserialize(&commit_data)?; println!( @@ -53,7 +53,7 @@ fn show_commit(content: &[u8]) -> Result<(), Box> { } fn show_tree(content: &[u8]) -> Result<(), Box> { - let tree_data = crate::core::objects::format_object_data("tree", content); + let tree_data = agit_core::objects::format_object_data("tree", content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { diff --git a/src/commands/stash.rs b/agit-cli/src/commands/stash.rs similarity index 93% rename from src/commands/stash.rs rename to agit-cli/src/commands/stash.rs index 54661a7..9819dea 100644 --- a/src/commands/stash.rs +++ b/agit-cli/src/commands/stash.rs @@ -3,11 +3,11 @@ //! stash 结构:每个 stash 是一个 commit,parent 指向 HEAD,树捕获工作区+索引状态。 //! 多个 stash 以线性链存储在 `refs/stash`,最新 stash 在顶端。 -use crate::core::index::Index; -use crate::core::objects::blob::Blob; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::{checkout, refs, repo, storage}; +use agit_core::index::Index; +use agit_core::objects::blob::Blob; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::{checkout, refs, repo, storage}; use std::fs; /// `stash push`:保存当前工作区状态并重置到 HEAD。 @@ -38,7 +38,7 @@ pub fn run_push() -> Result<(), Box> { return Err("No local changes to save".into()); } - let config = crate::config::load(); + let config = agit_core::config::load(); let (timestamp, time_str) = repo::get_current_timestamp(); let author = format!( "{} <{}> {} {}", @@ -96,7 +96,7 @@ pub fn run_pop() -> Result<(), Box> { if obj_type != "commit" { return Err("refs/stash does not point to a commit".into()); } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = agit_core::objects::format_object_data("commit", &content); let commit = Commit::deserialize(&commit_data)?; // 恢复 stash 的 tree 到工作区 @@ -136,7 +136,7 @@ pub fn run_list() -> Result<(), Box> { if obj_type != "commit" { break; } - let commit_data = crate::core::objects::format_object_data("commit", &content); + let commit_data = agit_core::objects::format_object_data("commit", &content); let commit = match Commit::deserialize(&commit_data) { Ok(c) => c, Err(_) => break, @@ -172,7 +172,7 @@ pub fn run_drop(stash_ref: Option<&str>) -> Result<(), Box= 2 { diff --git a/src/commands/status.rs b/agit-cli/src/commands/status.rs similarity index 91% rename from src/commands/status.rs rename to agit-cli/src/commands/status.rs index d276fdb..f6cdb0d 100644 --- a/src/commands/status.rs +++ b/agit-cli/src/commands/status.rs @@ -1,9 +1,9 @@ -use crate::core::index::Index; -use crate::core::objects::commit::Commit; -use crate::core::objects::tree::Tree; -use crate::core::refs; -use crate::core::repo; -use crate::core::storage; +use agit_core::index::Index; +use agit_core::objects::commit::Commit; +use agit_core::objects::tree::Tree; +use agit_core::refs; +use agit_core::repo; +use agit_core::storage; use std::collections::{BTreeMap, BTreeSet}; use std::fs; use std::path::Path; @@ -83,9 +83,9 @@ fn get_head_tree(repo: &Path, sha1: &str) -> BTreeMap { let mut result = BTreeMap::new(); if let Ok((obj_type, content)) = storage::read_object(repo, sha1) { if obj_type == "commit" { - if let Ok(commit) = Commit::deserialize(&crate::core::objects::format_object_data( - "commit", &content, - )) { + if let Ok(commit) = + Commit::deserialize(&agit_core::objects::format_object_data("commit", &content)) + { let _ = collect_tree_recursive(repo, &commit.tree, "", &mut result); } } @@ -104,7 +104,7 @@ fn collect_tree_recursive( if obj_type != "tree" { return Ok(()); } - let tree_data = crate::core::objects::format_object_data("tree", &content); + let tree_data = agit_core::objects::format_object_data("tree", &content); let tree = Tree::deserialize(&tree_data)?; for entry in &tree.entries { let path = if prefix.is_empty() { @@ -143,7 +143,7 @@ fn get_modified_changes(repo: &Path, index: &Index) -> Vec { continue; } if let Ok(content) = fs::read(&full_path) { - let blob = crate::core::objects::blob::Blob::new(content); + let blob = agit_core::objects::blob::Blob::new(content); if blob.hash() != entry.sha1 { modified.push(path.clone()); } @@ -175,7 +175,7 @@ fn get_deleted_changes( fn list_untracked(repo: &Path, index: &Index) { let mut untracked = Vec::new(); - let matcher = crate::core::ignore::IgnoreMatcher::load(repo, Path::new("")); + let matcher = agit_core::ignore::IgnoreMatcher::load(repo, Path::new("")); if let Err(e) = collect_untracked(repo, repo, index, &matcher, &mut untracked) { eprintln!("error listing untracked: {}", e); return; @@ -194,7 +194,7 @@ fn collect_untracked( repo: &Path, current: &Path, index: &Index, - matcher: &crate::core::ignore::IgnoreMatcher, + matcher: &agit_core::ignore::IgnoreMatcher, untracked: &mut Vec, ) -> Result<(), Box> { if !current.exists() { diff --git a/src/commands/tag.rs b/agit-cli/src/commands/tag.rs similarity index 95% rename from src/commands/tag.rs rename to agit-cli/src/commands/tag.rs index 0452fc3..3652551 100644 --- a/src/commands/tag.rs +++ b/agit-cli/src/commands/tag.rs @@ -1,7 +1,7 @@ //! tag 命令:创建、列出、删除标签。 -use crate::core::objects::tag::Tag; -use crate::core::{refs, repo, storage}; +use agit_core::objects::tag::Tag; +use agit_core::{refs, repo, storage}; pub fn run_create( name: &str, @@ -27,7 +27,7 @@ pub fn run_create( if let Some(msg) = message { // Annotated tag - let config = crate::config::load(); + let config = agit_core::config::load(); let (timestamp, time_str) = repo::get_current_timestamp(); let tagger = format!( "{} <{}> {} {}", diff --git a/src/main.rs b/agit-cli/src/main.rs similarity index 99% rename from src/main.rs rename to agit-cli/src/main.rs index 67d87fe..3665f11 100644 --- a/src/main.rs +++ b/agit-cli/src/main.rs @@ -1,11 +1,9 @@ mod ai; mod cli; mod commands; -mod config; -mod core; mod output; -mod utils; +use agit_core::config; use clap::Parser; #[cfg(feature = "tag")] use cli::TagAction; diff --git a/src/output/mod.rs b/agit-cli/src/output/mod.rs similarity index 100% rename from src/output/mod.rs rename to agit-cli/src/output/mod.rs From cb2377ad1d93c7861af6525dd730411c08f3b20c Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:42 +0800 Subject: [PATCH 5/9] @ test: migrate integration tests to agit-cli crate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 tests/ 迁移至 agit-cli/tests/。 修复 common/mod.rs 二进制路径:CARGO_MANIFEST_DIR 上移一级到 workspace 根。 全部 69 个集成测试通过。 Co-Authored-By: Claude @ --- {tests => agit-cli/tests}/cherry_pick_test.rs | 0 {tests => agit-cli/tests}/common/mod.rs | 2 ++ {tests => agit-cli/tests}/git_compat_test.rs | 0 {tests => agit-cli/tests}/integration_test.rs | 0 {tests => agit-cli/tests}/p1_integration_test.rs | 0 {tests => agit-cli/tests}/rebase_test.rs | 0 {tests => agit-cli/tests}/smoke/linux_smoke.sh | 0 {tests => agit-cli/tests}/smoke/windows_smoke.ps1 | 0 8 files changed, 2 insertions(+) rename {tests => agit-cli/tests}/cherry_pick_test.rs (100%) rename {tests => agit-cli/tests}/common/mod.rs (95%) rename {tests => agit-cli/tests}/git_compat_test.rs (100%) rename {tests => agit-cli/tests}/integration_test.rs (100%) rename {tests => agit-cli/tests}/p1_integration_test.rs (100%) rename {tests => agit-cli/tests}/rebase_test.rs (100%) rename {tests => agit-cli/tests}/smoke/linux_smoke.sh (100%) rename {tests => agit-cli/tests}/smoke/windows_smoke.ps1 (100%) diff --git a/tests/cherry_pick_test.rs b/agit-cli/tests/cherry_pick_test.rs similarity index 100% rename from tests/cherry_pick_test.rs rename to agit-cli/tests/cherry_pick_test.rs diff --git a/tests/common/mod.rs b/agit-cli/tests/common/mod.rs similarity index 95% rename from tests/common/mod.rs rename to agit-cli/tests/common/mod.rs index bb01f6d..766badf 100644 --- a/tests/common/mod.rs +++ b/agit-cli/tests/common/mod.rs @@ -10,7 +10,9 @@ pub fn agit_binary() -> PathBuf { if let Ok(path) = std::env::var("CARGO_BIN_EXE_agit") { return PathBuf::from(path); } + // CARGO_MANIFEST_DIR 现在是 agit-cli/,workspace 的 target 在上一级 let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push(".."); path.push("target"); path.push("debug"); path.push("agit"); diff --git a/tests/git_compat_test.rs b/agit-cli/tests/git_compat_test.rs similarity index 100% rename from tests/git_compat_test.rs rename to agit-cli/tests/git_compat_test.rs diff --git a/tests/integration_test.rs b/agit-cli/tests/integration_test.rs similarity index 100% rename from tests/integration_test.rs rename to agit-cli/tests/integration_test.rs diff --git a/tests/p1_integration_test.rs b/agit-cli/tests/p1_integration_test.rs similarity index 100% rename from tests/p1_integration_test.rs rename to agit-cli/tests/p1_integration_test.rs diff --git a/tests/rebase_test.rs b/agit-cli/tests/rebase_test.rs similarity index 100% rename from tests/rebase_test.rs rename to agit-cli/tests/rebase_test.rs diff --git a/tests/smoke/linux_smoke.sh b/agit-cli/tests/smoke/linux_smoke.sh similarity index 100% rename from tests/smoke/linux_smoke.sh rename to agit-cli/tests/smoke/linux_smoke.sh diff --git a/tests/smoke/windows_smoke.ps1 b/agit-cli/tests/smoke/windows_smoke.ps1 similarity index 100% rename from tests/smoke/windows_smoke.ps1 rename to agit-cli/tests/smoke/windows_smoke.ps1 From d5b1155855bcdf1e831a27c24ab62eef98ffe723 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:55:50 +0800 Subject: [PATCH 6/9] @ docs: update documentation for workspace multi-crate structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新项目文档反映 workspace 拆分: - CLAUDE.md: workspace 架构图、新构建命令、三 crate 模块路径 - README.md / README-zh_CN.md: Build from Source 和 Project Structure - docs/ARCHITECTURE.md: 目录结构、技术栈、版本号 0.4.1→0.14.0 - CONTRIBUTING.md: 项目结构、构建命令 - CHANGELOG.md: 新增 v0.14.0 条目 - TODO.md: Phase 10 workspace 拆分记录 Co-Authored-By: Claude @ --- CHANGELOG.md | 11 ++++ CLAUDE.md | 127 +++++++++++++++++++++++++++++------------- CONTRIBUTING.md | 35 ++++++++---- README-zh_CN.md | 46 ++++++++++----- README.md | 46 ++++++++++----- TODO.md | 14 ++++- docs/ARCHITECTURE.md | 130 ++++++++++++++++++++++++++----------------- 7 files changed, 281 insertions(+), 128 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d6c5cc..c3242d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,17 @@ All notable changes to AdapterGit (agit) will be documented in this file. --- +## [v0.14.0] — 2026-06-22 + +> Workspace 拆分 — Multi-crate Architecture + +### Refactor +- **workspace 拆分**: 单 crate → 3 crate workspace (agit-core + agit-ai + agit-cli) +- **agit-core**: 纯 Rust Git 核心库,可独立复用 +- **agit-ai**: AI 提交信息生成独立 crate,携带 reqwest 依赖 +- **agit-cli**: CLI 二进制,lite/full 双版本分发 +- **双版本**: `cargo build --no-default-features -F tag` = Lite, `--all-features` = Full + ## [v0.13.0] — 2026-06-21 > 双版本分发 + AI 提交 — Dual-Edition Distribution & AI Commit diff --git a/CLAUDE.md b/CLAUDE.md index fb363a5..420b8df 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,50 +7,97 @@ This file provides guidance to Claude Code when working in this repo. **agit (AdapterGit)** — a pure-Rust, zero-external-Git-dependency Git implementation. Objects, refs, index, smart-HTTP protocol all from scratch. Ships as a single static binary. Designed for AI agents, CI/CD, and portable use. Never blocks on interactive prompts. -Version: 0.6.1 | Edition: 2021 | License: Apache-2.0 +Version: 0.14.0 | Edition: 2021 | License: Apache-2.0 + +## Workspace Structure + +``` +D:\AdapterGit\ ← Cargo workspace root +├── agit-core/ (lib) ← Git 核心库 +├── agit-ai/ (lib) ← AI 功能(LLM 客户端) +└── agit-cli/ (bin → agit) ← CLI 二进制 +``` ## Build / Test / Lint ```bash -cargo build # Debug -cargo build --release # Release -cargo test # All 119 tests (87 unit + 32 integration) -cargo clippy # Must pass w/ 0 warnings -cargo fmt # Must pass w/ no diff +cargo build # workspace 全量构建 +cargo build --all-features # Full 版 (tag + tls + ai) +cargo build --no-default-features -F tag # Lite 版 (纯本地, 无 TLS) + +cargo build -p agit-core # 单独构建核心库 +cargo build -p agit-ai # 单独构建 AI 库 +cargo build -p agit-cli # 单独构建 CLI + +cargo test # 全部 178 测试 (109 单元 + 69 集成) +cargo test -p agit-core # 核心库单元测试 +cargo test -p agit-cli # CLI 集成测试 + +cargo clippy # Must pass w/ 0 warnings +cargo fmt # Must pass w/ no diff ``` ## Architecture +### agit-core (lib) — Git 核心库 +``` +agit-core/src/ +├── lib.rs ← 模块声明(扁平化,无嵌套 core::) +├── hash.rs ← SHA-1 (sha1 crate) +├── compression.rs ← zlib via flate2 +├── storage.rs ← Loose object R/W +├── refs.rs ← HEAD, refs/heads/*, refs/tags/*, refs/remotes/*, CRUD +├── reflog.rs ← Reflog 管理 +├── index.rs ← DIRC v2 staging area +├── ignore.rs ← .gitignore parser +├── repo.rs ← find_repo_root(), timestamp helpers +├── checkout.rs ← Branch switch, tree restore, index rebuild +├── merge.rs ← 3-way merge + fast-forward + conflict markers +├── rebase.rs ← Rebase/cherry-pick 核心 +├── bisect.rs ← Bisect 状态管理与算法 +├── protocol.rs ← Git smart-HTTP: pkt-line, packfile, ref discovery +├── ssh_transport.rs ← SSH 传输(子进程 ssh) +├── ssh_url.rs ← SSH URL 解析 + ~/.ssh/config +├── remote_utils.rs ← 网络命令共享工具 +├── objects/ +│ ├── blob.rs, commit.rs, tree.rs, tag.rs (feature-gated) +│ └── mod.rs +├── config/ +│ └── mod.rs ← Config: user.name, user.email, aliases, LLM +└── utils/ + ├── mod.rs ← atomic_write() + └── error.rs ← AgitError enum +``` + +### agit-ai (lib) — AI 功能 +``` +agit-ai/src/ +└── lib.rs ← LlmConfig, chat_completion(), generate_commit_message() + depends on agit-core::config, reqwest +``` + +### agit-cli (bin → agit) — CLI 二进制 ``` -main.rs → Config → alias resolve → CLI parse → dispatch -cli/mod.rs → clap derive, 24+ subcommands, global flags (--ai --json --yaml --no-color) -commands/ → One file per subcommand, each exposes run(…) → Result<(), Box> -core/ - objects/ → blob, tree, commit, tag (feature-gated) - storage.rs → Loose object R/W (.git/objects/XX/XXXXXX), zlib - refs.rs → HEAD, refs/heads/*, refs/tags/*, refs/remotes/*, CRUD - index.rs → DIRC v2 staging area - hash.rs → SHA-1 (sha1 crate) - compression.rs → zlib via flate2 - protocol.rs → Git smart-HTTP: pkt-line, ref discovery, packfile parse, push - remote_utils.rs→ Shared helpers for network commands - checkout.rs → Branch switch, tree restore, index rebuild - merge.rs → 3-way merge + fast-forward + conflict markers - ignore.rs → .gitignore parser (glob, negation, char-class, dir-only) - repo.rs → find_repo_root(), timestamp helpers -ai/mod.rs → AI-mode flag, DANGEROUS_COMMANDS list -output/mod.rs → JSON/YAML/no-color mode flags + output formatting -config/mod.rs → Config: user.name, user.email, aliases (env > .agit/config.toml > ~/.agitconfig.toml > defaults) -utils/error.rs → AgitError enum +agit-cli/src/ +├── main.rs ← Config → alias resolve → CLI parse → dispatch +├── cli/mod.rs ← clap derive, 29 subcommands, global flags +├── commands/ ← One file per subcommand, each run(…) → Result +├── ai/mod.rs ← AI-mode flag, DANGEROUS_COMMANDS, re-exports agit-ai +├── output/mod.rs ← JSON/YAML/no-color output +└── tests/ ← Integration tests (69 tests) + └── common/mod.rs ← Test helpers (agit_binary, setup_repo, run_agit) ``` ## Key Patterns -- **Global state**: `AI_MODE`, `JSON_MODE`, `YAML_MODE`, `NO_COLOR` are `AtomicBool` statics, set once in main before dispatch. -- **Error handling**: Commands return `Box`. Core uses `AgitError` enum. IO errors propagate via `?` — never swallow with `unwrap_or_default()` on file reads. -- **Config cascade**: env vars (`AGIT_USER_NAME`/`AGIT_USER_EMAIL`) > repo `.agit/config.toml` > global `~/.agitconfig.toml` > defaults. -- **Commit flow**: `Index::load()` → build `Tree` → write tree → build `Commit` (+parent from HEAD/MERGE_HEAD) → write commit → update ref. -- **Network flow**: Clone = discover_refs → fetch_objects → parse_packfile → write_objects → checkout. Push = discover_refs → collect_local_objects → generate_pack → push_pack. Pull = fetch → merge/ff. +- **Workspace**: 3 crates — `agit-core` (lib), `agit-ai` (lib), `agit-cli` (bin). Root `Cargo.toml` is workspace-only. +- **Dual edition**: Lite = `--no-default-features -F tag` (no TLS, no AI). Full = `--all-features`. +- **Feature propagation**: `agit-cli/tag → agit-core/tag`, `agit-cli/tls → agit-core/tls`, `agit-cli/ai → agit-ai`. +- **Global state**: `AI_MODE`, `JSON_MODE`, `YAML_MODE`, `NO_COLOR` are `AtomicBool` statics in `agit-cli`. +- **Error handling**: Commands return `Box`. Core uses `AgitError` enum. +- **Config cascade**: env vars > repo `.agit/config.toml` > global `~/.agitconfig.toml` > defaults. +- **Commit flow**: `Index::load()` → build `Tree` → write tree → build `Commit` (+parent) → write commit → update ref. +- **Network flow**: Clone = discover_refs → fetch_objects → parse_packfile → write_objects → checkout. ## Rules @@ -61,21 +108,21 @@ utils/error.rs → AgitError enum ### Commit -3. **Single Logical Change** — every commit must be one atomic, self-contained change. No "Fix stuff" or "Update code". -4. **Multi-commit PR is OK** — splitting across commits is encouraged (e.g. `refactor:` → `feat:` → `test:`), but never squash unrelated changes into one. -4a. **Commit per logical unit** — 每个 commit 只包含一个逻辑单元(如一个模块、一个命令、一个 CLI 注册)。不要把多个不相关的改动堆在一坨提交。多个文件同时修改时,按依赖顺序分批提交。 -4b. **Format per commit** — 每个 commit 前单独运行 `cargo fmt`,确保 fmt 结果归属于当前提交。不要等所有改动写完再一起 fmt。 -5. **Conventional Commits**: `feat:`, `fix:`, `docs:`, `style:`, `refactor:`, `test:`, `chore:`. Scope optional: `feat(core): ...`. -5a. **No `@` in commit messages** — 提交信息前后禁止添加 `@` 符号。使用标准 Conventional Commits 格式,不加前缀或后缀的 `@`。 +3. **Single Logical Change** — every commit must be one atomic, self-contained change. +4. **Multi-commit PR is OK** — splitting across commits is encouraged (e.g. `refactor:` → `feat:` → `test:`). +4a. **Commit per logical unit** — 每个 commit 只包含一个逻辑单元。 +4b. **Format per commit** — 每个 commit 前单独运行 `cargo fmt`。 +5. **Conventional Commits**: `feat:`, `fix:`, `docs:`, `style:`, `refactor:`, `test:`, `chore:`. +5a. **No `@` in commit messages**. ### Quality Gate -6. **Tests required** — new features must have unit + integration tests. `cargo test` must pass with 0 failures before push. +6. **Tests required** — `cargo test` must pass with 0 failures before push. 7. **Clippy clean** — `cargo clippy` must produce 0 warnings before push. -8. **Formatted** — `cargo fmt` must produce no diff before push; 在最终 push 前再做一次全量检查。 +8. **Formatted** — `cargo fmt` must produce no diff before push. ### Code -9. **No silent error swallowing** — use `?` or explicit `map_err` for IO. Never `unwrap_or_default()` on file reads. +9. **No silent error swallowing** — use `?` or explicit `map_err` for IO. 10. **Feature gate tag** — `#[cfg(feature = "tag")]` code must compile with both `--features tag` and `--no-default-features`. 11. **Windows compatibility** — use `std::fs` APIs, normalize paths with `replace('\\', '/')`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc44571..4c78180 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,8 +49,10 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh **构建项目**: ```bash -cargo build -cargo build --release # Release 构建 +cargo build # Debug 构建 +cargo build --release # Release 构建 +cargo build --release --all-features # Full 版本(含 AI) +cargo build --release --no-default-features -F tag # Lite 版本 ``` #### 4. 运行测试 @@ -124,16 +126,29 @@ git push origin feat/add-clone-command ## 项目结构 ``` -src/ -├── core/ # 核心 Git 算法 -├── cli/ # 命令行 -├── ai/ # AI 模式 -├── output/ # 输出格式化 -├── config/ # 配置 -└── utils/ # 工具函数 +agit/ # Workspace 根目录 +├── Cargo.toml # Workspace 定义 +├── agit-core/ # Rust 原生 Git 核心库 +│ └── src/ +│ ├── objects/ # Blob, Tree, Commit, Tag +│ ├── storage.rs # Loose 对象读写 +│ ├── refs.rs # 引用管理(HEAD, 分支, 标签) +│ ├── index.rs # DIRC v2 暂存区 +│ ├── protocol.rs # Git smart-HTTP 协议 +│ ├── merge.rs # 3 路合并 +│ └── checkout.rs # 分支切换 / 树恢复 +├── agit-ai/ # AI 模式(可选,feature 门控) +│ └── src/ +│ └── lib.rs # AI 自动标记、安全防护 +├── agit-cli/ # CLI 二进制入口 +│ └── src/ +│ ├── main.rs # 入口点 +│ ├── commands/ # 每个子命令一个文件 +│ └── output/ # JSON / YAML / 无颜色输出 +└── tests/ # 集成测试 ``` -详见: [架构设计](docs/ARCHITECTURE.md) +详见: [架构设计](ARCHITECTURE.md) ## 开发阶段 diff --git a/README-zh_CN.md b/README-zh_CN.md index 8b5cead..8f1db44 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -85,13 +85,22 @@ sudo dpkg -i agit_0.1.0_amd64.deb # 安装 Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -# 构建 agit +# 克隆并进入仓库 git clone https://github.com/bit-torch/AdapterGit.git cd agit -cargo build --release -# 静态编译(推荐) -cargo build --release --target x86_64-unknown-linux-musl +# Full 版本(完整功能,含 TLS + AI) +cargo build --release --all-features + +# Lite 版本(不含 TLS 和 AI) +cargo build --release --no-default-features -F tag + +# 构建指定 crate +cargo build -p agit-core +cargo build -p agit-cli + +# 静态编译(推荐用于部署) +cargo build --release --target x86_64-unknown-linux-musl --all-features ``` ## 📖 使用示例 @@ -375,15 +384,26 @@ agit 使用 Conventional Commits: ### 项目结构 ``` -agit/ -├── src/ -│ ├── cli/ # 命令行解析 -│ ├── git/ # Git 核心功能 -│ ├── ai/ # AI 模式实现 -│ ├── output/ # 输出格式化 -│ └── utils/ # 工具函数 -├── tests/ # 集成测试 -└── examples/ # 使用示例 +agit/ # Workspace 根目录 +├── Cargo.toml # Workspace 定义 +├── agit-core/ # Rust 原生 Git 核心库 +│ └── src/ +│ ├── objects/ # Blob, Tree, Commit, Tag +│ ├── storage.rs # Loose 对象读写 +│ ├── refs.rs # 引用管理(HEAD, 分支, 标签) +│ ├── index.rs # DIRC v2 暂存区 +│ ├── protocol.rs # Git smart-HTTP 协议 +│ ├── merge.rs # 3 路合并 +│ └── checkout.rs # 分支切换 / 树恢复 +├── agit-ai/ # AI 模式(可选,feature 门控) +│ └── src/ +│ └── lib.rs # AI 自动标记、安全防护 +├── agit-cli/ # CLI 二进制入口 +│ └── src/ +│ ├── main.rs # 入口点 +│ ├── commands/ # 每个子命令一个文件 +│ └── output/ # JSON / YAML / 无颜色输出 +└── tests/ # 集成测试 ``` ## 📄 许可证 diff --git a/README.md b/README.md index 464b0ce..b3b7c57 100644 --- a/README.md +++ b/README.md @@ -84,13 +84,22 @@ sudo dpkg -i agit_0.1.0_amd64.deb # Install Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -# Build agit +# Clone and enter the repo git clone https://github.com/bit-torch/AdapterGit.git cd agit -cargo build --release -# Static build (recommended) -cargo build --release --target x86_64-unknown-linux-musl +# Full edition (TLS + AI) +cargo build --release --all-features + +# Lite edition (no TLS, no AI) +cargo build --release --no-default-features -F tag + +# Build specific crate +cargo build -p agit-core +cargo build -p agit-cli + +# Static build (recommended for deployment) +cargo build --release --target x86_64-unknown-linux-musl --all-features ``` ## Usage Examples @@ -389,15 +398,26 @@ agit follows [Conventional Commits](https://www.conventionalcommits.org/): ### Project Structure ``` -agit/ -├── src/ -│ ├── cli/ # Command-line parsing -│ ├── git/ # Git core functionality -│ ├── ai/ # AI mode implementation -│ ├── output/ # Output formatting -│ └── utils/ # Utility functions -├── tests/ # Integration tests -└── examples/ # Usage examples +agit/ # Workspace root +├── Cargo.toml # Workspace definition +├── agit-core/ # Pure-Rust Git core library +│ └── src/ +│ ├── objects/ # Blob, Tree, Commit, Tag +│ ├── storage.rs # Loose object R/W +│ ├── refs.rs # References (HEAD, branches, tags) +│ ├── index.rs # DIRC v2 staging area +│ ├── protocol.rs # Git smart-HTTP +│ ├── merge.rs # 3-way merge +│ └── checkout.rs # Branch switch / tree restore +├── agit-ai/ # AI mode (optional, feature-gated) +│ └── src/ +│ └── lib.rs # AI auto-tagging, safety guards +├── agit-cli/ # CLI binary +│ └── src/ +│ ├── main.rs # Entry point +│ ├── commands/ # One file per subcommand +│ └── output/ # JSON / YAML / no-color output +└── tests/ # Integration tests ``` ## License diff --git a/TODO.md b/TODO.md index 12883f7..b5a6c3c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,18 @@ # TODO - 待办事项 -AdapterGit 项目待办事项清单。最后更新: 2026-06-20 (v0.10.0 开发中)。 +AdapterGit 项目待办事项清单。最后更新: 2026-06-22 (v0.14.0 workspace 拆分完成)。 + +## Phase 10: Workspace 拆分 ✅ + +| ID | 任务 | 优先级 | 状态 | 备注 | +|----|------|--------|------|------| +| 10.1 | 清理 bundle 文件 + .gitignore | P0 | ✅ 已完成 | 删除 2 个 bundle, 添加 *.bundle | +| 10.2 | 创建 workspace 根 Cargo.toml | P0 | ✅ 已完成 | 3 crate workspace | +| 10.3 | 创建 agit-core 库 crate | P0 | ✅ 已完成 | core/ + config/ + utils/, 扁平化 | +| 10.4 | 创建 agit-ai 库 crate | P0 | ✅ 已完成 | ai/llm.rs 独立为 crate | +| 10.5 | 创建 agit-cli 二进制 crate | P0 | ✅ 已完成 | cli/ + commands/ + output/ + ai/ | +| 10.6 | 迁移集成测试 | P0 | ✅ 已完成 | tests/ → agit-cli/tests/ | +| 10.7 | 更新所有文档 | P0 | ✅ 已完成 | CLAUDE.md, README, ARCHITECTURE, CHANGELOG | ## Phase 1: 项目初始化 ✅ diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index fb248e3..b4232e4 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -4,7 +4,7 @@ AdapterGit (agit) 是一个从底层原生实现的 Git 工具,完全使用 Rust 语言编写,不依赖任何外部 Git 库或系统 Git 命令。 -版本: **v0.4.1** +版本: **v0.14.0** ## 设计目标 @@ -26,11 +26,32 @@ agit show 显示提交/对象信息 agit cat-file 查看对象内容 (-t/-p) agit ls-tree 列出树对象 ── +本地分支与历史 +agit branch 创建/列出/删除分支 +agit checkout 切换分支或恢复工作树文件 +agit merge 合并分支 (fast-forward + 3-way) +agit rebase 变基操作 +agit stash 暂存/恢复工作进度 +agit reset 重置 HEAD 到指定状态 +── +远程操作 agit clone 克隆仓库 (HTTPS) agit fetch [url] 获取更新 agit pull 获取并合并 agit push [remote] 推送更新 agit remote add/list 远程管理 +── +高级操作 +agit cherry-pick 应用指定提交到当前分支 +agit blame 文件每行归属追踪 +agit reflog 引用日志查询 +agit bisect 二分查找引入 bug 的提交 +── +其他 +agit tag 创建/列出标签 +agit rm 从工作区和索引删除文件 +agit mv 移动或重命名文件 +agit config 读取/写入仓库或全局配置 ``` > 全局参数: `--ai` `--json` `--yaml` `--no-color` @@ -38,46 +59,41 @@ agit remote add/list 远程管理 ## 目录结构 ``` -src/ -├── main.rs 入口 + cat-file dispatch -├── cli/ -│ └── mod.rs clap 命令定义 (15 个子命令) -├── commands/ 命令实现 (每个命令一个文件) -│ ├── init.rs -│ ├── add.rs -│ ├── commit.rs -│ ├── status.rs -│ ├── log.rs -│ ├── diff.rs -│ ├── show.rs -│ ├── cat_file.rs -│ ├── ls_tree.rs -│ ├── clone.rs -│ ├── fetch.rs -│ ├── push.rs -│ ├── pull.rs -│ └── remote.rs -├── core/ 核心 Git 实现 -│ ├── hash.rs SHA-1 哈希 -│ ├── compression.rs zlib 压缩/解压 -│ ├── objects/ Git 对象 -│ │ ├── blob.rs Blob 对象 -│ │ ├── tree.rs Tree 对象 -│ │ └── commit.rs Commit 对象 -│ ├── storage.rs 对象存储 (.git/objects) -│ ├── refs.rs 引用系统 (HEAD, refs/heads/*) -│ ├── index.rs 索引文件 (.git/index) -│ ├── repo.rs 仓库工具 (find_root, ensure_dir, timestamp) -│ ├── protocol.rs Git 智能传输协议 (HTTP + pkt-line + packfile) -│ └── remote_utils.rs 网络命令共享工具 -├── ai/ -│ └── mod.rs AI 模式标志 + 标记 -├── output/ -│ └── mod.rs JSON/YAML/颜色 输出 -├── config/ -│ └── mod.rs 配置 (环境变量) -└── utils/ - └── error.rs 错误类型 (AgitError) +D:\AdapterGit\ ← Cargo workspace root +├── Cargo.toml ← [workspace] members = ["agit-core", "agit-ai", "agit-cli"] +├── agit-core/ (lib) +│ └── src/ +│ ├── lib.rs 库入口,重导出公开 API +│ ├── hash.rs SHA-1 哈希 +│ ├── compression.rs zlib 压缩/解压 +│ ├── storage.rs 对象存储 (.git/objects) +│ ├── refs.rs 引用系统 (HEAD, refs/heads/*) +│ ├── index.rs 索引文件 (.git/index) +│ ├── repo.rs 仓库工具 (find_root, ensure_dir, timestamp) +│ ├── protocol.rs Git 智能传输协议 (HTTP + pkt-line + packfile) +│ ├── remote_utils.rs 网络命令共享工具 +│ ├── checkout.rs 分支切换与树恢复 +│ ├── merge.rs 三方合并 + fast-forward + 冲突标记 +│ ├── ignore.rs .gitignore 解析器 +│ ├── objects/ Git 对象 +│ │ ├── blob.rs Blob 对象 +│ │ ├── tree.rs Tree 对象 +│ │ ├── commit.rs Commit 对象 +│ │ └── tag.rs Tag 对象 (feature-gated) +│ ├── config/mod.rs 配置 (环境变量 > 文件 > 默认值) +│ └── utils/ +│ └── error.rs 错误类型 (AgitError) +├── agit-ai/ (lib) +│ └── src/lib.rs LlmConfig、chat_completion、generate_commit_message +└── agit-cli/ (bin → agit) + ├── Cargo.toml 依赖:agit-core, agit-ai + ├── src/ + │ ├── main.rs 入口点 + cat-file dispatch + │ ├── cli/mod.rs clap 命令定义 (29 个子命令) + │ ├── commands/ 命令实现 (每个命令一个文件) + │ ├── ai/mod.rs AI 模式标志 + DANGEROUS_COMMANDS 列表 + │ └── output/mod.rs JSON/YAML/颜色 模式标志 + 输出格式化 + └── tests/ (集成测试) ``` ## 核心模块详解 @@ -184,15 +200,26 @@ pub enum AgitError { ## 技术栈 -| 依赖 | 用途 | -|------|------| -| sha1 0.10 | SHA-1 哈希 | -| flate2 1 | zlib 压缩 | -| clap 4 | CLI 解析 | -| serde 1 + serde_json + serde_yaml | 结构化输出 | -| anyhow 1 | 错误处理 | -| url 2 | URL 解析 | -| native-tls 0.2 | TLS/HTTPS | +### Crate 分层 + +``` +agit-cli (bin) → agit-ai (lib) AI 功能 + → agit-core (lib) Git 核心逻辑 +agit-ai (lib) → reqwest HTTP 客户端 (LLM API) +agit-core (lib) → (pure Rust, no external Git dep) +``` + +| 依赖 | 用途 | 所属 | +|------|------|------| +| sha1 0.10 | SHA-1 哈希 | agit-core | +| flate2 1 | zlib 压缩 | agit-core | +| clap 4 | CLI 解析 | agit-cli | +| serde 1 + serde_json + serde_yaml | 结构化输出 | agit-cli | +| anyhow 1 | 错误处理 | agit-core / agit-cli | +| url 2 | URL 解析 | agit-core | +| native-tls 0.2 | TLS/HTTPS | agit-core | +| reqwest 0.11 | HTTP 客户端 | agit-ai | +| tokio 1 | 异步运行时 | agit-ai | ## 实现阶段 @@ -201,7 +228,8 @@ pub enum AgitError { | v0.1.0 | Phase 1-2: 项目骨架 + 核心对象 | ✅ | | v0.2.0 | Phase 3-4: 本地命令 + AI 模式 | ✅ | | v0.3.0 | Phase 5: 网络功能 | ✅ | -| v0.4.1 | Tag + 配置文件 + 集成测试 + 分支切换清理 | ✅ 当前 | +| v0.4.1 | Tag + 配置文件 + 集成测试 + 分支切换清理 | ✅ | +| v0.14.0 | Workspace 拆分 (agit-core/agit-ai/agit-cli) + AI 提交信息 + 29 子命令 | ✅ 当前 | ## 参考资料 From e905d054b9b8a3c263e9cafaae348163cd36ac1f Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Mon, 22 Jun 2026 09:56:54 +0800 Subject: [PATCH 7/9] @ chore: bump version to 0.14.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workspace 拆分完成,所有三个 crate 版本更新至 0.14.0。 Co-Authored-By: Claude @ --- agit-ai/Cargo.toml | 2 +- agit-cli/Cargo.toml | 2 +- agit-core/Cargo.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agit-ai/Cargo.toml b/agit-ai/Cargo.toml index 056b8d4..dd2c475 100644 --- a/agit-ai/Cargo.toml +++ b/agit-ai/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "agit-ai" -version = "0.13.1" +version = "0.14.0" edition = "2021" description = "AI-powered commit message generation for agit" license = "Apache-2.0" diff --git a/agit-cli/Cargo.toml b/agit-cli/Cargo.toml index 2755c62..ec5fcd9 100644 --- a/agit-cli/Cargo.toml +++ b/agit-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "agit-cli" -version = "0.13.1" +version = "0.14.0" edition = "2021" description = "AI-native Git tool — CLI binary" license = "Apache-2.0" diff --git a/agit-core/Cargo.toml b/agit-core/Cargo.toml index 55931e2..f803eb2 100644 --- a/agit-core/Cargo.toml +++ b/agit-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "agit-core" -version = "0.13.1" +version = "0.14.0" edition = "2021" description = "Pure-Rust Git core library — objects, refs, storage, protocol" license = "Apache-2.0" From 3513123ab62048ec792c88d45f959126e1ff1e2c Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Sat, 27 Jun 2026 13:23:55 +0800 Subject: [PATCH 8/9] @ fix(ci): update smoke test paths for workspace structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tests/smoke/ → agit-cli/tests/smoke/ 适配 workspace 拆分后的新路径。 Co-Authored-By: Claude @ --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0560b06..399c52c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: run: cargo build --release - name: Run smoke tests run: | - chmod +x tests/smoke/linux_smoke.sh - AGIT_BIN="${{ github.workspace }}/target/release/agit" tests/smoke/linux_smoke.sh + chmod +x agit-cli/tests/smoke/linux_smoke.sh + AGIT_BIN="${{ github.workspace }}/target/release/agit" agit-cli/tests/smoke/linux_smoke.sh smoke-windows: name: Smoke Tests (Windows) @@ -109,7 +109,7 @@ jobs: shell: pwsh run: | $env:AGIT_BIN = "${{ github.workspace }}\target\release\agit.exe" - .\tests\smoke\windows_smoke.ps1 + .\agit-cli\tests\smoke\windows_smoke.ps1 # ── Release 构建 ── From b383fef12786a96eef4ef9e5db2ba371a1f0b840 Mon Sep 17 00:00:00 2001 From: Ink-dark Date: Sat, 27 Jun 2026 13:43:47 +0800 Subject: [PATCH 9/9] =?UTF-8?q?@=20fix(security):=20bump=20quinn-proto=200?= =?UTF-8?q?.11.14=20=E2=86=92=200.11.15=20for=20RUSTSEC-2026-0185?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复远程内存耗尽漏洞 (CVSS 7.5)。 Co-Authored-By: Claude @ --- Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e8e94df..053edca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "agit-ai" -version = "0.13.1" +version = "0.14.0" dependencies = [ "agit-core", "reqwest", @@ -19,7 +19,7 @@ dependencies = [ [[package]] name = "agit-cli" -version = "0.13.1" +version = "0.14.0" dependencies = [ "agit-ai", "agit-core", @@ -32,7 +32,7 @@ dependencies = [ [[package]] name = "agit-core" -version = "0.13.1" +version = "0.14.0" dependencies = [ "anyhow", "flate2", @@ -947,9 +947,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "bytes", "getrandom 0.3.4",