From 324a179e5b62d489dc763393b52408c99b602a38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2026 23:48:31 +0000 Subject: [PATCH 1/7] build(deps): bump the cargo group across 1 directory with 29 updates Bumps the cargo group with 29 updates in the / directory: | Package | From | To | | --- | --- | --- | | [serde](https://github.com/serde-rs/serde) | `1.0.228` | `1.0.229` | | [serde_json](https://github.com/serde-rs/json) | `1.0.150` | `1.0.151` | | [toml](https://github.com/toml-rs/toml) | `0.8.23` | `1.1.3+spec-1.1.0` | | [anyhow](https://github.com/dtolnay/anyhow) | `1.0.103` | `1.0.104` | | [thiserror](https://github.com/dtolnay/thiserror) | `1.0.69` | `2.0.18` | | [sha2](https://github.com/RustCrypto/hashes) | `0.10.9` | `0.11.0` | | [globset](https://github.com/BurntSushi/ripgrep) | `0.4.18` | `0.4.20` | | [ignore](https://github.com/BurntSushi/ripgrep) | `0.4.27` | `0.4.33` | | [time](https://github.com/time-rs/time) | `0.3.53` | `0.3.55` | | [rusqlite](https://github.com/rusqlite/rusqlite) | `0.31.0` | `0.40.2` | | [tree-sitter](https://github.com/tree-sitter/tree-sitter) | `0.26.10` | `0.27.0` | | [notify](https://github.com/notify-rs/notify) | `6.1.1` | `8.2.0` | | [interprocess](https://github.com/kotauskas/interprocess) | `2.4.2` | `2.4.4` | | [rustix](https://github.com/bytecodealliance/rustix) | `0.38.44` | `1.1.4` | | [clap](https://github.com/clap-rs/clap) | `4.6.1` | `4.6.7` | | [clap_complete](https://github.com/clap-rs/clap) | `4.6.7` | `4.6.11` | | [jsonc-parser](https://github.com/dprint/jsonc-parser) | `0.26.3` | `0.34.0` | | [criterion](https://github.com/criterion-rs/criterion.rs) | `0.7.0` | `0.8.2` | | [rstest](https://github.com/la10736/rstest) | `0.23.0` | `0.27.0` | | [regex](https://github.com/rust-lang/regex) | `1.12.4` | `1.13.1` | | [tree-sitter-arkts](https://github.com/harmony-contrib/tree-sitter-arkts) | `0.2.0` | `0.3.0` | | [tree-sitter-cfml](https://github.com/cfmleditor/tree-sitter-cfml) | `0.26.30` | `0.26.42` | | [tree-sitter-erlang](https://github.com/WhatsApp/tree-sitter-erlang) | `0.19.0` | `0.20.0` | | [rmcp](https://github.com/modelcontextprotocol/rust-sdk) | `3.0.1` | `3.5.0` | | [tokio](https://github.com/tokio-rs/tokio) | `1.52.3` | `1.53.1` | | [tokio-util](https://github.com/tokio-rs/tokio) | `0.7.18` | `0.7.19` | | [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.28` | `0.13.4` | | [windows-sys](https://github.com/microsoft/windows-rs) | `0.52.0` | `0.61.2` | | [libc](https://github.com/rust-lang/libc) | `0.2.186` | `0.2.189` | Updates `serde` from 1.0.228 to 1.0.229 - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.228...v1.0.229) Updates `serde_json` from 1.0.150 to 1.0.151 - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](https://github.com/serde-rs/json/compare/v1.0.150...v1.0.151) Updates `toml` from 0.8.23 to 1.1.3+spec-1.1.0 - [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.23...toml-v1.1.3) Updates `anyhow` from 1.0.103 to 1.0.104 - [Release notes](https://github.com/dtolnay/anyhow/releases) - [Commits](https://github.com/dtolnay/anyhow/compare/1.0.103...1.0.104) Updates `thiserror` from 1.0.69 to 2.0.18 - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.69...2.0.18) Updates `sha2` from 0.10.9 to 0.11.0 - [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.10.9...sha2-v0.11.0) Updates `globset` from 0.4.18 to 0.4.20 - [Release notes](https://github.com/BurntSushi/ripgrep/releases) - [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md) - [Commits](https://github.com/BurntSushi/ripgrep/compare/globset-0.4.18...globset-0.4.20) Updates `ignore` from 0.4.27 to 0.4.33 - [Release notes](https://github.com/BurntSushi/ripgrep/releases) - [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md) - [Commits](https://github.com/BurntSushi/ripgrep/compare/ignore-0.4.27...ignore-0.4.33) Updates `time` from 0.3.53 to 0.3.55 - [Release notes](https://github.com/time-rs/time/releases) - [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md) - [Commits](https://github.com/time-rs/time/compare/v0.3.53...v0.3.55) Updates `rusqlite` from 0.31.0 to 0.40.2 - [Release notes](https://github.com/rusqlite/rusqlite/releases) - [Changelog](https://github.com/rusqlite/rusqlite/blob/master/Changelog.md) - [Commits](https://github.com/rusqlite/rusqlite/compare/v0.31.0...v0.40.2) Updates `tree-sitter` from 0.26.10 to 0.27.0 - [Release notes](https://github.com/tree-sitter/tree-sitter/releases) - [Commits](https://github.com/tree-sitter/tree-sitter/compare/v0.26.10...v0.27.0) Updates `notify` from 6.1.1 to 8.2.0 - [Release notes](https://github.com/notify-rs/notify/releases) - [Changelog](https://github.com/notify-rs/notify/blob/notify-8.2.0/CHANGELOG.md) - [Commits](https://github.com/notify-rs/notify/compare/notify-6.1.1...notify-8.2.0) Updates `interprocess` from 2.4.2 to 2.4.4 - [Release notes](https://github.com/kotauskas/interprocess/releases) - [Commits](https://github.com/kotauskas/interprocess/compare/2.4.2...2.4.4) Updates `rustix` from 0.38.44 to 1.1.4 - [Release notes](https://github.com/bytecodealliance/rustix/releases) - [Changelog](https://github.com/bytecodealliance/rustix/blob/main/CHANGES.md) - [Commits](https://github.com/bytecodealliance/rustix/compare/v0.38.44...v1.1.4) Updates `clap` from 4.6.1 to 4.6.7 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/main/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.1...clap_complete-v4.6.7) Updates `clap_complete` from 4.6.7 to 4.6.11 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/main/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.7...clap_complete-v4.6.11) Updates `jsonc-parser` from 0.26.3 to 0.34.0 - [Commits](https://github.com/dprint/jsonc-parser/compare/0.26.3...0.34.0) Updates `criterion` from 0.7.0 to 0.8.2 - [Release notes](https://github.com/criterion-rs/criterion.rs/releases) - [Changelog](https://github.com/criterion-rs/criterion.rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/criterion-rs/criterion.rs/compare/criterion-plot-v0.7.0...criterion-v0.8.2) Updates `rstest` from 0.23.0 to 0.27.0 - [Release notes](https://github.com/la10736/rstest/releases) - [Changelog](https://github.com/la10736/rstest/blob/master/CHANGELOG.md) - [Commits](https://github.com/la10736/rstest/compare/v0.23.0...v0.27.0) Updates `regex` from 1.12.4 to 1.13.1 - [Release notes](https://github.com/rust-lang/regex/releases) - [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/regex/compare/1.12.4...1.13.1) Updates `tree-sitter-arkts` from 0.2.0 to 0.3.0 - [Commits](https://github.com/harmony-contrib/tree-sitter-arkts/commits/v0.3.0) Updates `tree-sitter-cfml` from 0.26.30 to 0.26.42 - [Release notes](https://github.com/cfmleditor/tree-sitter-cfml/releases) - [Changelog](https://github.com/cfmleditor/tree-sitter-cfml/blob/master/CHANGELOG.md) - [Commits](https://github.com/cfmleditor/tree-sitter-cfml/compare/v0.26.30...v0.26.42) Updates `tree-sitter-erlang` from 0.19.0 to 0.20.0 - [Release notes](https://github.com/WhatsApp/tree-sitter-erlang/releases) - [Changelog](https://github.com/WhatsApp/tree-sitter-erlang/blob/main/CHANGELOG.md) - [Commits](https://github.com/WhatsApp/tree-sitter-erlang/compare/0.19...0.20) Updates `rmcp` from 3.0.1 to 3.5.0 - [Release notes](https://github.com/modelcontextprotocol/rust-sdk/releases) - [Changelog](https://github.com/modelcontextprotocol/rust-sdk/blob/main/release-plz.toml) - [Commits](https://github.com/modelcontextprotocol/rust-sdk/compare/rmcp-v3.0.1...rmcp-v3.5.0) Updates `tokio` from 1.52.3 to 1.53.1 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.3...tokio-1.53.1) Updates `tokio-util` from 0.7.18 to 0.7.19 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-util-0.7.18...tokio-util-0.7.19) Updates `reqwest` from 0.12.28 to 0.13.4 - [Release notes](https://github.com/seanmonstar/reqwest/releases) - [Changelog](https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md) - [Commits](https://github.com/seanmonstar/reqwest/compare/v0.12.28...v0.13.4) Updates `windows-sys` from 0.52.0 to 0.61.2 - [Release notes](https://github.com/microsoft/windows-rs/releases) - [Commits](https://github.com/microsoft/windows-rs/commits) Updates `libc` from 0.2.186 to 0.2.189 - [Release notes](https://github.com/rust-lang/libc/releases) - [Changelog](https://github.com/rust-lang/libc/blob/0.2.189/CHANGELOG.md) - [Commits](https://github.com/rust-lang/libc/compare/0.2.186...0.2.189) --- updated-dependencies: - dependency-name: anyhow dependency-version: 1.0.104 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: clap dependency-version: 4.6.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: clap_complete dependency-version: 4.6.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: criterion dependency-version: 0.8.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: globset dependency-version: 0.4.20 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: ignore dependency-version: 0.4.33 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: interprocess dependency-version: 2.4.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: jsonc-parser dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: libc dependency-version: 0.2.189 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: notify dependency-version: 8.2.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: cargo - dependency-name: regex dependency-version: 1.13.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: reqwest dependency-version: 0.13.4 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: rmcp dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: rstest dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: rusqlite dependency-version: 0.40.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: rustix dependency-version: 1.1.4 dependency-type: direct:production update-type: version-update:semver-major dependency-group: cargo - dependency-name: serde dependency-version: 1.0.229 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: serde_json dependency-version: 1.0.151 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: sha2 dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: thiserror dependency-version: 2.0.18 dependency-type: direct:production update-type: version-update:semver-major dependency-group: cargo - dependency-name: time dependency-version: 0.3.55 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: tokio dependency-version: 1.53.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: tokio-util dependency-version: 0.7.19 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: toml dependency-version: 1.1.3+spec-1.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: cargo - dependency-name: tree-sitter dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: tree-sitter-arkts dependency-version: 0.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: tree-sitter-cfml dependency-version: 0.26.42 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: tree-sitter-erlang dependency-version: 0.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo - dependency-name: windows-sys dependency-version: 0.61.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo ... Signed-off-by: dependabot[bot] --- Cargo.lock | 715 ++++++++++++++-------------- Cargo.toml | 20 +- crates/codegraph-daemon/Cargo.toml | 2 +- crates/codegraph-extract/Cargo.toml | 4 +- crates/codegraph-mcp/Cargo.toml | 2 +- crates/codegraph-watch/Cargo.toml | 2 +- 6 files changed, 363 insertions(+), 382 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e4b7fb7c..39afa1a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,24 +9,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "ahash" -version = "0.8.12" +name = "aho-corasick" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", + "memchr", ] [[package]] -name = "aho-corasick" -version = "1.1.4" +name = "alloca" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4" dependencies = [ - "memchr", + "cc", ] [[package]] @@ -96,9 +93,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -146,7 +143,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -248,12 +245,6 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.13.0" @@ -269,6 +260,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "bstr" version = "1.12.3" @@ -380,9 +380,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -390,9 +390,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -402,23 +402,23 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.6.7" +version = "4.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b397918185f0161ff3d6fcaa9e4bfc09b8367caf6e1d4a2848e5477ed027b" +checksum = "037e2a1a92236d0aff7e845093f64661d6df4c02c9fcc61a60e9e1d736fa392f" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -459,8 +459,8 @@ dependencies = [ "globset", "serde", "serde_json", - "sha2", - "thiserror 1.0.69", + "sha2 0.11.0", + "thiserror", "time", "toml", "tracing", @@ -479,14 +479,14 @@ dependencies = [ "codegraph-watch", "interprocess", "notify", - "rustix 0.38.44", + "rustix", "serde", "serde_json", - "sha2", + "sha2 0.11.0", "time", "tokio", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -568,7 +568,7 @@ dependencies = [ "codegraph-store", "codegraph-watch", "regex", - "reqwest 0.12.28", + "reqwest", "rmcp", "serde", "serde_json", @@ -638,7 +638,7 @@ dependencies = [ "rusqlite", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror", "tracing", ] @@ -656,7 +656,7 @@ dependencies = [ "rusqlite", "serde", "serde_json", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -693,6 +693,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "cookie" version = "0.18.1" @@ -767,10 +773,11 @@ dependencies = [ [[package]] name = "criterion" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" dependencies = [ + "alloca", "anes", "cast", "ciborium", @@ -779,6 +786,7 @@ dependencies = [ "itertools", "num-traits", "oorandom", + "page_size", "plotters", "rayon", "regex", @@ -790,9 +798,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.6.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" dependencies = [ "cast", "itertools", @@ -848,6 +856,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -857,7 +874,7 @@ dependencies = [ "cfg-if", "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -872,14 +889,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] name = "darling" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" dependencies = [ "darling_core", "darling_macro", @@ -887,26 +904,26 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" dependencies = [ "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 3.0.6", ] [[package]] name = "darling_macro" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -915,7 +932,7 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "const-oid", + "const-oid 0.9.6", "zeroize", ] @@ -933,7 +950,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -948,8 +965,19 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "const-oid 0.10.2", + "crypto-common 0.2.2", ] [[package]] @@ -960,7 +988,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1009,7 +1037,7 @@ dependencies = [ "curve25519-dalek", "ed25519", "serde", - "sha2", + "sha2 0.10.9", "signature", "subtle", "zeroize", @@ -1118,6 +1146,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1198,7 +1232,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1293,9 +1327,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ "aho-corasick", "bstr", @@ -1310,7 +1344,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.13.0", + "bitflags", "ignore", "walkdir", ] @@ -1347,11 +1381,11 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "ahash", + "foldhash", ] [[package]] @@ -1359,14 +1393,17 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] [[package]] name = "hashlink" -version = "0.9.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "a596f1b20ed2cc5ecac41a164aaebc7258057060f06c0cf7a2ba3991ee7990fb" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.17.1", ] [[package]] @@ -1420,6 +1457,15 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" version = "1.10.1" @@ -1615,9 +1661,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.27" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe112b004901c62c2faa11f4f75e9864e0cc5af8da71c9115d184a3aa888749f" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" dependencies = [ "crossbeam-deque", "globset", @@ -1637,6 +1683,8 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", + "serde", + "serde_core", ] [[package]] @@ -1655,29 +1703,29 @@ dependencies = [ [[package]] name = "inotify" -version = "0.9.6" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592" dependencies = [ - "bitflags 1.3.2", + "bitflags", "inotify-sys", "libc", ] [[package]] name = "inotify-sys" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd" +checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" dependencies = [ "libc", ] [[package]] name = "interprocess" -version = "2.4.2" +version = "2.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069323743400cb7ab06a8fe5c1ed911d36b6919ec531661d034c89083629595b" +checksum = "6cb02ffbf25e8ef0f4a95bff054eef75f6d1bf16919474cf2caa63b21997478a" dependencies = [ "doctest-file", "futures-core", @@ -1727,7 +1775,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror", "walkdir", "windows-link", ] @@ -1742,7 +1790,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.118", ] [[package]] @@ -1761,7 +1809,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1787,11 +1835,11 @@ dependencies = [ [[package]] name = "jsonc-parser" -version = "0.26.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d80e6d70e7911a29f3cf3f44f452df85d06f73572b494ca99a2cad3fcf8f4" +checksum = "0ecded084f9b9a718d39668a42657c32253663d1f6afb3fbb9134f0305f73f48" dependencies = [ - "serde_json", + "serde", ] [[package]] @@ -1810,7 +1858,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.13.0", + "bitflags", "libc", ] @@ -1822,27 +1870,21 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libsqlite3-sys" -version = "0.28.0" +version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" +checksum = "f1d20bef17f513b9b3004532233187769cd072d790971f4e4da0e346eb6401e8" dependencies = [ "cc", "pkg-config", "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -1910,18 +1952,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "mio" version = "1.2.1" @@ -1929,6 +1959,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", + "log", "wasi", "windows-sys 0.61.2", ] @@ -1941,21 +1972,29 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "notify" -version = "6.1.1" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.13.0", - "crossbeam-channel", - "filetime", + "bitflags", "fsevent-sys", "inotify", "kqueue", "libc", "log", - "mio 0.8.11", + "mio", + "notify-types", "walkdir", - "windows-sys 0.48.0", + "windows-sys 0.60.2", +] + +[[package]] +name = "notify-types" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" +dependencies = [ + "bitflags", ] [[package]] @@ -2015,6 +2054,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "pastey" version = "0.2.3" @@ -2134,7 +2183,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit", ] [[package]] @@ -2169,7 +2218,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror", "tokio", "tracing", "web-time", @@ -2192,7 +2241,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror", "tinyvec", "tracing", "web-time", @@ -2311,14 +2360,14 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] name = "regex" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2328,9 +2377,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -2349,38 +2398,6 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "reqwest" version = "0.13.4" @@ -2437,9 +2454,9 @@ dependencies = [ [[package]] name = "rmcp" -version = "3.0.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3797d226787327b35b0b6f9e878fe55f3af2bb4daf916c0411079885454042f0" +checksum = "fae7019994ae0fe4ada40b732f798f3ff26f0f04facb1477f1bf37eb4f18a2d3" dependencies = [ "async-trait", "base64 0.23.0", @@ -2449,6 +2466,7 @@ dependencies = [ "http", "http-body", "http-body-util", + "indexmap", "pastey", "pin-project-lite", "rand", @@ -2457,7 +2475,7 @@ dependencies = [ "serde", "serde_json", "sse-stream", - "thiserror 2.0.18", + "thiserror", "tokio", "tokio-stream", "tokio-util", @@ -2468,34 +2486,43 @@ dependencies = [ [[package]] name = "rmcp-macros" -version = "3.0.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f5bc0c6851a20cd627ef4b90defb79f39a261c467de52af5d38000d7979c52" +checksum = "c7e66877136e969d5a2d561ee5841b17717a0619aebd64abb47a2a2f46e34683" dependencies = [ "darling", "proc-macro2", "quote", "serde_json", - "syn", + "syn 3.0.6", +] + +[[package]] +name = "rsqlite-vfs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" +dependencies = [ + "hashbrown 0.16.1", + "thiserror", ] [[package]] name = "rstest" -version = "0.23.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2c585be59b6b5dd66a9d2084aa1d8bd52fbdb806eafdeffb52791147862035" +checksum = "948203e6d13b83e51a90d7cf236dd58a0065f23f4b902f00f306e7eb2bd09b9c" dependencies = [ - "futures", "futures-timer", + "futures-util", "rstest_macros", - "rustc_version", ] [[package]] name = "rstest_macros" -version = "0.23.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825ea780781b15345a146be27eaefb05085e337e869bff01b4306a4fd4a9ad5a" +checksum = "a8d92eaf7b6e51e12471d71ddc72608e7151573de44099aacfbb1128177c0da4" dependencies = [ "cfg-if", "glob", @@ -2505,22 +2532,23 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn", + "syn 2.0.118", "unicode-ident", ] [[package]] name = "rusqlite" -version = "0.31.0" +version = "0.40.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" +checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3" dependencies = [ - "bitflags 2.13.0", + "bitflags", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", "smallvec", + "sqlite-wasm-rs", ] [[package]] @@ -2538,29 +2566,16 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.13.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys", "windows-sys 0.61.2", ] @@ -2647,12 +2662,6 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - [[package]] name = "same-file" version = "1.0.6" @@ -2694,7 +2703,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 2.0.118", ] [[package]] @@ -2703,7 +2712,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -2744,7 +2753,7 @@ dependencies = [ "log", "quick-xml", "regex", - "reqwest 0.13.4", + "reqwest", "self-replace", "semver", "serde", @@ -2765,9 +2774,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2775,22 +2784,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -2801,14 +2810,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "indexmap", "itoa", @@ -2820,23 +2829,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", + "serde_core", ] [[package]] @@ -2853,7 +2850,18 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures 0.2.17", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -2877,7 +2885,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -2946,6 +2954,18 @@ dependencies = [ "der", ] +[[package]] +name = "sqlite-wasm-rs" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75" +dependencies = [ + "cc", + "js-sys", + "rsqlite-vfs", + "wasm-bindgen", +] + [[package]] name = "sse-stream" version = "0.2.5" @@ -3000,6 +3020,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "sync_wrapper" version = "1.0.2" @@ -3017,7 +3048,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3040,7 +3071,7 @@ dependencies = [ "fastrand", "getrandom 0.4.3", "once_cell", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] @@ -3050,33 +3081,13 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "thiserror-impl", ] [[package]] @@ -3087,7 +3098,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3101,9 +3112,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.53" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "libc", @@ -3123,9 +3134,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -3168,13 +3179,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", - "mio 1.2.1", + "mio", "pin-project-lite", "socket2", "tokio-macros", @@ -3189,7 +3200,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3215,36 +3226,31 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] [[package]] name = "toml" -version = "0.8.23" +version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ - "serde", + "indexmap", + "serde_core", "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] @@ -3256,20 +3262,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow 0.7.15", -] - [[package]] name = "toml_edit" version = "0.25.12+spec-1.1.0" @@ -3277,25 +3269,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", - "winnow 1.0.3", + "winnow", ] [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_writer" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -3318,7 +3310,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags", "bytes", "futures-util", "http", @@ -3361,7 +3353,7 @@ checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" dependencies = [ "crossbeam-channel", "symlink", - "thiserror 2.0.18", + "thiserror", "time", "tracing-subscriber", ] @@ -3374,7 +3366,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3432,13 +3424,12 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.26.10" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c343ed63e3f5c64d1acdecb5d2c13d4e169cb5fde0052106ebaa6c6f27f9e55" +checksum = "2038684e0058edba0d17302619f62eabce4a8e11c6ac59506996a8d79848851d" dependencies = [ "cc", "regex", - "regex-syntax", "serde_json", "streaming-iterator", "tree-sitter-language", @@ -3446,9 +3437,9 @@ dependencies = [ [[package]] name = "tree-sitter-arkts" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a57ea8f49745a1c7687ed0625540aa0b189977ece05954b266d5869214b904cb" +checksum = "a3f34bb5f7037c2e13d4d2e42d6828f3cc0899666e77d4c6a0594348900fd629" dependencies = [ "cc", "tree-sitter-language", @@ -3476,9 +3467,9 @@ dependencies = [ [[package]] name = "tree-sitter-cfml" -version = "0.26.30" +version = "0.26.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73c959e3728a4da88bff330340990ee2dbd9864901422760f7abfc4c93be6a95" +checksum = "cf1c57e5c21ce03a08338c67441b40125227066634297ea0c2c8621372541e95" dependencies = [ "cc", "tree-sitter-language", @@ -3516,9 +3507,9 @@ dependencies = [ [[package]] name = "tree-sitter-erlang" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5c42fa011acaeb36d0be0f3ebc87d7a4009cd92a6969cbc63320bcfd989df69" +checksum = "3107efc581d335488dc38d2f51ca8b7a6a98e36f07f95a8e963f031edda6f568" dependencies = [ "cc", "tree-sitter-language", @@ -3606,9 +3597,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" +checksum = "ca0d1bf6fdd806e43ae5198f82f527056d359def39e54e67a0f478ac09dac081" [[package]] name = "tree-sitter-lua" @@ -4009,7 +4000,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.118", "wasm-bindgen-shared", ] @@ -4118,7 +4109,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4129,7 +4120,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4156,15 +4147,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -4176,11 +4158,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.52.6", + "windows-targets 0.53.5", ] [[package]] @@ -4192,21 +4174,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -4216,7 +4183,7 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "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", @@ -4224,10 +4191,21 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" +name = "windows-targets" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "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 = "windows_aarch64_gnullvm" @@ -4236,10 +4214,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +name = "windows_aarch64_gnullvm" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -4248,10 +4226,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] -name = "windows_i686_gnu" -version = "0.48.5" +name = "windows_aarch64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -4259,6 +4237,12 @@ 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" @@ -4266,10 +4250,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] -name = "windows_i686_msvc" -version = "0.48.5" +name = "windows_i686_gnullvm" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -4278,10 +4262,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +name = "windows_i686_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -4290,10 +4274,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +name = "windows_x86_64_gnu" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -4302,10 +4286,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "windows_x86_64_gnullvm" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -4314,13 +4298,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winnow" -version = "0.7.15" +name = "windows_x86_64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -4350,7 +4331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.4", + "rustix", ] [[package]] @@ -4372,7 +4353,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "synstructure", ] @@ -4393,7 +4374,7 @@ checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4413,7 +4394,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "synstructure", ] @@ -4453,7 +4434,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4479,7 +4460,7 @@ checksum = "dba6063ff82cdbd9a765add16d369abe81e520f836054e997c2db217ceca40c0" dependencies = [ "base64 0.22.1", "ed25519-dalek", - "thiserror 2.0.18", + "thiserror", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b49e86be..5929f9f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,12 +29,12 @@ categories = ["development-tools", "command-line-utilities", "parsing"] # Config (rust-base-convention) serde = { version = "1", features = ["derive"] } serde_json = "1" -toml = "0.8" +toml = "1.1" anyhow = "1" -thiserror = "1" +thiserror = "2" # Utilities -sha2 = "0.10" +sha2 = "0.11" sha1_smol = "1" rayon = "1.8" globset = "0.4" @@ -47,19 +47,19 @@ tracing-appender = "0.2" time = { version = "0.3", features = ["macros", "local-offset", "formatting"] } # Database -rusqlite = { version = "0.31", features = ["bundled"] } +rusqlite = { version = "0.40", features = ["bundled"] } # Tree-sitter -tree-sitter = "0.26" +tree-sitter = "0.27" streaming-iterator = "0.1" # File watching -notify = "6" +notify = "8" # Cross-platform IPC (daemon local socket / named pipe). The `tokio` feature # enables the async local-socket Listener/Stream used by the daemon accept loop. interprocess = { version = "2.4", features = ["tokio"] } -rustix = { version = "0.38", features = ["process"] } +rustix = { version = "1.1", features = ["process"] } # CLI clap = { version = "4.5", features = ["derive"] } @@ -69,7 +69,7 @@ clap_complete = "4.5" indicatif = { version = "0.18", features = ["rayon"] } # JSONC config editing (preserve comments + key order on agent config writes) -jsonc-parser = { version = "0.26", features = ["cst", "serde"] } +jsonc-parser = { version = "0.34", features = ["cst", "serde"] } # Self-update from GitHub Releases (mise-style `codegraph self-update`) # self_update 0.43+ moved to quick-xml ^0.38 (fixes RUSTSEC-2026-0194/0195) and @@ -80,10 +80,10 @@ jsonc-parser = { version = "0.26", features = ["cst", "serde"] } self_update = { version = "0.44", default-features = false, features = ["reqwest", "rustls", "archive-tar", "archive-zip", "compression-flate2", "compression-zip-deflate"] } # Benchmarking -criterion = "0.7" +criterion = "0.8" # Testing (dev-dependencies; not shipped in the binary) -rstest = "0.23" +rstest = "0.27" assert_fs = "1" assert_cmd = "2" predicates = "3" diff --git a/crates/codegraph-daemon/Cargo.toml b/crates/codegraph-daemon/Cargo.toml index dfcbf407..26373848 100644 --- a/crates/codegraph-daemon/Cargo.toml +++ b/crates/codegraph-daemon/Cargo.toml @@ -42,7 +42,7 @@ rustix = { workspace = true, features = ["net"] } # Windows process introspection (OpenProcess + GetExitCodeProcess liveness) [target.'cfg(windows)'.dependencies] -windows-sys = { version = "0.52", features = [ +windows-sys = { version = "0.61", features = [ "Win32_Foundation", "Win32_System_Threading", ] } diff --git a/crates/codegraph-extract/Cargo.toml b/crates/codegraph-extract/Cargo.toml index bfe9a875..10b46f92 100644 --- a/crates/codegraph-extract/Cargo.toml +++ b/crates/codegraph-extract/Cargo.toml @@ -25,14 +25,14 @@ ignore = { workspace = true } serde_json = { workspace = true } tracing = { workspace = true } -tree-sitter-arkts = "0.2.0" +tree-sitter-arkts = "0.3.0" tree-sitter-c = "0.24.2" tree-sitter-c-sharp = "0.23.5" tree-sitter-cfml = "0.26.30" tree-sitter-cpp = "0.23.4" tree-sitter-css = "0.25.0" tree-sitter-dart = "0.2.0" -tree-sitter-erlang = "0.19.0" +tree-sitter-erlang = "0.20.0" tree-sitter-go = "0.25.0" tree-sitter-gdscript = "6.1.0" tree-sitter-hcl = "1.1.0" diff --git a/crates/codegraph-mcp/Cargo.toml b/crates/codegraph-mcp/Cargo.toml index be8548ea..232b1fb7 100644 --- a/crates/codegraph-mcp/Cargo.toml +++ b/crates/codegraph-mcp/Cargo.toml @@ -65,7 +65,7 @@ codegraph-extract = { path = "../codegraph-extract" } rmcp = { version = "3.0.1", features = ["server", "client", "transport-io", "transport-streamable-http-server"] } tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-util", "net", "sync", "time"] } # reqwest: dev-only HTTP client for the streamable-HTTP integration test. -reqwest = { version = "0.12", default-features = false, features = ["json"] } +reqwest = { version = "0.13", default-features = false, features = ["json"] } # tower: dev-only, provides `ServiceExt::oneshot` to unit-test the debug # middleware's transparent passthrough without spawning a server. tower = { version = "0.5", features = ["util"] } diff --git a/crates/codegraph-watch/Cargo.toml b/crates/codegraph-watch/Cargo.toml index 02351cc9..938c1a74 100644 --- a/crates/codegraph-watch/Cargo.toml +++ b/crates/codegraph-watch/Cargo.toml @@ -35,7 +35,7 @@ codegraph-store = { path = "../codegraph-store" } codegraph-watch = { path = ".", features = ["test-hooks"] } [target.'cfg(windows)'.dev-dependencies] -windows-sys = { version = "0.52", features = [ +windows-sys = { version = "0.61", features = [ "Win32_Foundation", "Win32_System_Threading", ] } From ffbf42ae1fa9fac71762857488cff6f8cbf131cc Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:13:05 +0800 Subject: [PATCH 2/7] build(deps): adapt to the API changes in the cargo update - tree-sitter 0.27 makes QueryMatch.captures private: the Vue extractor uses captures(). - Node::child_count() now returns u32, so 27 `as u32` casts go. - rusqlite 0.40 has no ToSql for u64: journal_size_limit passes an i64, in range by construction. - rustix 1.x: Signal::TERM and Shutdown::Both. - rmcp 3.5 renames ServerInfo and ClientInfo to ServerConfig and ClientConfig; they are the same types. - windows-sys 0.59+ makes HANDLE a pointer: a failed OpenProcess is is_null(). --- crates/codegraph-daemon/src/process.rs | 6 +++--- crates/codegraph-daemon/src/session.rs | 2 +- crates/codegraph-extract/src/embedded/vue.rs | 6 +++--- crates/codegraph-extract/src/lang/arkts.rs | 9 +++------ crates/codegraph-extract/src/lang/dart.rs | 6 ++---- crates/codegraph-extract/src/lang/javascript.rs | 5 +---- crates/codegraph-extract/src/lang/kotlin.rs | 6 +++--- crates/codegraph-extract/src/lang/objc.rs | 2 +- crates/codegraph-extract/src/lang/pascal.rs | 4 ++-- crates/codegraph-extract/src/lang/rust.rs | 12 +++++------- crates/codegraph-extract/src/lang/scala.rs | 6 +++--- crates/codegraph-extract/src/lang/solidity.rs | 2 +- crates/codegraph-extract/src/lang/swift.rs | 10 +++++----- crates/codegraph-extract/src/lang/typescript.rs | 9 +++------ crates/codegraph-mcp/src/rmcp_handler.rs | 8 ++++---- crates/codegraph-mcp/tests/mcp_configured_root.rs | 4 ++-- crates/codegraph-mcp/tests/rmcp_l3.rs | 4 ++-- crates/codegraph-mcp/tests/rmcp_roots.rs | 8 ++++---- crates/codegraph-mcp/tests/support/parity.rs | 8 ++++---- crates/codegraph-store/src/connection.rs | 6 ++++-- 20 files changed, 56 insertions(+), 67 deletions(-) diff --git a/crates/codegraph-daemon/src/process.rs b/crates/codegraph-daemon/src/process.rs index df5d58a7..861a99e7 100644 --- a/crates/codegraph-daemon/src/process.rs +++ b/crates/codegraph-daemon/src/process.rs @@ -91,7 +91,7 @@ pub fn terminate_pid(pid: u32) -> bool { let Some(pid) = rustix::process::Pid::from_raw(raw) else { return false; }; - rustix::process::kill_process(pid, rustix::process::Signal::Term).is_ok() + rustix::process::kill_process(pid, rustix::process::Signal::TERM).is_ok() } // Windows has no stable getppid; returning 0 makes the ppid-divergence branch @@ -120,7 +120,7 @@ pub fn is_process_alive(pid: u32) -> bool { // proves it exists (treat as alive); any other error means it is gone. unsafe { let handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid); - if handle == 0 { + if handle.is_null() { return GetLastError() == ERROR_ACCESS_DENIED; } let mut code: u32 = 0; @@ -145,7 +145,7 @@ pub fn terminate_pid(pid: u32) -> bool { // Rust-side aliasing. A null handle means the open failed (nothing to kill). unsafe { let handle = OpenProcess(PROCESS_TERMINATE, FALSE, pid); - if handle == 0 { + if handle.is_null() { return false; } let ok = TerminateProcess(handle, 1); diff --git a/crates/codegraph-daemon/src/session.rs b/crates/codegraph-daemon/src/session.rs index 00d2559e..432de282 100644 --- a/crates/codegraph-daemon/src/session.rs +++ b/crates/codegraph-daemon/src/session.rs @@ -247,7 +247,7 @@ impl SessionRegistry { // triggers). We only issue shutdown(SHUT_RDWR); no ownership is // taken and the fd is not closed here. let borrowed = unsafe { BorrowedFd::borrow_raw(fd) }; - let _ = rustix::net::shutdown(borrowed, rustix::net::Shutdown::ReadWrite); + let _ = rustix::net::shutdown(borrowed, rustix::net::Shutdown::Both); } } #[cfg(not(unix))] diff --git a/crates/codegraph-extract/src/embedded/vue.rs b/crates/codegraph-extract/src/embedded/vue.rs index 7bd7e806..d3479339 100644 --- a/crates/codegraph-extract/src/embedded/vue.rs +++ b/crates/codegraph-extract/src/embedded/vue.rs @@ -188,13 +188,13 @@ impl<'a> VueExtractor<'a> { let mut matches = cursor.matches(&query, tree.root_node(), block.content.as_bytes()); while let Some(m) = matches.next() { - for capture in m.captures { + for capture in m.captures() { let node = capture.node; let capture_name = query.capture_names()[capture.index as usize]; if capture_name == "func" { let name_node = m - .captures + .captures() .iter() .find(|c| query.capture_names()[c.index as usize] == "func.name") .unwrap() @@ -252,7 +252,7 @@ impl<'a> VueExtractor<'a> { }); } else if capture_name == "import" { let source_node = m - .captures + .captures() .iter() .find(|c| query.capture_names()[c.index as usize] == "import.source") .unwrap() diff --git a/crates/codegraph-extract/src/lang/arkts.rs b/crates/codegraph-extract/src/lang/arkts.rs index 8f61df38..ed5f97e5 100644 --- a/crates/codegraph-extract/src/lang/arkts.rs +++ b/crates/codegraph-extract/src/lang/arkts.rs @@ -147,10 +147,10 @@ impl LanguageSpec for ArkTsSpec { fn get_visibility(&self, node: Node<'_>) -> Option { for i in 0..node.child_count() { - let child = node.child(i as u32)?; + let child = node.child(i)?; if child.kind() == "accessibility_modifier" { for j in 0..child.child_count() { - let modifier = child.child(j as u32)?; + let modifier = child.child(j)?; match modifier.kind() { "public" => return Some("public".to_string()), "private" => return Some("private".to_string()), @@ -201,10 +201,7 @@ impl LanguageSpec for ArkTsSpec { } fn has_direct_child_kind(node: Node<'_>, kind: &str) -> bool { - (0..node.child_count()).any(|i| { - node.child(i as u32) - .is_some_and(|child| child.kind() == kind) - }) + (0..node.child_count()).any(|i| node.child(i).is_some_and(|child| child.kind() == kind)) } #[cfg(test)] diff --git a/crates/codegraph-extract/src/lang/dart.rs b/crates/codegraph-extract/src/lang/dart.rs index 2ba7489b..cd4c7127 100644 --- a/crates/codegraph-extract/src/lang/dart.rs +++ b/crates/codegraph-extract/src/lang/dart.rs @@ -155,15 +155,13 @@ impl LanguageSpec for DartSpec { node.next_named_sibling() .filter(|next| next.kind() == "function_body") .is_some_and(|body| { - (0..body.child_count()) - .any(|i| body.child(i as u32).is_some_and(|c| c.kind() == "async")) + (0..body.child_count()).any(|i| body.child(i).is_some_and(|c| c.kind() == "async")) }) } fn is_static(&self, node: Node<'_>, _source: &str) -> bool { node.kind() == "method_signature" - && (0..node.child_count()) - .any(|i| node.child(i as u32).is_some_and(|c| c.kind() == "static")) + && (0..node.child_count()).any(|i| node.child(i).is_some_and(|c| c.kind() == "static")) } fn resolve_name(&self, node: Node<'_>, _source: &str) -> Option { diff --git a/crates/codegraph-extract/src/lang/javascript.rs b/crates/codegraph-extract/src/lang/javascript.rs index 747a7a7f..83317fe9 100644 --- a/crates/codegraph-extract/src/lang/javascript.rs +++ b/crates/codegraph-extract/src/lang/javascript.rs @@ -176,8 +176,5 @@ pub(crate) fn resolve_class_field_body<'tree>( } pub(crate) fn has_direct_child_kind(node: Node<'_>, kind: &str) -> bool { - (0..node.child_count()).any(|i| { - node.child(i as u32) - .is_some_and(|child| child.kind() == kind) - }) + (0..node.child_count()).any(|i| node.child(i).is_some_and(|child| child.kind() == kind)) } diff --git a/crates/codegraph-extract/src/lang/kotlin.rs b/crates/codegraph-extract/src/lang/kotlin.rs index de5f25b6..3bd40a60 100644 --- a/crates/codegraph-extract/src/lang/kotlin.rs +++ b/crates/codegraph-extract/src/lang/kotlin.rs @@ -115,7 +115,7 @@ impl LanguageSpec for KotlinSpec { // 'enum' keyword under modifiers > class_modifier, so the modifiers // child is also scanned; the scan stops at the class body. for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; match child.kind() { @@ -137,7 +137,7 @@ impl LanguageSpec for KotlinSpec { // Upstream kotlin.ts:211-231: extension receiver is the user_type before '.'. let mut found_user_type = None; for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; if child.kind() == "user_type" { @@ -313,7 +313,7 @@ fn has_descendant_kind(node: Node<'_>, kind: &str) -> bool { } for idx in 0..node.child_count() { if node - .child(idx as u32) + .child(idx) .is_some_and(|child| has_descendant_kind(child, kind)) { return true; diff --git a/crates/codegraph-extract/src/lang/objc.rs b/crates/codegraph-extract/src/lang/objc.rs index 95f194c9..575a0f37 100644 --- a/crates/codegraph-extract/src/lang/objc.rs +++ b/crates/codegraph-extract/src/lang/objc.rs @@ -124,7 +124,7 @@ impl LanguageSpec for ObjCSpec { } fn is_static(&self, node: Node<'_>, _source: &str) -> bool { - (0..node.child_count()).any(|i| node.child(i as u32).is_some_and(|c| c.kind() == "+")) + (0..node.child_count()).any(|i| node.child(i).is_some_and(|c| c.kind() == "+")) } fn extract_import(&self, node: Node<'_>, source: &str) -> Option { diff --git a/crates/codegraph-extract/src/lang/pascal.rs b/crates/codegraph-extract/src/lang/pascal.rs index 69125844..772ccefa 100644 --- a/crates/codegraph-extract/src/lang/pascal.rs +++ b/crates/codegraph-extract/src/lang/pascal.rs @@ -102,7 +102,7 @@ impl LanguageSpec for PascalSpec { while let Some(parent) = current { if parent.kind() == "declSection" { for i in 0..parent.child_count() { - if let Some(child) = parent.child(i as u32) { + if let Some(child) = parent.child(i) { match child.kind() { "kPublic" | "kPublished" => return Some("public".to_string()), "kPrivate" => return Some("private".to_string()), @@ -118,7 +118,7 @@ impl LanguageSpec for PascalSpec { } fn is_static(&self, node: Node<'_>, _source: &str) -> bool { - (0..node.child_count()).any(|i| node.child(i as u32).is_some_and(|c| c.kind() == "kClass")) + (0..node.child_count()).any(|i| node.child(i).is_some_and(|c| c.kind() == "kClass")) } fn is_const(&self, node: Node<'_>) -> bool { diff --git a/crates/codegraph-extract/src/lang/rust.rs b/crates/codegraph-extract/src/lang/rust.rs index 7177cfc2..90648e80 100644 --- a/crates/codegraph-extract/src/lang/rust.rs +++ b/crates/codegraph-extract/src/lang/rust.rs @@ -144,14 +144,12 @@ impl LanguageSpec for RustSpec { fn get_visibility(&self, node: Node<'_>) -> Option { for i in 0..node.child_count() { - if let Some(child) = node.child(i as u32) { + if let Some(child) = node.child(i) { if child.kind() == "visibility_modifier" { return Some( - if (0..child.child_count()).any(|idx| { - child - .child(idx as u32) - .is_some_and(|inner| inner.kind() == "pub") - }) { + if (0..child.child_count()) + .any(|idx| child.child(idx).is_some_and(|inner| inner.kind() == "pub")) + { "public" } else { "private" @@ -206,7 +204,7 @@ fn root_module(node: Node<'_>, source: &str) -> String { fn has_child_kind_recursive(node: Node<'_>, kind: &str) -> bool { (0..node.child_count()).any(|i| { - node.child(i as u32) + node.child(i) .is_some_and(|child| child.kind() == kind || has_child_kind_recursive(child, kind)) }) } diff --git a/crates/codegraph-extract/src/lang/scala.rs b/crates/codegraph-extract/src/lang/scala.rs index ef62a16a..3c9e7975 100644 --- a/crates/codegraph-extract/src/lang/scala.rs +++ b/crates/codegraph-extract/src/lang/scala.rs @@ -122,12 +122,12 @@ impl LanguageSpec for ScalaSpec { if matches!(child.kind(), "modifiers" | "access_modifier") { let has_private = (0..child.child_count()).any(|idx| { child - .child(idx as u32) + .child(idx) .is_some_and(|inner| inner.kind() == "private") }); let has_protected = (0..child.child_count()).any(|idx| { child - .child(idx as u32) + .child(idx) .is_some_and(|inner| inner.kind() == "protected") }); if has_private { @@ -146,7 +146,7 @@ impl LanguageSpec for ScalaSpec { child.kind() == "modifiers" && (0..child.child_count()).any(|idx| { child - .child(idx as u32) + .child(idx) .is_some_and(|inner| inner.kind() == "static") }) }) diff --git a/crates/codegraph-extract/src/lang/solidity.rs b/crates/codegraph-extract/src/lang/solidity.rs index b465ef7f..13c80e5a 100644 --- a/crates/codegraph-extract/src/lang/solidity.rs +++ b/crates/codegraph-extract/src/lang/solidity.rs @@ -130,7 +130,7 @@ impl LanguageSpec for SoliditySpec { // walk every child and return the first that matches, defaulting // to `fallback` (upstream `fallbackReceiveName`). for i in 0..node.child_count() { - if let Some(child) = node.child(i as u32) { + if let Some(child) = node.child(i) { match child.kind() { "fallback" => return Some("fallback".to_string()), "receive" => return Some("receive".to_string()), diff --git a/crates/codegraph-extract/src/lang/swift.rs b/crates/codegraph-extract/src/lang/swift.rs index 5a94ec1c..90b7af65 100644 --- a/crates/codegraph-extract/src/lang/swift.rs +++ b/crates/codegraph-extract/src/lang/swift.rs @@ -180,7 +180,7 @@ impl LanguageSpec for SwiftSpec { // also matches `fileprivate`, so both keyword kinds map to private; // Swift defaults to internal. for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; if child.kind() != "modifiers" { @@ -203,7 +203,7 @@ impl LanguageSpec for SwiftSpec { // swift.ts:101-111 — modifiers containing `static` or `class` // (class methods are static-dispatch members). for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; if child.kind() == "modifiers" @@ -219,7 +219,7 @@ impl LanguageSpec for SwiftSpec { // swift.ts:112-120 — class_declaration covers classes, structs, enums; // split on the direct keyword child. for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; if child.kind() == "struct" { @@ -236,7 +236,7 @@ impl LanguageSpec for SwiftSpec { // swift.ts:121-129 — only `async` inside a modifiers child counts // (a bare `async` effect token between params and body does not). for idx in 0..node.child_count() { - let Some(child) = node.child(idx as u32) else { + let Some(child) = node.child(idx) else { continue; }; if child.kind() == "modifiers" && has_descendant_kind(child, "async") { @@ -287,7 +287,7 @@ fn has_descendant_kind(node: Node<'_>, kind: &str) -> bool { } for idx in 0..node.child_count() { if node - .child(idx as u32) + .child(idx) .is_some_and(|child| has_descendant_kind(child, kind)) { return true; diff --git a/crates/codegraph-extract/src/lang/typescript.rs b/crates/codegraph-extract/src/lang/typescript.rs index 33ba6121..ffb27a2a 100644 --- a/crates/codegraph-extract/src/lang/typescript.rs +++ b/crates/codegraph-extract/src/lang/typescript.rs @@ -146,10 +146,10 @@ impl LanguageSpec for TypeScriptSpec { fn get_visibility(&self, node: Node<'_>) -> Option { for i in 0..node.child_count() { - let child = node.child(i as u32)?; + let child = node.child(i)?; if child.kind() == "accessibility_modifier" { for j in 0..child.child_count() { - let modifier = child.child(j as u32)?; + let modifier = child.child(j)?; match modifier.kind() { "public" => return Some("public".to_string()), "private" => return Some("private".to_string()), @@ -200,10 +200,7 @@ impl LanguageSpec for TypeScriptSpec { } fn has_direct_child_kind(node: Node<'_>, kind: &str) -> bool { - (0..node.child_count()).any(|i| { - node.child(i as u32) - .is_some_and(|child| child.kind() == kind) - }) + (0..node.child_count()).any(|i| node.child(i).is_some_and(|child| child.kind() == kind)) } pub(crate) fn class_field_is_callable(node: Node<'_>, field_kind: &str) -> bool { diff --git a/crates/codegraph-mcp/src/rmcp_handler.rs b/crates/codegraph-mcp/src/rmcp_handler.rs index c70eceae..cff6a63c 100644 --- a/crates/codegraph-mcp/src/rmcp_handler.rs +++ b/crates/codegraph-mcp/src/rmcp_handler.rs @@ -28,7 +28,7 @@ use rmcp::handler::server::ServerHandler; use rmcp::model::{ CallToolRequestParams, CallToolResponse, CallToolResult, ContentBlock, ErrorData, Implementation, InitializeResult, JsonObject, ListToolsResult, MetaObject, - PaginatedRequestParams, ProtocolVersion, ServerCapabilities, ServerInfo, Tool, + PaginatedRequestParams, ProtocolVersion, ServerCapabilities, ServerConfig, Tool, }; use rmcp::service::{NotificationContext, RequestContext, RoleServer}; use serde_json::{Value, json}; @@ -425,7 +425,7 @@ fn execute_owned(project_path: &Path, tool_name: &str, args: &Value) -> ToolResu } impl ServerHandler for CodeGraphHandler { - fn get_info(&self) -> ServerInfo { + fn get_info(&self) -> ServerConfig { // capabilities = exactly {"tools":{}} (enable_tools, NO list_changed); // protocolVersion falls back to V_2024_11_05 for unknown client versions; // rmcp negotiates and echoes known versions verbatim. @@ -1418,7 +1418,7 @@ mod handler_tests { async fn connect( handler: CodeGraphHandler, ) -> ( - rmcp::service::RunningService, + rmcp::service::RunningService, tokio::task::JoinHandle<()>, ) { use rmcp::ServiceExt; @@ -1428,7 +1428,7 @@ mod handler_tests { let _ = running.waiting().await; } }); - let client = rmcp::model::ClientInfo::default() + let client = rmcp::model::ClientConfig::default() .serve(client_io) .await .expect("rmcp client handshake"); diff --git a/crates/codegraph-mcp/tests/mcp_configured_root.rs b/crates/codegraph-mcp/tests/mcp_configured_root.rs index d73ad8fb..c4004db1 100644 --- a/crates/codegraph-mcp/tests/mcp_configured_root.rs +++ b/crates/codegraph-mcp/tests/mcp_configured_root.rs @@ -465,7 +465,7 @@ fn invalid_configured_root_rmcp_fails_closed_and_never_serves_trap_default_db() fn rmcp_tool_call_search(project: &Path) -> Value { use rmcp::ServiceExt; use rmcp::model::{ - CallToolRequestParams, ClientCapabilities, ClientInfo, Implementation, ProtocolVersion, + CallToolRequestParams, ClientCapabilities, ClientConfig, Implementation, ProtocolVersion, }; let project = project.to_path_buf(); @@ -482,7 +482,7 @@ fn rmcp_tool_call_search(project: &Path) -> Value { let _ = running.waiting().await; } }); - let client = ClientInfo::new( + let client = ClientConfig::new( ClientCapabilities::default(), Implementation::new("cfgroot", "0"), ) diff --git a/crates/codegraph-mcp/tests/rmcp_l3.rs b/crates/codegraph-mcp/tests/rmcp_l3.rs index 1217bc0a..ee95f874 100644 --- a/crates/codegraph-mcp/tests/rmcp_l3.rs +++ b/crates/codegraph-mcp/tests/rmcp_l3.rs @@ -24,7 +24,7 @@ use parity::{TestProject, golden_client, setup_mini_project, workspace_root}; async fn connect( handler: CodeGraphHandler, ) -> ( - rmcp::service::RunningService, + rmcp::service::RunningService, tokio::task::JoinHandle<()>, ) { connect_with_protocol(handler, ProtocolVersion::V_2024_11_05).await @@ -34,7 +34,7 @@ async fn connect_with_protocol( handler: CodeGraphHandler, protocol_version: ProtocolVersion, ) -> ( - rmcp::service::RunningService, + rmcp::service::RunningService, tokio::task::JoinHandle<()>, ) { let (client_io, server_io) = tokio::io::duplex(1024 * 1024); diff --git a/crates/codegraph-mcp/tests/rmcp_roots.rs b/crates/codegraph-mcp/tests/rmcp_roots.rs index fb199e55..0b9cc7e0 100644 --- a/crates/codegraph-mcp/tests/rmcp_roots.rs +++ b/crates/codegraph-mcp/tests/rmcp_roots.rs @@ -31,7 +31,7 @@ use rmcp::handler::client::ClientHandler; #[allow(deprecated)] // ListRootsResult/Root: SEP-2577 roots wire types (rmcp 2.1, no replacement). use rmcp::model::{ - CallToolRequestParams, ClientCapabilities, ClientInfo, Implementation, ListRootsResult, + CallToolRequestParams, ClientCapabilities, ClientConfig, Implementation, ListRootsResult, ProtocolVersion, Root, }; use rmcp::service::{RequestContext, RoleClient}; @@ -62,13 +62,13 @@ struct RootsClient { } impl ClientHandler for RootsClient { - fn get_info(&self) -> ClientInfo { + fn get_info(&self) -> ClientConfig { // Declare the roots capability so the server's `should_request_roots` // gate fires (matches `default_is_adoptable` + client-declares-roots). - // `ClientInfo` is `#[non_exhaustive]`, so build via the constructor. + // `ClientConfig` is `#[non_exhaustive]`, so build via the constructor. #[allow(deprecated)] let capabilities = ClientCapabilities::builder().enable_roots().build(); - ClientInfo::new(capabilities, Implementation::new("roots-test-client", "0")) + ClientConfig::new(capabilities, Implementation::new("roots-test-client", "0")) .with_protocol_version(ProtocolVersion::V_2024_11_05) } diff --git a/crates/codegraph-mcp/tests/support/parity.rs b/crates/codegraph-mcp/tests/support/parity.rs index f73f2b7d..031202f0 100644 --- a/crates/codegraph-mcp/tests/support/parity.rs +++ b/crates/codegraph-mcp/tests/support/parity.rs @@ -22,8 +22,8 @@ use std::sync::atomic::{AtomicU64, Ordering}; use codegraph_mcp::rmcp_handler::CodeGraphHandler; use rmcp::ServiceExt; use rmcp::model::{ - CallToolRequestParams, ClientCapabilities, ClientInfo, Implementation, PaginatedRequestParams, - ProtocolVersion, + CallToolRequestParams, ClientCapabilities, ClientConfig, Implementation, + PaginatedRequestParams, ProtocolVersion, }; use serde_json::{Value, json}; @@ -114,8 +114,8 @@ pub fn rewrite_project(project: &Path, request: &mut Value) { /// An rmcp client that requests protocolVersion 2024-11-05 (the golden's /// initialize request), so negotiation lands on 2024-11-05 for parity. -pub fn golden_client() -> ClientInfo { - ClientInfo::new( +pub fn golden_client() -> ClientConfig { + ClientConfig::new( ClientCapabilities::default(), Implementation::new("golden", "0"), ) diff --git a/crates/codegraph-store/src/connection.rs b/crates/codegraph-store/src/connection.rs index 4d47cc52..210e17e2 100644 --- a/crates/codegraph-store/src/connection.rs +++ b/crates/codegraph-store/src/connection.rs @@ -1163,7 +1163,8 @@ fn configure_connection(conn: &Connection) -> rusqlite::Result<()> { conn.pragma_update( None, "journal_size_limit", - crate::queries::wal_valve_threshold_bytes(), + // In range by construction; rusqlite has no `ToSql` for `u64`. + i64::try_from(crate::queries::wal_valve_threshold_bytes()).unwrap_or(i64::MAX), )?; conn.pragma_update(None, "synchronous", "NORMAL")?; conn.pragma_update(None, "cache_size", -64_000)?; @@ -1195,7 +1196,8 @@ fn configure_connection_for_rebuild( configure(conn.pragma_update( None, "journal_size_limit", - crate::queries::wal_valve_threshold_bytes(), + // In range by construction; rusqlite has no `ToSql` for `u64`. + i64::try_from(crate::queries::wal_valve_threshold_bytes()).unwrap_or(i64::MAX), ))?; lease.validate_exclusive(paths)?; configure(conn.pragma_update(None, "synchronous", "NORMAL"))?; From ff557518c80ca6fcc925e067603cd761c678171d Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:13:05 +0800 Subject: [PATCH 3/7] fix(watch): ignore the open events notify 8 reports notify 8's inotify backend watches IN_OPEN, so every open of a watched file or directory arrives as an access event. The loop counted every event as a change. Its own directory scans and the sync's reads then fed back forever, the debounce never settled, and new directories, symlink retargets and fresh files never synced. Only a close after writing, which notify 6 already delivered, still counts as a change among access events. --- crates/codegraph-watch/src/watcher.rs | 41 ++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/crates/codegraph-watch/src/watcher.rs b/crates/codegraph-watch/src/watcher.rs index 00f45492..f9adcd3d 100644 --- a/crates/codegraph-watch/src/watcher.rs +++ b/crates/codegraph-watch/src/watcher.rs @@ -9,7 +9,7 @@ use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; use anyhow::Result; -use notify::event::{EventKind, RemoveKind}; +use notify::event::{AccessKind, AccessMode, EventKind, RemoveKind}; use notify::{Event, RecommendedWatcher, RecursiveMode, Watcher}; use codegraph_core::IndexPaths; @@ -1071,6 +1071,7 @@ impl ProjectWatcher { let callback_tx = tx.clone(); let mut watcher = notify::recommended_watcher(move |event: notify::Result| match event { + Ok(event) if !changes_content(&event.kind) => {} Ok(event) => { let _ = callback_tx.send(LoopMessage::Event(WatchEventBatch::from_event( &event.kind, @@ -1371,6 +1372,18 @@ impl WatchEventBatch { } } +/// Whether an event can mean a file or directory changed. notify 8's inotify +/// backend also reports every open (`IN_OPEN`) as an access event, which notify +/// 6 never did. An open changes nothing, and the loop's own directory scans and +/// the sync's own reads would feed it back as pending changes forever. Only a +/// close after writing is an access worth a sync. +fn changes_content(kind: &EventKind) -> bool { + match kind { + EventKind::Access(access) => *access == AccessKind::Close(AccessMode::Write), + _ => true, + } +} + fn classify_removed_directory( hint: RemovalHint, relative: &str, @@ -1959,6 +1972,32 @@ fn epoch_millis() -> u128 { #[cfg(test)] mod tests { use super::*; + + #[test] + fn only_content_changes_reach_the_loop() { + use notify::event::{CreateKind, DataChange, ModifyKind}; + // notify 8 reports every open; an open, a read or a read-only close + // changes nothing. A close after writing, and every other kind, can. + for (kind, expected) in [ + (EventKind::Access(AccessKind::Open(AccessMode::Any)), false), + (EventKind::Access(AccessKind::Read), false), + ( + EventKind::Access(AccessKind::Close(AccessMode::Read)), + false, + ), + (EventKind::Access(AccessKind::Any), false), + ( + EventKind::Access(AccessKind::Close(AccessMode::Write)), + true, + ), + (EventKind::Create(CreateKind::Folder), true), + (EventKind::Modify(ModifyKind::Data(DataChange::Any)), true), + (EventKind::Remove(RemoveKind::Any), true), + (EventKind::Any, true), + ] { + assert_eq!(changes_content(&kind), expected, "{kind:?}"); + } + } use std::fs; use std::sync::{Arc, Mutex}; From 4eebf0f98fb369aef83e56780ff872c01d769793 Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:13:05 +0800 Subject: [PATCH 4/7] fix(cli): let jsonc-parser escape installer strings jsonc-parser 0.34's CstStringLit::new_escaped escapes backslashes and control characters itself. The workaround for 0.26, which escaped only quotes, now escaped them twice, so a Windows `--path C:\Users` was written to agent configs as `C:\\Users`. Strings now go in raw. --- crates/codegraph-cli/src/installer/shared.rs | 25 ++++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/crates/codegraph-cli/src/installer/shared.rs b/crates/codegraph-cli/src/installer/shared.rs index e6615ef2..2f71ead1 100644 --- a/crates/codegraph-cli/src/installer/shared.rs +++ b/crates/codegraph-cli/src/installer/shared.rs @@ -450,32 +450,15 @@ pub fn to_upstream_json(value: &Value) -> String { serde_json::to_string_pretty(value).unwrap_or_else(|_| "{}".to_string()) } -// jsonc-parser 0.26 `CstStringLit::new_escaped` escapes only `"`, not `\` or -// control chars, so a Windows path `C:\Users` emits invalid JSON `"C:\Users"`. -// Pre-escape everything JSON-significant EXCEPT `"` (the library owns quotes). -fn escape_for_cst_string(s: &str) -> String { - let mut out = String::with_capacity(s.len()); - for c in s.chars() { - match c { - '\\' => out.push_str("\\\\"), - '\n' => out.push_str("\\n"), - '\r' => out.push_str("\\r"), - '\t' => out.push_str("\\t"), - '\u{08}' => out.push_str("\\b"), - '\u{0c}' => out.push_str("\\f"), - c if (c as u32) < 0x20 => out.push_str(&format!("\\u{:04x}", c as u32)), - c => out.push(c), - } - } - out -} - +// jsonc-parser's `CstStringLit::new_escaped` escapes `"`, `\` and control +// characters itself (since 0.34; 0.26 escaped only `"`, which made a Windows +// path `C:\Users` invalid JSON), so a string goes in raw. fn to_cst_input(value: &Value) -> CstInputValue { match value { Value::Null => CstInputValue::Null, Value::Bool(b) => CstInputValue::Bool(*b), Value::Number(n) => CstInputValue::Number(n.to_string()), - Value::String(s) => CstInputValue::String(escape_for_cst_string(s)), + Value::String(s) => CstInputValue::String(s.clone()), Value::Array(arr) => CstInputValue::Array(arr.iter().map(to_cst_input).collect()), Value::Object(map) => CstInputValue::Object( map.iter() From 8bd5161840f95396374112e59ad24e85c9c0dec7 Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:15:48 +0800 Subject: [PATCH 5/7] test(mcp): reach 2026-07-28 statelessly under rmcp 3.5 rmcp 3.5 gives 2026-07-28 no initialize handshake: a 2026-07-28 client sends every request with its protocol version and client capabilities in the request's _meta. An initialize asking for 2026-07-28 now falls back to 2024-11-05. The tests that negotiated 2026-07-28 through initialize now check that fallback. The 2026 resultType and the missing Mcp-Session-Id are checked on stateless tools/list and tools/call requests over HTTP. docs/mcp.md and the handler comments describe rmcp 3.5.0. --- crates/codegraph-mcp/src/rmcp_handler.rs | 8 ++- crates/codegraph-mcp/tests/rmcp_http.rs | 72 ++++++++++++++++++++++-- crates/codegraph-mcp/tests/rmcp_l3.rs | 14 +++-- docs/mcp.md | 35 +++++++----- 4 files changed, 102 insertions(+), 27 deletions(-) diff --git a/crates/codegraph-mcp/src/rmcp_handler.rs b/crates/codegraph-mcp/src/rmcp_handler.rs index cff6a63c..95c729b4 100644 --- a/crates/codegraph-mcp/src/rmcp_handler.rs +++ b/crates/codegraph-mcp/src/rmcp_handler.rs @@ -427,8 +427,10 @@ fn execute_owned(project_path: &Path, tool_name: &str, args: &Value) -> ToolResu impl ServerHandler for CodeGraphHandler { fn get_info(&self) -> ServerConfig { // capabilities = exactly {"tools":{}} (enable_tools, NO list_changed); - // protocolVersion falls back to V_2024_11_05 for unknown client versions; - // rmcp negotiates and echoes known versions verbatim. + // protocolVersion falls back to V_2024_11_05. rmcp echoes a known + // version that has an `initialize` handshake (2024-11-05 … 2025-11-25) + // verbatim; 2026-07-28 has none — it is served statelessly per request + // — so an `initialize` asking for it gets this fallback too. // serverInfo{name,version=crate}; instructions reused verbatim. InitializeResult::new(ServerCapabilities::builder().enable_tools().build()) .with_protocol_version(ProtocolVersion::V_2024_11_05) @@ -462,7 +464,7 @@ impl ServerHandler for CodeGraphHandler { } // `Peer::list_roots` is `#[deprecated]` (SEP-2577); it is still THE - // mechanism in rmcp 3.0.1 for a server to ask the client for its roots and + // mechanism in rmcp 3.5.0 for a server to ask the client for its roots and // still has no non-deprecated replacement, so the deprecation is allowed // at this one call site. #[allow(deprecated)] diff --git a/crates/codegraph-mcp/tests/rmcp_http.rs b/crates/codegraph-mcp/tests/rmcp_http.rs index f3e9f8a1..7529290f 100644 --- a/crates/codegraph-mcp/tests/rmcp_http.rs +++ b/crates/codegraph-mcp/tests/rmcp_http.rs @@ -253,10 +253,10 @@ fn http_initialize_negotiates_2024_11_05_and_no_roots() { }); } -/// Structural goldens cannot observe HTTP response headers, so this locks the -/// 2026 stateless initialize path to the absence of `Mcp-Session-Id`. +/// 2026-07-28 has no `initialize` handshake (rmcp 3.5), so an `initialize` +/// asking for it falls back to 2024-11-05, still without `Mcp-Session-Id`. #[test] -fn http_2026_initialize_has_no_session_id() { +fn http_initialize_asking_2026_falls_back_without_a_session() { rt().block_on(async { let project = setup_mini_project(); let (url, _addr, ct) = spawn_http_server(project.path().to_path_buf()).await; @@ -276,20 +276,80 @@ fn http_2026_initialize_has_no_session_id() { assert_eq!(response.status(), 200, "initialize must return 200"); assert!( response.headers().get("Mcp-Session-Id").is_none(), - "2026-07-28 HTTP must be stateless and omit Mcp-Session-Id: {:?}", + "initialize must not open a session: {:?}", response.headers() ); let body: Value = response.json().await.expect("json body"); assert_eq!( body["result"]["protocolVersion"], - json!("2026-07-28"), - "initialize must negotiate 2026-07-28: {body}" + json!("2024-11-05"), + "initialize asking for 2026-07-28 must fall back: {body}" ); ct.cancel(); }); } +/// Structural goldens observe neither HTTP response headers nor top-level +/// `resultType`, so lock both for stateless 2026-07-28 requests: the protocol +/// version and client capabilities ride in each request's `_meta`. +#[test] +fn http_2026_stateless_requests_carry_result_type_and_no_session() { + rt().block_on(async { + let project = setup_mini_project(); + let (url, _addr, ct) = spawn_http_server(project.path().to_path_buf()).await; + let client = reqwest::Client::new(); + let meta = json!({ + "io.modelcontextprotocol/protocolVersion": "2026-07-28", + "io.modelcontextprotocol/clientCapabilities": {} + }); + let list = json!({ + "jsonrpc": "2.0", + "id": 1, + "method": "tools/list", + "params": { "_meta": meta } + }); + let call = json!({ + "jsonrpc": "2.0", + "id": 2, + "method": "tools/call", + "params": { + "name": "codegraph_search", + "arguments": { "query": "add" }, + "_meta": meta + } + }); + for (body, method, name) in [ + (&list, "tools/list", None), + (&call, "tools/call", Some("codegraph_search")), + ] { + let response = post_json_with_mcp_headers( + &client, + &url, + body, + Some("2026-07-28"), + Some(method), + name, + ) + .await; + assert_eq!(response.status(), 200, "{method} must succeed"); + assert!( + response.headers().get("Mcp-Session-Id").is_none(), + "2026-07-28 HTTP must be stateless and omit Mcp-Session-Id: {:?}", + response.headers() + ); + let reply: Value = response.json().await.expect("json body"); + assert_eq!( + reply["result"]["resultType"], + json!("complete"), + "{method} at 2026-07-28 must carry resultType=complete: {reply}" + ); + } + + ct.cancel(); + }); +} + /// Structural goldens compare neither HTTP request headers nor top-level /// `resultType`, so exercise SEP-2243 success and rejection on the real wire. #[test] diff --git a/crates/codegraph-mcp/tests/rmcp_l3.rs b/crates/codegraph-mcp/tests/rmcp_l3.rs index ee95f874..0d55f56a 100644 --- a/crates/codegraph-mcp/tests/rmcp_l3.rs +++ b/crates/codegraph-mcp/tests/rmcp_l3.rs @@ -108,15 +108,19 @@ fn negotiated_protocol_version_is_2024_11_05() { }); } +/// `initialize` echoes every known revision that has the handshake. 2026-07-28 +/// has none (rmcp 3.5: it is served statelessly per request, see +/// `rmcp_http.rs`), so an `initialize` asking for it gets the 2024-11-05 +/// fallback. #[test] -fn known_protocol_versions_are_echoed_by_handshake() { +fn initialize_echoes_each_handshake_revision_and_falls_back_for_2026() { rt().block_on(async { for (requested, expected) in [ (ProtocolVersion::V_2024_11_05, "2024-11-05"), (ProtocolVersion::V_2025_03_26, "2025-03-26"), (ProtocolVersion::V_2025_06_18, "2025-06-18"), (ProtocolVersion::V_2025_11_25, "2025-11-25"), - (ProtocolVersion::V_2026_07_28, "2026-07-28"), + (ProtocolVersion::V_2026_07_28, "2024-11-05"), ] { let project = setup_mini_project(); let handler = CodeGraphHandler::new(Some(project.path().to_path_buf())); @@ -136,16 +140,16 @@ fn known_protocol_versions_are_echoed_by_handshake() { } /// The structural goldens never compare top-level `resultType`, so explicitly -/// lock its 2026 presence and its pre-2026 omission for both tool result shapes. +/// lock its omission before 2026 for both tool result shapes. Its 2026 +/// presence needs stateless 2026-07-28 requests, which `rmcp_http.rs` sends. #[test] -fn result_type_is_versioned_for_tools_list_and_call() { +fn pre_2026_tool_results_omit_result_type() { rt().block_on(async { for (requested, expected) in [ (ProtocolVersion::V_2024_11_05, None), (ProtocolVersion::V_2025_03_26, None), (ProtocolVersion::V_2025_06_18, None), (ProtocolVersion::V_2025_11_25, None), - (ProtocolVersion::V_2026_07_28, Some("complete")), ] { let project = setup_mini_project(); let handler = CodeGraphHandler::new(Some(project.path().to_path_buf())); diff --git a/docs/mcp.md b/docs/mcp.md index ac06ea3e..452a3b6b 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -8,19 +8,28 @@ Protocol handshake: `initialize` returns `serverInfo.name: "codegraph"`. `CARGO_PKG_VERSION`), so it tracks releases automatically rather than being hardcoded. -`protocolVersion` is negotiated, not fixed. The server (built on `rmcp` 3.0.1) -echoes back whatever revision the client asks for, as long as it is one it knows: -**2024-11-05**, **2025-03-26**, **2025-06-18**, **2025-11-25**, or -**2026-07-28**. An unrecognized request falls back to `2024-11-05`. What the -negotiated revision changes: - -| client requests | negotiated | `resultType` in results | streamable-HTTP session | -| --------------- | ---------- | ----------------------- | -------------------------------- | -| 2024-11-05 | 2024-11-05 | absent | no `Mcp-Session-Id` (our config) | -| 2025-03-26 | 2025-03-26 | absent | no `Mcp-Session-Id` (our config) | -| 2025-06-18 | 2025-06-18 | absent | no `Mcp-Session-Id` (our config) | -| 2025-11-25 | 2025-11-25 | absent | no `Mcp-Session-Id` (our config) | -| 2026-07-28 | 2026-07-28 | `"complete"` | no `Mcp-Session-Id` (per spec) | +`protocolVersion` is negotiated, not fixed. The server is built on `rmcp` 3.5.0. + +- **`initialize`.** It echoes back the revision the client asks for, as long as it + is one it knows that has an `initialize` handshake: **2024-11-05**, + **2025-03-26**, **2025-06-18** or **2025-11-25**. +- **2026-07-28.** This revision has no `initialize`. A 2026-07-28 client sends + every request statelessly: the protocol version and client capabilities go in + the request's `_meta` (`io.modelcontextprotocol/protocolVersion`, + `io.modelcontextprotocol/clientCapabilities`), alongside the SEP-2243 headers. +- **Fallback.** An `initialize` that asks for 2026-07-28 falls back to + `2024-11-05`, like any unrecognized request. + +What the revision changes: + +| client sends | served at | `resultType` in results | streamable-HTTP session | +| ------------------------------ | ---------- | ----------------------- | -------------------------------- | +| `initialize` for 2024-11-05 | 2024-11-05 | absent | no `Mcp-Session-Id` (our config) | +| `initialize` for 2025-03-26 | 2025-03-26 | absent | no `Mcp-Session-Id` (our config) | +| `initialize` for 2025-06-18 | 2025-06-18 | absent | no `Mcp-Session-Id` (our config) | +| `initialize` for 2025-11-25 | 2025-11-25 | absent | no `Mcp-Session-Id` (our config) | +| `initialize` for 2026-07-28 | 2024-11-05 | absent | no `Mcp-Session-Id` (our config) | +| a stateless 2026-07-28 request | 2026-07-28 | `"complete"` | no `Mcp-Session-Id` (per spec) | Results carry the SEP-2322 discriminator `resultType: "complete"` only for a 2026-07-28 peer; older peers get the key stripped, and per spec a missing From 99d006b775157ed5fdb2e05ff2d013e88652cf87 Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:16:06 +0800 Subject: [PATCH 6/7] fix(store): bump the extraction version to 20 The grammar updates change extraction output (ArkTS for certain), so an index built at version 19 is reported outdated and rebuilt. --- crates/codegraph-store/src/index_state.rs | 2 +- crates/codegraph-store/tests/index_state.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/codegraph-store/src/index_state.rs b/crates/codegraph-store/src/index_state.rs index 36b075c6..f794032d 100644 --- a/crates/codegraph-store/src/index_state.rs +++ b/crates/codegraph-store/src/index_state.rs @@ -115,7 +115,7 @@ pub const CURRENT_STORAGE_PROTOCOL: u64 = 2; /// The extraction-pipeline version this binary produces. This is the single /// source of truth: no other crate may define its own copy. -pub const CURRENT_EXTRACTION_VERSION: u64 = 19; +pub const CURRENT_EXTRACTION_VERSION: u64 = 20; /// The `project_metadata` key under which a built index records the extraction /// version it was produced with. Single source of truth for the key spelling. diff --git a/crates/codegraph-store/tests/index_state.rs b/crates/codegraph-store/tests/index_state.rs index 34d8c582..09291079 100644 --- a/crates/codegraph-store/tests/index_state.rs +++ b/crates/codegraph-store/tests/index_state.rs @@ -119,7 +119,7 @@ fn assert_corrupt( fn index_state_constants_and_canonical_payload_are_exact() { /// The extraction version the immediately preceding release wrote. Read from /// `index_state.rs` at implementation time; see plan decision C1 step 0. - const PREVIOUS_EXTRACTION_VERSION: u64 = 18; + const PREVIOUS_EXTRACTION_VERSION: u64 = 19; assert_eq!(CURRENT_STORAGE_PROTOCOL, 2); assert_eq!(CURRENT_EXTRACTION_VERSION, PREVIOUS_EXTRACTION_VERSION + 1); From 7cde3218567afd70de9411c2ab90ff0ecdf4103a Mon Sep 17 00:00:00 2001 From: CodeGraph Test Date: Fri, 2 Oct 2026 12:19:09 +0800 Subject: [PATCH 7/7] test(golden): regenerate the ArkTS golden for tree-sitter-arkts 0.3 tree-sitter-arkts 0.3 parses the call inside the `@Component struct`'s build() method that 0.2 missed, so the fixture's `MyView::build -> helper` call is now an edge. It is the only change in all 20 corpora. The golden is regenerated with the recipe in docs/equivalence.md: only edges.json and colby.db change. The ArkTS fixture section and the ArkTS rows in languages.md and grammar-manifest.md record the new edge. --- docs/equivalence.md | 7 ++++++- docs/grammar-manifest.md | 2 +- docs/languages.md | 2 +- reference/golden/arkts/colby.db | Bin 155648 -> 155648 bytes reference/golden/arkts/edges.json | 12 ++++++++++++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/equivalence.md b/docs/equivalence.md index 4b796238..4b77d848 100644 --- a/docs/equivalence.md +++ b/docs/equivalence.md @@ -937,7 +937,12 @@ MyView` with a `build()` method, and a plain `class Model`. The golden must show - `MyView` as a `NodeKind::Struct` with its `build` method as a member (via the existing `extract_struct` path — no walker change); - `helper`/`driver` functions, the `Model` class, and the `../foo` import node; -- the `driver` → `helper` `Calls` edge (plain `call_expression`). +- the `driver` → `helper` `Calls` edge (plain `call_expression`); +- the `MyView::build` → `helper` `Calls` edge from line 12. `tree-sitter-arkts` + 0.3 parses the call inside the `@Component struct`'s `build()` method; 0.2 did + not, so this edge first appeared when #280 moved the grammar from 0.2 to 0.3 + and the fixture was regenerated with the recipe below. Only `edges.json` and + `colby.db` changed. The ArkUI dynamic-dispatch / callback-synthesizer bridges are DEFERRED — the port has no callback synthesizer. So `ARKTS_SPEC` uses `call_types = diff --git a/docs/grammar-manifest.md b/docs/grammar-manifest.md index 9a4e70a6..b4232394 100644 --- a/docs/grammar-manifest.md +++ b/docs/grammar-manifest.md @@ -26,7 +26,7 @@ grammar crates. | ------------------- | ------------------------ | ---------------------------------------------------------------------- | | `typescript`, `tsx` | `tree-sitter-typescript` | TypeScript and TSX entry points | | `javascript`, `jsx` | `tree-sitter-javascript` | JS grammar includes JSX; separate specs preserve ID/extension behavior | -| `arkts` | `tree-sitter-arkts` | `.ets`; ArkUI syntax | +| `arkts` | `tree-sitter-arkts` | `.ets`; ArkUI syntax; calls in `struct` methods such as `build()` | | `python` | `tree-sitter-python` | `.py`, `.pyw` | | `go` | `tree-sitter-go` | `.go` | | `rust` | `tree-sitter-rust` | `.rs` | diff --git a/docs/languages.md b/docs/languages.md index 70061164..ba46ba3f 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -31,7 +31,7 @@ presented as a clean parse. | TSX | `.tsx` | Full tree-sitter | TypeScript grammar, JSX syntax | | JavaScript | `.js` `.mjs` `.cjs` `.xsjs` `.xsjslib` | Full tree-sitter | Generator/declarator/hook/wrapper ownership and fail-closed receiver/alias rules follow TypeScript; `exports.x = function` and `module.exports.x = function` create exported callables. Classic scripts and real CommonJS/later exports remain visible; an import-only module with no export is sealed. `.xsjs` / `.xsjslib` follow ordinary JS candidates. | | JSX | `.jsx` | Full tree-sitter | JavaScript grammar, JSX syntax | -| ArkTS | `.ets` | Full tree-sitter | HarmonyOS / OpenHarmony; `tree-sitter-arkts` grammar. `@Component struct` → struct symbol. ArkUI dynamic-dispatch bridges deferred. Plain `.ts` stays TypeScript | +| ArkTS | `.ets` | Full tree-sitter | HarmonyOS / OpenHarmony; `tree-sitter-arkts` grammar. `@Component struct` → struct symbol; calls inside its methods, such as `build()`, are extracted. ArkUI dynamic-dispatch bridges deferred. Plain `.ts` stays TypeScript | | Python | `.py` `.pyw` | Full tree-sitter | Bare class names used as values resolve to `References` edges in return, assignment, pair, argument, and list positions. `import x as y` binds `y` to module `x`; `from p import x as y` prefers module `p.x` when that file exists, otherwise it remains a member import. Receiver-qualified method values emit callable-use `References` edges rather than immediate calls. Missing, duplicate, or ambiguous aliases stay unresolved and never fall through to a global bare-name guess. Tuple returns are not recursively traversed, and bare names never resolve to methods. | | Go | `.go` | Full tree-sitter | Lowercase declarations are package-local (directory-scoped) and cannot become cross-package name targets; local callable parameters/variables also block same-named method guesses. Exported identifiers remain cross-package candidates. | | Rust | `.rs` | Full tree-sitter | Methods in generic, lifetime, reference, and qualified `impl` blocks belong to the implementing type; only trait impls emit `Implements`. Exact `self.method()` binds only to the enclosing impl owner, including split/trait impls. Exact `self.field.method()` resolves through the owning struct field's declared project type. Private items are visible only to their module subtree (trait-impl methods follow trait visibility); absent members, containers, generics, external types, and ambiguity remain unresolved. | diff --git a/reference/golden/arkts/colby.db b/reference/golden/arkts/colby.db index c8eebe188ad7d13fc0f4e0be92543b59507f776c..1e05b32e269cef1e9a98d828f0968d681b0d4fdb 100644 GIT binary patch delta 821 zcmY+BT}TvB6vywGxs%>;<{sCNU6sH!1wV0D#a?|0A_}Y^5Ehv>cU;AF*Br4xDzyh8 zF_od_Nh}I{DbTiB2&y%Dh&~WPA*E93MUW7L2*R+tvrqAdJNI(t{{H9u?`WEhrrFFT z>CXG5NJoJFS-ag}rvr^*GdYml4;1*lOdBWo6uYs6f8>4KuRqiawDII}evhV&>5P$( z;fn$go3~dxW7AM)U+!$;8Xd!2MvQFDNv}X{@?_`Z0!?Nh`@oDuO^ZDl_=T#lRN4jGKFfXNO?n91#+LYnxh_f(yqoub@6(1eUMNpit7|A4gkluUBM3 z$captr<5%eN_s{=qqDmSs#_{{_BNqR`G7)6&&8MMeA@$$TdH)n_n<}@K_S8GN7_t7 zrI}{(vYBSk=d-haJ%k!B!&QO@_#5}}C+^@6{Eq9mDyT0|p)wKSuA@}1$~a4K17G2+ zpx(qI^)fx}QJi-Hsl2K==)P-fnM7+nN_Qd_OI$G{Myxm9XN5Z5T9dO;E*&jtZEkGN zo>kF?j7tR9a0zz=^8q?<15#y)Tp-uN{|w0|w=!p|Tq?R7l&D5=lHe}B!ACfm$`48- zc)XlaUrS+kZ_KoMBUcS~V?@okIT#)?BSC+#NT&4!t*#!kKWq$}gH~@MZaL{TsjjFH YXf45bB4S!b_mE{o!b9QIVVea0f39Nsj{pDw delta 555 zcmXw#PiPZS5XRrU-I(2&eP0sS#-fn;=U`iHlt#f*y@}|dAVM#?Mw3R-G}V-Vmztgw zL{I{Ky+o@BUTR2Pbrpjo(3^_&W{NcxFU6vTLJ>rXYt+jy12eyGzOPWz3pM@bX`a6} zlN^kxk?NFPti^iWrZi`-#zIk3GeQiHF@#OxwKy-L#(g7X*8@NN{&8qJv#fBMh{@Vp z>aq`=co_0?os=-8lIc`Vdo;2Jp9`I&DYrhiTUUGmC4-C|j3%HSI zN+QCy5sJj)by>eJt# zC$3tZ{~rC&qMfD&*V0dX$11*J37_#14OgQM*#Pg+ILZw3|Bt)5dIWMJ!lT{;?fhQK z`3T?A5s&xoZO<=!j4_T`hFL7Rm}ihPF}~fy!^%EgE=IUHv4^WZ1=9>)+#IJJF~D!b y+@Ppk48z%EDrXIi=B#95G$HH#ynCZbY7ay1%-K{XVdYboa_6$cIj7anDf$~__Ok5& diff --git a/reference/golden/arkts/edges.json b/reference/golden/arkts/edges.json index 9a31faa5..4eb78ccf 100644 --- a/reference/golden/arkts/edges.json +++ b/reference/golden/arkts/edges.json @@ -23,6 +23,18 @@ "source": "function:3ccec0adbbb469e92ba0541ff466fb6c", "target": "function:190c728c90d859bafe85fc2d9d2aea72" }, + { + "col": 4, + "kind": "calls", + "line": 12, + "metadata": { + "confidence": 0.9, + "resolvedBy": "exact-match" + }, + "provenance": null, + "source": "method:1ae7cb887c6ff76065390c4dd3100c38", + "target": "function:190c728c90d859bafe85fc2d9d2aea72" + }, { "col": null, "kind": "contains",