From fcb57612c31bd12f29abf957119700a843fcd38c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 08:13:46 +0000 Subject: [PATCH 01/73] chore(deps)(deps): bump similar from 3.1.1 to 3.1.2 (#201) Bumps [similar](https://github.com/mitsuhiko/similar) from 3.1.1 to 3.1.2. - [Changelog](https://github.com/mitsuhiko/similar/blob/main/CHANGELOG.md) - [Commits](https://github.com/mitsuhiko/similar/compare/3.1.1...3.1.2) --- updated-dependencies: - dependency-name: similar dependency-version: 3.1.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 307c23658..f7985c429 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -748,9 +748,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "similar" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6505efef05804732ed8a3f2d4f279429eb485bd69d5b0cc6b19cc02005cda16" +checksum = "85ee016af5d736b69fc89e19254540fa4b5f5492853fb5503920f084011c78b6" dependencies = [ "bstr", ] From c91741185a1524db5e7a90edb33cfed50f72222a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 08:14:06 +0000 Subject: [PATCH 02/73] chore(deps)(deps): bump clap from 4.6.4 to 4.6.5 (#202) Bumps [clap](https://github.com/clap-rs/clap) from 4.6.4 to 4.6.5. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.4...clap_complete-v4.6.5) --- updated-dependencies: - dependency-name: clap dependency-version: 4.6.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7985c429..7bdb16a71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,9 +123,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.6.4" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" dependencies = [ "clap_builder", "clap_derive", @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.2" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" dependencies = [ "anstream", "anstyle", From 0453e1a75acbb62c38c04ad07982d79eb5662de0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 08:17:47 +0000 Subject: [PATCH 03/73] chore(deps)(deps): bump pyo3 from 0.29.0 to 0.29.2 (#204) Bumps [pyo3](https://github.com/pyo3/pyo3) from 0.29.0 to 0.29.2. - [Release notes](https://github.com/pyo3/pyo3/releases) - [Changelog](https://github.com/PyO3/pyo3/blob/main/CHANGELOG.md) - [Commits](https://github.com/pyo3/pyo3/compare/v0.29.0...v0.29.2) --- updated-dependencies: - dependency-name: pyo3 dependency-version: 0.29.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bdb16a71..67036e078 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -515,9 +515,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c" +checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b" dependencies = [ "libc", "once_cell", @@ -529,18 +529,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078" +checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b" +checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327" dependencies = [ "libc", "pyo3-build-config", @@ -548,9 +548,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771" +checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -560,9 +560,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.29.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362" +checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952" dependencies = [ "heck", "proc-macro2", From 6d2568e1c76ca8cd00e2d78a9ba812ee9c897271 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:25:54 +0200 Subject: [PATCH 04/73] chore(deps)(deps): bump aho-corasick from 1.1.4 to 1.1.5 (#203) Bumps [aho-corasick](https://github.com/BurntSushi/aho-corasick) from 1.1.4 to 1.1.5. - [Commits](https://github.com/BurntSushi/aho-corasick/compare/1.1.4...1.1.5) --- updated-dependencies: - dependency-name: aho-corasick dependency-version: 1.1.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67036e078..ea4c268d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] From 538605743dc72f8b3840a9c54117b8e917cb63d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:25:57 +0200 Subject: [PATCH 05/73] chore(deps)(deps): bump the all-dependencies group with 2 updates (#205) Bumps the all-dependencies group with 2 updates: [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) and [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance). Updates `dtolnay/rust-toolchain` from 2c7215f132e9ebf062739d9130488b56d53c060c to 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 - [Release notes](https://github.com/dtolnay/rust-toolchain/releases) - [Commits](https://github.com/dtolnay/rust-toolchain/compare/2c7215f132e9ebf062739d9130488b56d53c060c...6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772) Updates `actions/attest-build-provenance` from 4.1.1 to 4.2.2 - [Release notes](https://github.com/actions/attest-build-provenance/releases) - [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md) - [Commits](https://github.com/actions/attest-build-provenance/compare/0f67c3f4856b2e3261c31976d6725780e5e4c373...4d101475d8b20a2381f78447822ac1eab6504dd8) --- updated-dependencies: - dependency-name: dtolnay/rust-toolchain dependency-version: 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 dependency-type: direct:production dependency-group: all-dependencies - dependency-name: actions/attest-build-provenance dependency-version: 4.2.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cd.yml | 4 ++-- .github/workflows/ci.yml | 8 ++++---- .github/workflows/nightly-full-eval.yml | 2 +- .github/workflows/publish-crate.yml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 530e7070d..e09146fcf 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -359,7 +359,7 @@ jobs: git checkout "$TAG_NAME" - name: Set up Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: '1.92.0' @@ -712,7 +712,7 @@ jobs: # binaries in particular have no package index vouching for them the way # the wheels have PyPI's attestations (#147). - name: Attest build provenance for release assets - uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1 + uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 with: subject-path: ./release-assets/* diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c2e8b805..4ae0deb91 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: "1.92.0" @@ -83,7 +83,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: "1.92.0" @@ -193,7 +193,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: "1.92.0" components: rustfmt, clippy @@ -260,7 +260,7 @@ jobs: cache-dependency-path: 'pyproject.toml' - name: Install Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: "1.92.0" components: rustfmt, clippy diff --git a/.github/workflows/nightly-full-eval.yml b/.github/workflows/nightly-full-eval.yml index 979d2c79b..813158828 100644 --- a/.github/workflows/nightly-full-eval.yml +++ b/.github/workflows/nightly-full-eval.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: "1.92.0" diff --git a/.github/workflows/publish-crate.yml b/.github/workflows/publish-crate.yml index fd7a921ab..9243c522b 100644 --- a/.github/workflows/publish-crate.yml +++ b/.github/workflows/publish-crate.yml @@ -45,7 +45,7 @@ jobs: echo "Publishing diffctx $VERSION" - name: Set up Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # stable + uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable with: toolchain: '1.92.0' From cee06d3e753938e3634a810b7f4c9ad63ea860f7 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Mon, 10 Aug 2026 20:26:19 +0000 Subject: [PATCH 06/73] chore(deps): update pre-commit hook astral-sh/ruff-pre-commit to v0.14.14 (#9) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1075e30bf..52a2698eb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -120,7 +120,7 @@ repos: # LINTING (Ruff for speed + correctness) # ============================================================================ - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.0 + rev: v0.14.14 hooks: - id: ruff name: ruff (correctness-focused checks) From 14c27d43b3c55f3deb3125fc18ff957f2f411d3e Mon Sep 17 00:00:00 2001 From: ci-bot Date: Mon, 10 Aug 2026 20:26:20 +0000 Subject: [PATCH 07/73] chore(deps): update pre-commit hook asottile/pyupgrade to v3.21.2 (#8) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52a2698eb..3eb7c4778 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -95,7 +95,7 @@ repos: language_version: python3 - repo: https://github.com/asottile/pyupgrade - rev: v3.21.1 + rev: v3.21.2 hooks: - id: pyupgrade name: pyupgrade (auto-upgrade Python syntax) From 62fd30660a5b3ff3c8adc817aa3dc60d62c7c9ab Mon Sep 17 00:00:00 2001 From: ci-bot Date: Mon, 10 Aug 2026 20:26:22 +0000 Subject: [PATCH 08/73] chore(deps): update codecov/codecov-action digest to 0fb7174 (#5) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ae0deb91..29e7e899d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -302,7 +302,7 @@ jobs: - name: Upload coverage reports to Codecov if: runner.os == 'Linux' && matrix.python-version == '3.12' - uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v5 + uses: codecov/codecov-action@0fb7174895f61a3b6b78fc075e0cd60383518dac # v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage.xml From cca93fd0f7130b709b98f266b2ca14bea44aefa7 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Mon, 10 Aug 2026 20:26:22 +0000 Subject: [PATCH 09/73] chore(deps): update softprops/action-gh-release digest to 3bb1273 (#7) --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index e09146fcf..71baa7c10 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -717,7 +717,7 @@ jobs: subject-path: ./release-assets/* - name: Create GitHub Release with wheel and sdist assets - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v2 + uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 with: tag_name: ${{ needs.prepare-version.outputs.tag_name }} name: Release ${{ needs.prepare-version.outputs.version }} From 9011ae157175cb945f6be75cbc4a4a8a47709cfb Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Mon, 10 Aug 2026 22:30:06 +0200 Subject: [PATCH 10/73] chore(deps): update dtolnay/rust-toolchain digest to 4360b52 --- .github/workflows/cd.yml | 2 +- .github/workflows/ci.yml | 8 ++++---- .github/workflows/nightly-full-eval.yml | 2 +- .github/workflows/publish-crate.yml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 71baa7c10..c3ab739b5 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -359,7 +359,7 @@ jobs: git checkout "$TAG_NAME" - name: Set up Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: '1.92.0' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 29e7e899d..b030a26e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" @@ -83,7 +83,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" @@ -193,7 +193,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" components: rustfmt, clippy @@ -260,7 +260,7 @@ jobs: cache-dependency-path: 'pyproject.toml' - name: Install Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" components: rustfmt, clippy diff --git a/.github/workflows/nightly-full-eval.yml b/.github/workflows/nightly-full-eval.yml index 813158828..ec8a60d63 100644 --- a/.github/workflows/nightly-full-eval.yml +++ b/.github/workflows/nightly-full-eval.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" diff --git a/.github/workflows/publish-crate.yml b/.github/workflows/publish-crate.yml index 9243c522b..051bf180a 100644 --- a/.github/workflows/publish-crate.yml +++ b/.github/workflows/publish-crate.yml @@ -45,7 +45,7 @@ jobs: echo "Publishing diffctx $VERSION" - name: Set up Rust - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: '1.92.0' From 358ab8a0f90de850734d443701de6aacdd51ae93 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Mon, 10 Aug 2026 22:55:38 +0200 Subject: [PATCH 11/73] =?UTF-8?q?fix:=20QA=20sweep=20=E2=80=94=20exclusion?= =?UTF-8?q?-only=20disclosure,=20scala=20panic,=20harness=20parity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 19 +++++ QA.md | 13 ++- README.md | 4 +- action.yml | 4 +- crates/diffctx-native/src/config/selection.rs | 20 +++-- crates/diffctx-native/src/deadline.rs | 7 +- crates/diffctx-native/src/edges/mod.rs | 11 +-- .../diffctx-native/src/edges/semantic/jvm.rs | 15 +++- crates/diffctx-native/src/locate.rs | 10 +-- crates/diffctx-native/src/memory_pipeline.rs | 2 +- crates/diffctx-native/src/pybridge.rs | 4 + crates/diffctx-native/src/render.rs | 6 +- crates/diffctx-native/src/token_corpus.rs | 26 ++++-- docs/engineering/parameter-strategy.md | 21 +++-- docs/product/github-action.md | 4 +- eval/analysis/dcbench_summary.py | 71 +++++++++++----- eval/analysis/runtime_table.py | 20 +++-- eval/harness/adapters/runner.py | 3 +- eval/harness/common.py | 15 +++- eval/workflows/calibrate.py | 9 +- eval/workflows/dcbench_score.py | 85 +++++++++++-------- eval/workflows/run_final.py | 9 +- eval/workflows/stage_a_grid.sh | 9 +- src/diffctx/_app.py | 6 ++ src/diffctx/_diffctx.pyi | 1 + src/diffctx/cli.py | 4 +- src/diffctx/writer.py | 19 ++++- tests/test_excluded_changes_visibility.py | 29 +++++++ 28 files changed, 309 insertions(+), 137 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a67559e0f..fa53b655e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- **A commit touching only excluded paths now renders its disclosure** (#188 + completion): the YAML/Markdown/text renderers and the CLI's empty-diff exit + treated `ignored_changes`/`policy_excluded_count` as "no output", so the one + case the disclosure exists for — every hunk withheld — printed a bare stub + and exited 4. All three renderers, `locate`, and the exit path now count the + disclosure as content. +- **Scala import with `}` before `{` no longer panics** the edge build + (`import a}.{B` in any `.scala`/`.sbt` line aborted the whole run). +- The corpus harness (`build_diff_context_in_memory`) now passes the per-file + admission gate to selection, matching the shipped pipeline; the full corpus + is bit-stable under the fix (2902 passed, baseline unchanged). +- An absurd `timeout` value can no longer wrap the compute deadline into the + past (saturating arithmetic); the token-cache eviction sweep no longer + deletes another process's in-flight temp file. +- Text renderer writes one path per line (a comma or newline inside a path + made the joined line unparseable). + ### Changed - **New default operating point: per-file admission ON, `tau` 0.12 -> 0.05, diff --git a/QA.md b/QA.md index 4281fbef4..7c6ba1ffc 100644 --- a/QA.md +++ b/QA.md @@ -31,6 +31,15 @@ Project-specific facts for `/qa`. Generic methodology lives in without naming the service. - Push `main` to both remotes (mirror sync is periodic; direct push is immediate). +- **Forgejo's merge API can return 405 with an empty message on a merge + that SUCCEEDED.** Never read the HTTP code as the outcome — re-fetch + the PR (`state`/`merged`) before retrying or escalating; a blind retry + loop would report failure on a completed merge. +- **The v1.13.0 tag points at a commit containing unreleased work** — the + 2026-08-08 history rewrite re-anchored tags onto epoch commits, so + `git describe`/tag position cannot tell you what a release contains. + Released state is read from the registry (PyPI upload date/version), + not from the tag. ## Tests @@ -60,7 +69,9 @@ Project-specific facts for `/qa`. Generic methodology lives in - **Rust edits fight the auto-format hook**: the PostToolUse formatter orders `use` items differently from repo rustfmt; `git commit` then fails cargo-fmt. Run `cargo fmt` before every commit that touches - Rust. + Rust. **Python edits hit the same trap**: the hook applies isort's + aligned-parens import style, which repo black rewrites back — run + `pre-commit run black --files ` after Python edits. - **`DIFFCTX_PROBE_TAU`** mirrors `DIFFCTX_PROBE_MODE` in the yaml harness: measurement-only tau override, meaningful only with `DIFFCTX_YAML_IGNORE_BASELINE=1`; default run still measures the diff --git a/README.md b/README.md index 2651f34b1..332aaf8ed 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ keeps its git meaning. | `--scoring` | `ego` | `ego` = bounded expansion around changed nodes (fast, predictable radius); `ppr` = Personalized PageRank (global, smoother decay, slower); `bm25` = lexical retrieval against the diff hunks (baseline for sparse graphs); `rrf` = reciprocal-rank fusion of `ego` and `bm25` (widest recall, no scale calibration between the two signals) | | `--budget` | auto | Hard cap in o200k_base tokens (see [Token counting](docs/product/token-budget.md)): `N` enforces a fixed cap, `-1` disables it, `0` is a strict-zero floor (empty selection; use `--full` for changed files only) | | `--alpha` | 0.60 | PPR damping; higher = context clusters tighter around changes (`--scoring ppr` only) | -| `--tau` | 0.12 | Relevance threshold for full fragment content; lower-scoring fragments are stubbed or dropped (lower = more context) | +| `--tau` | 0.05 | Relevance threshold for full fragment content; lower-scoring fragments are stubbed or dropped (lower = more context) | | `--full` | false | Only the changed files, every fragment, no related-code context | | `--timeout` | 300 | Wall-clock deadline in seconds; on expiry diffctx exits 124 instead of hanging | | `--with-raw-diff` | false | Also embed git's raw unified diff ahead of the selected fragments — additive (selection unchanged), not charged to `--budget`, lock/ignored/secret-like sections omitted. Python CLI only | @@ -143,7 +143,7 @@ ctx = build_diff_context( "HEAD~1..HEAD", budget_tokens=None, # None = auto; 0 = strict-zero floor (empty); -1 = uncapped; N = hard cap alpha=0.6, - tau=0.12, + tau=0.05, full=False, scoring_mode="ego", timeout=300, diff --git a/action.yml b/action.yml index 824322f44..06e092124 100644 --- a/action.yml +++ b/action.yml @@ -39,8 +39,8 @@ inputs: tau: description: >- - Relevance threshold for full fragment content (`--tau`, default 0.12); - lower keeps more surrounding context. + Relevance threshold for full fragment content (`--tau`; defaults to the + engine's calibrated value); lower keeps more surrounding context. required: false default: '' diff --git a/crates/diffctx-native/src/config/selection.rs b/crates/diffctx-native/src/config/selection.rs index a88ff3c7a..076460357 100644 --- a/crates/diffctx-native/src/config/selection.rs +++ b/crates/diffctx-native/src/config/selection.rs @@ -1,5 +1,11 @@ use crate::config::env_overrides::{read_env_fraction, read_env_u32}; +// v5 re-calibration under per-file admission: validated winner +// (tau, cbf) = (0.05, 0.4); the tau half lives in limits.rs. Named (and +// exported through pybridge) so the Python layers read it instead of +// restating it — the same drift class as #175's tau copies. +pub const DEFAULT_CORE_BUDGET_FRACTION: f64 = 0.4; + #[derive(Clone)] pub struct SelectionConfig { pub core_budget_fraction: f64, @@ -15,11 +21,10 @@ pub struct SelectionConfig { impl Default for SelectionConfig { fn default() -> Self { Self { - // v5 re-calibration under per-file admission: validated winner - // (tau, cbf) = (0.05, 0.4); cbf margin over 0.5 is small but - // consistent in direction on both the calibration and held-out - // manifests. Surface flat and monotone, as in v4. - core_budget_fraction: 0.4, + // cbf margin over 0.5 is small but consistent in direction on + // both the calibration and held-out manifests. Surface flat and + // monotone, as in v4. + core_budget_fraction: DEFAULT_CORE_BUDGET_FRACTION, r_cap_min: 0.01, per_file_budget_fraction: 0.25, } @@ -62,7 +67,10 @@ impl Default for BoltzmannConfig { pub fn selection() -> SelectionConfig { SelectionConfig { - core_budget_fraction: read_env_fraction("DIFFCTX_OP_SELECTION_CORE_BUDGET_FRACTION", 0.4), + core_budget_fraction: read_env_fraction( + "DIFFCTX_OP_SELECTION_CORE_BUDGET_FRACTION", + DEFAULT_CORE_BUDGET_FRACTION, + ), r_cap_min: read_env_fraction("DIFFCTX_OP_SELECTION_R_CAP_MIN", 0.01), per_file_budget_fraction: read_env_fraction( "DIFFCTX_OP_SELECTION_PER_FILE_BUDGET_FRACTION", diff --git a/crates/diffctx-native/src/deadline.rs b/crates/diffctx-native/src/deadline.rs index 52ad520d9..0916cd7e5 100644 --- a/crates/diffctx-native/src/deadline.rs +++ b/crates/diffctx-native/src/deadline.rs @@ -23,7 +23,12 @@ static DEADLINE_MS: AtomicU64 = AtomicU64::new(0); pub fn set_compute_deadline(timeout_secs: u64) { let now_ms = ANCHOR.elapsed().as_millis() as u64; // +1 keeps a zero timeout distinct from the 0 = "no deadline" sentinel. - DEADLINE_MS.store(now_ms + timeout_secs * 1000 + 1, Ordering::Relaxed); + // Saturating: an absurd caller-supplied timeout must clamp to "far future", + // not wrap behind `now_ms` and fire instantly. + let deadline = now_ms + .saturating_add(timeout_secs.saturating_mul(1000)) + .saturating_add(1); + DEADLINE_MS.store(deadline, Ordering::Relaxed); } pub fn check_compute_deadline(phase: &str) { diff --git a/crates/diffctx-native/src/edges/mod.rs b/crates/diffctx-native/src/edges/mod.rs index 44a2162c9..3741015dd 100644 --- a/crates/diffctx-native/src/edges/mod.rs +++ b/crates/diffctx-native/src/edges/mod.rs @@ -356,11 +356,12 @@ pub fn naming_reachable_files( max_depth: usize, ) -> rustc_hash::FxHashSet> { let n = capped.idx_to_node.len(); - // Undirected on purpose: a naming edge relates the PAIR of files. The - // reverse emission carries weight*reverse_factor and lands below the - // naming floor, so a directed walk would reach only the changed set's - // dependencies and never its consumers — measured as 24 broken - // consumer-pull corpus cases (php one-hop, terraform dependents, DI). + // Undirected on purpose: a naming edge relates the PAIR of files. For + // several channels the reverse emission (weight*reverse_factor) lands + // below the naming floor, so a directed walk would reach the changed + // set's dependencies but not all of its consumers — measured as 24 + // broken consumer-pull corpus cases (php one-hop, terraform dependents, + // DI). let mut adj: Vec> = vec![Vec::new(); n]; for e in &capped.edges { if e.naming { diff --git a/crates/diffctx-native/src/edges/semantic/jvm.rs b/crates/diffctx-native/src/edges/semantic/jvm.rs index fca1f8fe8..a60f2ace8 100644 --- a/crates/diffctx-native/src/edges/semantic/jvm.rs +++ b/crates/diffctx-native/src/edges/semantic/jvm.rs @@ -178,7 +178,11 @@ fn parse_scala_import_clause(clause: &str) -> Option { } if let Some(bpos) = clause.find('{') { let prefix = clause[..bpos].trim().trim_end_matches('.').to_string(); - let inner_end = clause.rfind('}').unwrap_or(clause.len()); + let inner_end = match clause.rfind('}') { + Some(p) if p > bpos => p, + Some(_) => return None, + None => clause.len(), + }; let inner = &clause[bpos + 1..inner_end]; let mut selectors = Vec::new(); let mut wildcard = false; @@ -828,6 +832,15 @@ mod tests { imports.remove(0) } + #[test] + fn scala_import_with_brace_before_open_brace_is_rejected_not_a_panic() { + assert!(parse_scala_import_clause("a}.{B").is_none()); + assert!(parse_scala_import_clause("}x{").is_none()); + let open_only = parse_scala_import_clause("http.{Request").expect("still parses"); + assert_eq!(open_only.prefix, "http"); + assert_eq!(open_only.selectors, vec!["Request".to_string()]); + } + #[test] fn scala_import_captures_the_class_not_a_truncated_prefix() { let imp = parse_one("repo.UserRepository"); diff --git a/crates/diffctx-native/src/locate.rs b/crates/diffctx-native/src/locate.rs index 1e39610f4..d689cd36e 100644 --- a/crates/diffctx-native/src/locate.rs +++ b/crates/diffctx-native/src/locate.rs @@ -25,7 +25,7 @@ pub struct LocateOutput { pub lockfile_changes: Vec, #[serde(skip_serializing_if = "Vec::is_empty", default)] pub ignored_changes: Vec, - #[serde(skip_serializing_if = "crate::render::is_zero_pub", default)] + #[serde(skip_serializing_if = "crate::render::is_zero", default)] pub policy_excluded_count: usize, pub budget_tokens: u32, /// Blast-radius counts over the ranked items (#135): distinct files, @@ -45,16 +45,12 @@ pub struct LocateOutput { #[serde(skip_serializing_if = "Vec::is_empty")] pub overflow: Vec, /// True total behind `overflow`, which is capped at `MAX_OVERFLOW_ITEMS`. - #[serde(skip_serializing_if = "is_zero")] + #[serde(skip_serializing_if = "crate::render::is_zero")] pub overflow_count: usize, } // The reference is serde's contract for `skip_serializing_if`, not a choice. #[allow(clippy::trivially_copy_pass_by_ref)] -fn is_zero(n: &usize) -> bool { - *n == 0 -} - /// The overflow list is a pointer to what was skipped, not a second selection. /// Past this many entries it stops being a hint and starts being the cost the /// budget existed to avoid. @@ -85,7 +81,7 @@ pub struct Coverage { /// candidates the budget correctly ignored; "scores at least as high as the /// weakest selected item" was worse than useless, because raising the budget /// lowers that bar and so *increased* the reported gap. - #[serde(skip_serializing_if = "is_zero")] + #[serde(skip_serializing_if = "crate::render::is_zero")] pub next_up: usize, /// Documented heuristic in [0, 1], NOT a probability and not a promise: /// `parsed_share * linked_share * fit_share`, less 0.1 when PPR truncated. diff --git a/crates/diffctx-native/src/memory_pipeline.rs b/crates/diffctx-native/src/memory_pipeline.rs index 26285cd98..fdb2c57cd 100644 --- a/crates/diffctx-native/src/memory_pipeline.rs +++ b/crates/diffctx-native/src/memory_pipeline.rs @@ -140,7 +140,7 @@ pub fn build_diff_context_in_memory( tau, Some(&file_importance), Some(&core_excerpts), - None, + scoring_result.admissible_files.as_ref(), ); let mut selected = selection.selected; diff --git a/crates/diffctx-native/src/pybridge.rs b/crates/diffctx-native/src/pybridge.rs index 71e913e44..9a3ce7689 100644 --- a/crates/diffctx-native/src/pybridge.rs +++ b/crates/diffctx-native/src/pybridge.rs @@ -650,6 +650,10 @@ pub fn _diffctx(m: &Bound<'_, PyModule>) -> PyResult<()> { // apart across the harnesses in the first place. m.add("DEFAULT_TAU", DEFAULT_STOPPING_THRESHOLD)?; m.add("DEFAULT_ALPHA", DEFAULT_PPR_ALPHA)?; + m.add( + "DEFAULT_CORE_BUDGET_FRACTION", + crate::config::selection::DEFAULT_CORE_BUDGET_FRACTION, + )?; m.add("DEFAULT_SCORING", DEFAULT_SCORING)?; // Same reason as the constants above: the Python CLI enumerated the accepted // --scoring values in its own literal and fell out of step the moment a mode diff --git a/crates/diffctx-native/src/render.rs b/crates/diffctx-native/src/render.rs index a79858fb5..8ba36add8 100644 --- a/crates/diffctx-native/src/render.rs +++ b/crates/diffctx-native/src/render.rs @@ -23,11 +23,7 @@ pub struct ChangeSummary { pub policy_excluded_count: usize, } -fn is_zero(n: &usize) -> bool { - *n == 0 -} - -pub fn is_zero_pub(n: &usize) -> bool { +pub fn is_zero(n: &usize) -> bool { *n == 0 } diff --git a/crates/diffctx-native/src/token_corpus.rs b/crates/diffctx-native/src/token_corpus.rs index e130632dd..bcc0f0193 100644 --- a/crates/diffctx-native/src/token_corpus.rs +++ b/crates/diffctx-native/src/token_corpus.rs @@ -90,7 +90,7 @@ impl TokenCorpus { .collect(); if let Some(store) = store.as_ref() { - store.evict_one_shard(); + store.evict_window_of_shards(); } tracing::debug!( @@ -220,9 +220,9 @@ impl TokenCacheStore { // Entries are written once and never rewritten, so nothing ages out on its // own and the cache grows with every repository ever analyzed. Walking all // 256 shards per run would cost more than the cache saves, so each run - // enforces the per-shard share of the size cap on ONE shard; every shard is - // reached within a few hundred runs. - fn evict_one_shard(&self) { + // enforces the per-shard share of the size cap on a bounded WINDOW of + // shards; the sweep covers the whole table every 256/WINDOW runs. + fn evict_window_of_shards(&self) { let Some(max_bytes) = cache_max_bytes() else { return; }; @@ -273,11 +273,19 @@ fn evict_shard(shard_dir: &Path, shard_max_bytes: u64) { if !meta.is_file() { return None; } - Some(( - meta.modified().unwrap_or(std::time::UNIX_EPOCH), - meta.len(), - e.path(), - )) + let modified = meta.modified().unwrap_or(std::time::UNIX_EPOCH); + // A fresh `.tmp` is another process's staged write sitting between + // fs::write and fs::rename — deleting it makes that rename fail and + // silently loses the entry. Old ones are crash leftovers: evictable. + if e.path().extension().is_some_and(|x| x == "tmp") + && modified + .elapsed() + .map(|age| age.as_secs() < 60) + .unwrap_or(true) + { + return None; + } + Some((modified, meta.len(), e.path())) }) .collect(); diff --git a/docs/engineering/parameter-strategy.md b/docs/engineering/parameter-strategy.md index 49f8df44a..b91fac5c8 100644 --- a/docs/engineering/parameter-strategy.md +++ b/docs/engineering/parameter-strategy.md @@ -35,12 +35,16 @@ are the stopping threshold $\tau$ and the core budget fraction $\beta_{core}$ (paper: §"Edge-Type Weight Priors and Operational Calibration" and §"Calibration Protocol"). Calibration is a 5×3 grid search over $(\tau, \beta_{core})$ on the frozen calibration manifests, -validated on a held-out manifest; the validated winner is -$\tau = 0.12$, $\beta_{core} = 0.5$, which the deployed defaults carry: - -- $\tau$ — `DEFAULT_STOPPING_THRESHOLD = 0.12` in `config/limits.rs`, - user-overridable via the `--tau` CLI flag only (no env var). -- $\beta_{core}$ — `core_budget_fraction = 0.5` in +validated on a held-out manifest. The v2-cycle winner was +$\tau = 0.12$, $\beta_{core} = 0.5$; the v5 cycle re-validated the +operating point together with the per-file admission gate (#65), and +the deployed defaults now carry $\tau = 0.05$, $\beta_{core} = 0.4$: + +- $\tau$ — `DEFAULT_STOPPING_THRESHOLD = 0.05` in `config/limits.rs`, + user-overridable via the `--tau` CLI flag only (no env var). The weak + stop ships only together with the admission gate — without it, + $\tau = 0.05$ re-admits the diffuse tail the gate exists to block. +- $\beta_{core}$ — `core_budget_fraction = 0.4` in `config/selection.rs`, env-overridable via `DIFFCTX_OP_SELECTION_CORE_BUDGET_FRACTION` for sweeps. @@ -116,7 +120,10 @@ it) to enable the sweep without rebuild. > **Not a stable interface.** The `DIFFCTX_OP_*` overrides — along with the > other internal toggles (`DIFFCTX_OBJECTIVE`, `DIFFCTX_EGO_*`, -> `DIFFCTX_NO_COMMIT_SIGNAL`, `DIFFCTX_MAX_FRAGMENTS`, and the +> `DIFFCTX_NO_COMMIT_SIGNAL`, `DIFFCTX_MAX_FRAGMENTS`, +> `DIFFCTX_FILE_ADMISSION`, `DIFFCTX_FILE_STAR`, `DIFFCTX_PIT_SHAPE`, +> `DIFFCTX_PIT_TRANSFORM`, `DIFFCTX_MAX_EDGES_PER_NODE`, +> `DIFFCTX_TRACE_BUILDERS`, and the > `DIFFCTX_PROVENANCE_DUMP=` per-candidate telemetry sink) — are experimental > calibration knobs for research and sensitivity analysis, not a supported > public API. They are undocumented in `--help` on purpose and may change or diff --git a/docs/product/github-action.md b/docs/product/github-action.md index 0ed0989ac..ba7e418be 100644 --- a/docs/product/github-action.md +++ b/docs/product/github-action.md @@ -52,8 +52,8 @@ leaves the CLI default in place. | `diff-range` | auto | `--diff` | `main..HEAD`, `..`, … | | `budget` | auto | `--budget` | Token cap; `-1` unlimited, `0` strict-zero floor | | `scoring` | `ego` | `--scoring` | `ego`, `ppr`, `bm25`, `rrf` | -| `tau` | CLI default (0.12) | `--tau` | Relevance threshold for full fragment content | -| `alpha` | CLI default (0.60) | `--alpha` | PPR damping; only affects `scoring: ppr` | +| `tau` | CLI default | `--tau` | Relevance threshold for full fragment content | +| `alpha` | CLI default | `--alpha` | PPR damping; only affects `scoring: ppr` | | `full` | `false` | `--full` | Changed files only, every fragment, no related code | | `format` | `md` | `--format` | `md`, `yaml`, `json`, `txt` | | `output-path` | `$RUNNER_TEMP/diffctx-context.` | `--output-file` | Where to write | diff --git a/eval/analysis/dcbench_summary.py b/eval/analysis/dcbench_summary.py index c57c112de..d14f5cb3e 100644 --- a/eval/analysis/dcbench_summary.py +++ b/eval/analysis/dcbench_summary.py @@ -52,6 +52,8 @@ def nontrivial_gold(instance_id: str) -> set[str]: def _hit_rate(gold: set[str], selected: set[str]) -> float: # Same suffix match the runner scores with: gold is repo-relative, the # renderer emits worktree-relative paths. + if not gold: + return 0.0 hits = sum(1 for g in gold if any(s == g or s.endswith("/" + g) for s in selected)) return hits / len(gold) @@ -97,8 +99,8 @@ def _load_modes(root: Path, subset: str | None) -> dict[str, dict[str, dict]]: def _print_coverage(modes: dict[str, dict[str, dict]]) -> None: - print("## Coverage (all instances attempted)\n") - print("| mode | attempted | produced | hang | other |") + print("## Coverage (rows written per mode)\n") + print("| mode | rows | produced | hang | other |") print("|---|---:|---:|---:|---:|") for m, rows in modes.items(): st = [r.get("status") for r in rows.values()] @@ -106,27 +108,47 @@ def _print_coverage(modes: dict[str, dict[str, dict]]) -> None: f"| {m} | {len(st)} | {st.count('produced')} | {st.count('hang')} | " f"{len(st) - st.count('produced') - st.count('hang')} |" ) + counts = {m: len(rows) for m, rows in modes.items()} + if len(set(counts.values())) > 1: + lo = min(counts, key=lambda m: counts[m]) + hi = max(counts, key=lambda m: counts[m]) + print( + f"\n**WARNING: unequal row counts ({lo}={counts[lo]} vs {hi}={counts[hi]}).** " + "A half-collected mode shrinks the paired set for every mode below; " + "treat all paired numbers as provisional until the counts agree." + ) def _paired_sets(modes: dict[str, dict[str, dict]]) -> tuple[set[str], list[str]]: shared = set.intersection(*[{i for i, r in rows.items() if r.get("status") == "produced"} for rows in modes.values()]) print(f"\nPaired set: **{len(shared)}** instances produced by every mode.\n") - # Retrieval is only measurable where there is something to retrieve. - with_nt = sorted(i for i in shared if (next(iter(modes.values()))[i].get("n_nontrivial") or 0) > 0) + # Retrieval is only measurable where there is something to retrieve. Read + # the count from every mode, not an arbitrary one: a mode whose rows + # predate the field would otherwise silently empty this set and with it + # the whole statistical section. + with_nt = sorted(i for i in shared if any((rows[i].get("n_nontrivial") or 0) > 0 for rows in modes.values())) + if shared and not with_nt: + print("**WARNING: no row in any mode carries n_nontrivial > 0** — bootstrap and ceiling sections are skipped.\n") print(f"Of those, **{len(with_nt)}** carry at least one nontrivial gold file.\n") return shared, with_nt +def _paired_pool(modes: dict[str, dict[str, dict]], ids: list[str], metric: str) -> list[str]: + # A metric that is None in ONE mode (precision_labelled: nothing labelled + # was selected) must drop the instance for EVERY mode, or the whiffing + # mode is scored on an easier subset under a header that promises pairing. + return [i for i in ids if all(rows[i].get(metric) is not None for rows in modes.values())] + + def _print_paired_means(modes: dict[str, dict[str, dict]], shared: set[str], with_nt: list[str]) -> None: print("## Paired means\n") + pools = {k: _paired_pool(modes, with_nt if k == "recall_nontrivial" else sorted(shared), k) for k in METRICS} + print("per-metric paired n: " + ", ".join(f"{k}={len(pools[k])}" for k in METRICS) + "\n") print("| mode | " + " | ".join(METRICS) + " |") print("|---" * (len(METRICS) + 1) + "|") for m, rows in modes.items(): - cells = [] - for k in METRICS: - pool = with_nt if k == "recall_nontrivial" else sorted(shared) - cells.append(str(_mean([rows[i].get(k) for i in pool]))) + cells = [str(_mean([rows[i].get(k) for i in pools[k]])) for k in METRICS] print(f"| {m} | " + " | ".join(cells) + " |") @@ -134,11 +156,14 @@ def _print_bootstrap(modes: dict[str, dict[str, dict]], base: str, with_nt: list print(f"\n## Nontrivial recall vs {base} (paired bootstrap 95% CI)\n") print("| mode | delta | CI low | CI high | excludes zero |") print("|---|---:|---:|---:|---|") - b = [modes[base][i].get("recall_nontrivial") or 0.0 for i in with_nt] + pool = _paired_pool(modes, with_nt, "recall_nontrivial") + if len(pool) < len(with_nt): + print(f"(n={len(pool)}; {len(with_nt) - len(pool)} instances dropped — recall_nontrivial missing in some mode)\n") + b = [modes[base][i]["recall_nontrivial"] for i in pool] for m, rows in modes.items(): if m == base: continue - a = [rows[i].get("recall_nontrivial") or 0.0 for i in with_nt] + a = [rows[i]["recall_nontrivial"] for i in pool] lo, hi = paired_bootstrap(a, b) d = round(statistics.mean(a) - statistics.mean(b), 4) print(f"| {m} | {d:+.4f} | {lo:+.4f} | {hi:+.4f} | {'yes' if lo > 0 or hi < 0 else 'no'} |") @@ -178,16 +203,22 @@ def main() -> None: e_only.append(_hit_rate(gold, e)) l_only.append(_hit_rate(gold, x)) ceil.append(_hit_rate(gold, e | x)) - print(f"- ego nontrivial recall: {statistics.mean(e_only):.4f}") - print(f"- bm25 nontrivial recall: {statistics.mean(l_only):.4f}") - print(f"- union ceiling: {statistics.mean(ceil):.4f}") - print(f"- headroom over ego: {statistics.mean(ceil) - statistics.mean(e_only):+.4f}") - print( - "\nThe ceiling is an oracle: it credits a gold file if either arm surfaced " - "it, with no mechanism able to choose. Fusion cannot exceed it. Headroom " - "at or near zero means fusion had nothing to win here and the remaining " - "loss is candidate supply (#130), not ranking (#125)." - ) + if not ceil: + print( + "**Skipped: no annotation.yaml found for any paired instance** — " + f"the ceiling reads gold from {INSTANCES}, which must be checked out." + ) + else: + print(f"- ego nontrivial recall: {statistics.mean(e_only):.4f} (n={len(ceil)}, re-read from today's annotations)") + print(f"- bm25 nontrivial recall: {statistics.mean(l_only):.4f}") + print(f"- union ceiling: {statistics.mean(ceil):.4f}") + print(f"- headroom over ego: {statistics.mean(ceil) - statistics.mean(e_only):+.4f}") + print( + "\nThe ceiling is an oracle: it credits a gold file if either arm surfaced " + "it, with no mechanism able to choose. Fusion cannot exceed it. Headroom " + "at or near zero means fusion had nothing to win here and the remaining " + "loss is candidate supply (#130), not ranking (#125)." + ) print("\n## Per-repo nontrivial recall\n") repos = sorted({modes[base][i]["repo"] for i in with_nt}) if base in modes else [] diff --git a/eval/analysis/runtime_table.py b/eval/analysis/runtime_table.py index b9424a49c..984fcf6e7 100644 --- a/eval/analysis/runtime_table.py +++ b/eval/analysis/runtime_table.py @@ -37,20 +37,22 @@ def pct(vals: list[float], q: float) -> float: return s[min(len(s) - 1, int(q * len(s)))] -def _load_rows(cp: Path) -> list[tuple[float, dict]]: +def _load_rows(cp: Path) -> tuple[list[tuple[float, dict]], int]: rows = [] + n_total = 0 for line in cp.read_text().splitlines(): if not line.strip(): continue + n_total += 1 r = json.loads(line) lb = (r.get("extra") or {}).get("latency_breakdown") total = (r.get("extra") or {}).get("latency_total_ms") if lb and total is not None: rows.append((float(total), lb)) - return rows + return rows, n_total -def _table_line(cell: Path, cp: Path, rows: list[tuple[float, dict]]) -> str: +def _table_line(cell: Path, cp: Path, rows: list[tuple[float, dict]], n_total: int) -> str: totals = [t for t, _ in rows] rss = [lb.get("peak_rss_bytes", 0) / 1e6 for _, lb in rows if lb.get("peak_rss_bytes")] edges = [lb.get("edge_count", 0) for _, lb in rows] @@ -61,7 +63,7 @@ def _table_line(cell: Path, cp: Path, rows: list[tuple[float, dict]]) -> str: top_s = ", ".join(f"{k.removesuffix('_ms')} {v / grand:.0%}" for k, v in top) bench = cp.name.replace(".checkpoint.jsonl", "") return ( - f"| {cell.name} | {bench} | {len(rows)} " + f"| {cell.name} | {bench} | {len(rows)}/{n_total} " f"| {pct(totals, 0.5):.0f}/{pct(totals, 0.9):.0f}/{pct(totals, 0.99):.0f} " f"| {pct(rss, 0.5):.0f}/{pct(rss, 0.99):.0f} " f"| {pct(edges, 0.5):.0f} ({pct(pre, 0.5):.0f}) " @@ -78,16 +80,20 @@ def main() -> None: print("# Appendix B — runtime and memory telemetry (#168)\n") print(f"Source: per-instance `latency_breakdown` in `{root}` checkpoints; ok rows only.\n") print( - "| cell | benchmark | n | total p50/p90/p99 ms | peak RSS p50/p99 MB | " + "Percentiles are over the ok rows alone; the n column carries the " + "denominator so a timeout-heavy cell cannot pose as a fast one.\n" + ) + print( + "| cell | benchmark | n ok/rows | total p50/p90/p99 ms | peak RSS p50/p99 MB | " "edges p50 (pre-cap p50) | dominant phases (share of summed phase time) |" ) print("|---|---|---:|---|---|---|---|") for cell in sorted(d for d in root.iterdir() if d.is_dir()): for cp in sorted(cell.glob("*.checkpoint.jsonl")): - rows = _load_rows(cp) + rows, n_total = _load_rows(cp) if rows: - print(_table_line(cell, cp, rows)) + print(_table_line(cell, cp, rows, n_total)) if __name__ == "__main__": diff --git a/eval/harness/adapters/runner.py b/eval/harness/adapters/runner.py index 5da25eae2..6c5487c0a 100644 --- a/eval/harness/adapters/runner.py +++ b/eval/harness/adapters/runner.py @@ -8,6 +8,7 @@ from pathlib import Path from typing import Any +from diffctx._diffctx import DEFAULT_CORE_BUDGET_FRACTION as _ENGINE_DEFAULT_CBF from diffctx._diffctx import DEFAULT_TAU as _ENGINE_DEFAULT_TAU from eval.harness.adapters.base import BenchmarkAdapter, BenchmarkInstance, EvalResult @@ -28,7 +29,7 @@ class RunParams: # shipped tau once already (#175). The v5 operating point is (0.05, 0.4) # under per-file admission; see config/limits.rs for the evidence chain. tau: float = _ENGINE_DEFAULT_TAU - core_budget_fraction: float = 0.4 + core_budget_fraction: float = _ENGINE_DEFAULT_CBF budget: int = 8000 scoring: str = "ego" extra_env: dict[str, str] = field(default_factory=dict) diff --git a/eval/harness/common.py b/eval/harness/common.py index f5d74ec09..c5c1614e6 100644 --- a/eval/harness/common.py +++ b/eval/harness/common.py @@ -427,18 +427,27 @@ def prune_dead_worker_worktrees(repos_dir: Path) -> int: Worker dirs are keyed `worktrees/w` (or `w_`); nothing removed them when a worker exited, so every cell of a sweep left its full checkouts behind — 606 stale trees / ~200 GB filled the disk mid-sweep. - A dir is deleted only when its embedded pid is not alive, so this is safe - to run while another sweep is in flight (pid reuse merely defers a dir to - the next sweep). Returns the number of dirs removed. + A dir is deleted only when its embedded pid is not alive AND the dir was + minted in this process's own pid namespace: four containerized runners + share the cache mount, and a peer's live pid looks dead from here, so + only dirs carrying our own runner slug (or bare `w` dirs when no + slug is set) are candidates. Pid reuse merely defers a dir to the next + sweep. Returns the number of dirs removed. """ root = repos_dir / "worktrees" if not root.exists(): return 0 + runner = os.environ.get("RUNNER_NAME", "").replace("-", "_").replace(" ", "_") removed = 0 for d in root.iterdir(): name = d.name if not name.startswith("w"): continue + if runner: + if not name.startswith(f"w{runner}_"): + continue + elif "_" in name: + continue pid_part = name.rsplit("_", 1)[-1].lstrip("w") try: pid = int(pid_part) diff --git a/eval/workflows/calibrate.py b/eval/workflows/calibrate.py index 77a5ddf94..2ac205c09 100644 --- a/eval/workflows/calibrate.py +++ b/eval/workflows/calibrate.py @@ -19,12 +19,7 @@ from pathlib import Path from eval.datasets.build_splits import default_calibration_pool_adapters, default_test_adapters -from eval.harness.adapters.calibrate import ( - GridSpec, - evaluate_grid_cached, - render_grid_report, - top_k_trials, -) +from eval.harness.adapters.calibrate import GridSpec, evaluate_grid_cached, render_grid_report, top_k_trials from eval.harness.adapters.runner import filter_instances_by_manifest, read_manifest from eval.harness.adapters.runtime_probe import probe_resources, report_and_maybe_exit from eval.harness.common import repos_dir as default_repos_dir @@ -121,7 +116,7 @@ def main() -> int: from eval.harness.common import prune_dead_worker_worktrees - prune_dead_worker_worktrees(Path.home() / ".cache" / "contextbench_repos") + prune_dead_worker_worktrees(repo_root) eval_all_cells_fn = make_diffctx_eval_all_cells_fn(repo_root) args.out.mkdir(parents=True, exist_ok=True) checkpoint_dir = args.out / "checkpoints" diff --git a/eval/workflows/dcbench_score.py b/eval/workflows/dcbench_score.py index 73712f4e1..43f2d1335 100644 --- a/eval/workflows/dcbench_score.py +++ b/eval/workflows/dcbench_score.py @@ -24,7 +24,9 @@ import argparse import concurrent.futures import json +import os import re +import signal import subprocess import time from pathlib import Path @@ -50,7 +52,7 @@ def load_instances() -> list[dict]: def ensure_worktree(repo: str, root: Path) -> Path: - if not _REPO_NAME_RE.fullmatch(repo): + if repo.strip(".") == "" or not _REPO_NAME_RE.fullmatch(repo): raise ValueError(f"dataset repo name is not a bare name: {repo!r}") wt = root / "wt" / repo if (wt / ".git").exists(): @@ -60,6 +62,7 @@ def ensure_worktree(repo: str, root: Path) -> Path: ["git", "-C", str(CLONES / repo), "worktree", "add", "--detach", "-f", str(wt), "HEAD"], check=True, capture_output=True, + timeout=900, ) return wt @@ -70,7 +73,12 @@ def checkout(wt: Path, sha: str) -> bool: capture_output=True, timeout=900, ) - return r.returncode == 0 + if r.returncode != 0: + return False + # Untracked leftovers from a dirty parent clone would enter the candidate + # universe for every instance of this repo (run-order-dependent drift). + subprocess.run(["git", "-C", str(wt), "clean", "-fdq"], capture_output=True, timeout=900) + return True def run_one( @@ -84,45 +92,54 @@ def run_one( ) -> dict: if not _COMMIT_RE.fullmatch(sha): return {"status": "bad_sha", "elapsed_s": 0.0} - env = None - if extra_env: - import os - - env = dict(os.environ, **extra_env) + env = dict(os.environ, **extra_env) if extra_env else None started = time.monotonic() - try: - proc = subprocess.run( - [ - str(NATIVE), - str(wt), - "--diff", - f"{sha}^..{sha}", - "-f", - "json", - "-q", - "--scoring", - mode, - "--budget", - str(budget), - "--timeout", - str(timeout_s), - ] - + (["--tau", str(tau)] if tau is not None else []), - capture_output=True, - text=True, - timeout=timeout_s + 30, - env=env, - ) - except subprocess.TimeoutExpired: - return {"status": "hang", "elapsed_s": round(time.monotonic() - started, 1)} + argv = [ + str(NATIVE), + str(wt), + "--diff", + f"{sha}^..{sha}", + "-f", + "json", + "-q", + "--scoring", + mode, + "--budget", + str(budget), + "--timeout", + str(timeout_s), + ] + (["--tau", str(tau)] if tau is not None else []) + # Own session so a timeout kills the whole process group — the direct + # child alone leaves forked grandchildren running past the cap. + with subprocess.Popen( + argv, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + env=env, + start_new_session=True, + ) as proc: + try: + stdout, stderr = proc.communicate(timeout=timeout_s + 30) + except subprocess.TimeoutExpired: + try: + os.killpg(proc.pid, signal.SIGKILL) + except ProcessLookupError: + pass + proc.wait() + return {"status": "hang", "elapsed_s": round(time.monotonic() - started, 1)} elapsed = round(time.monotonic() - started, 1) - if proc.returncode != 0 or not proc.stdout.strip(): + if proc.returncode != 0 or not stdout.strip(): + if "unknown revision" in (stderr or ""): + # `^..` has no parent side on a root commit; an explicit + # status keeps it out of the no_output bucket. + return {"status": "root_commit", "elapsed_s": elapsed, "rc": proc.returncode} kind = "hang" if proc.returncode in (124, 143) else "no_output" return {"status": kind, "elapsed_s": elapsed, "rc": proc.returncode} try: - doc = json.loads(proc.stdout) + doc = json.loads(stdout) except json.JSONDecodeError: return {"status": "bad_json", "elapsed_s": elapsed} diff --git a/eval/workflows/run_final.py b/eval/workflows/run_final.py index 8957eb7cd..35e376828 100644 --- a/eval/workflows/run_final.py +++ b/eval/workflows/run_final.py @@ -20,12 +20,7 @@ from eval.datasets.build_splits import default_calibration_pool_adapters, default_test_adapters from eval.harness.adapters.evaluator import UniversalEvaluator -from eval.harness.adapters.final_eval import ( - aggregate_by_language, - aggregate_test_set, - render_language_table, - render_paper_table, -) +from eval.harness.adapters.final_eval import aggregate_by_language, aggregate_test_set, render_language_table, render_paper_table from eval.harness.adapters.runner import ( RunParams, filter_instances_by_manifest, @@ -503,7 +498,7 @@ def main() -> int: from eval.harness.common import prune_dead_worker_worktrees - prune_dead_worker_worktrees(Path.home() / ".cache" / "contextbench_repos") + prune_dead_worker_worktrees(repo_root) eval_fn = _make_eval_fn(args.baseline, repo_root, request_timeout=args.aider_request_timeout) eval_all_cells_fn = ( make_diffctx_eval_all_cells_fn(repo_root) if args.baseline == "diffctx" and len(budgets_list) > 1 else None diff --git a/eval/workflows/stage_a_grid.sh b/eval/workflows/stage_a_grid.sh index 80b7ba5d0..4c663b67b 100755 --- a/eval/workflows/stage_a_grid.sh +++ b/eval/workflows/stage_a_grid.sh @@ -26,9 +26,12 @@ for adm in 0 1; do dcargs=(--mode "$mode" --tau "$tau" --out "$OUT/$cell" --budget 8000 --timeout 60) [[ "$adm" == 1 ]] && dcargs+=(--env DIFFCTX_FILE_ADMISSION=1) [[ "$mode" == pit ]] && dcargs+=(--env DIFFCTX_PIT_BLEND=1.0) - python -m eval dcbench-score "${dcargs[@]}" >"$OUT/$cell.dcbench.log" 2>&1 - touch "$OUT/$cell.done" - echo "=== $(date +%F' '%T) $cell done" + if python -m eval dcbench-score "${dcargs[@]}" >"$OUT/$cell.dcbench.log" 2>&1; then + touch "$OUT/$cell.done" + echo "=== $(date +%F' '%T) $cell done" + else + echo "=== $(date +%F' '%T) $cell FAILED (see $OUT/$cell.dcbench.log) — left undone for resume" + fi done done done diff --git a/src/diffctx/_app.py b/src/diffctx/_app.py index d8a6dac94..cd45c3dd8 100644 --- a/src/diffctx/_app.py +++ b/src/diffctx/_app.py @@ -83,6 +83,10 @@ def _ensure_git_repo(root_dir: Path, prog: str) -> None: def _diff_result_is_empty(result: dict[str, Any]) -> bool: if result.get("deleted_files") or result.get("renamed_files") or result.get("lockfile_changes"): return False + # A run whose every hunk was withheld still produced the disclosure (#188); + # exiting 4 would replace that disclosure with a misleading "no context" hint. + if result.get("ignored_changes") or result.get("policy_excluded_count"): + return False # A bundled patch is actionable output on its own; exiting 4 next to a # complete diff fails any `set -e` CI step for a run that produced content. if result.get("raw_diff"): @@ -489,6 +493,8 @@ def _run_locate_mode(args: ParsedArgs, prog: str) -> None: and not doc.get("deleted_files") and not doc.get("renamed_files") and not doc.get("lockfile_changes") + and not doc.get("ignored_changes") + and not doc.get("policy_excluded_count") ) if is_empty: print( diff --git a/src/diffctx/_diffctx.pyi b/src/diffctx/_diffctx.pyi index d9372df07..6f1b7daf0 100644 --- a/src/diffctx/_diffctx.pyi +++ b/src/diffctx/_diffctx.pyi @@ -100,5 +100,6 @@ def graph_to_graphml_string(pg: PyProjectGraph) -> str: ... # harnesses read them instead of each restating the number (#175). DEFAULT_TAU: float DEFAULT_ALPHA: float +DEFAULT_CORE_BUDGET_FRACTION: float DEFAULT_SCORING: str SCORING_MODES: list[str] diff --git a/src/diffctx/cli.py b/src/diffctx/cli.py index 6f92dbf75..7a01ff899 100644 --- a/src/diffctx/cli.py +++ b/src/diffctx/cli.py @@ -540,7 +540,7 @@ def _build_main_parser(prog: str = "diffctx", version: str = __version__) -> arg metavar="FLOAT", help=( "PPR damping: how tightly context clusters around changes, 0-1 exclusive " - "(default: 0.60, higher = more focused). Only affects --scoring ppr" + f"(default: {_DEFAULT_ALPHA:.2f}, higher = more focused). Only affects --scoring ppr" ), ) diff_group.add_argument( @@ -549,7 +549,7 @@ def _build_main_parser(prog: str = "diffctx", version: str = __version__) -> arg default=_UNSET, metavar="FLOAT", help=( - "Relevance threshold for full fragment content, >= 0 (default: 0.05). " + f"Relevance threshold for full fragment content, >= 0 (default: {_DEFAULT_TAU:g}). " "Fragments scoring below it are reduced to signature stubs or dropped; " "higher = leaner output, lower = more surrounding context" ), diff --git a/src/diffctx/writer.py b/src/diffctx/writer.py index 945aa122e..74526e3f2 100644 --- a/src/diffctx/writer.py +++ b/src/diffctx/writer.py @@ -148,6 +148,8 @@ def _has_diff_metadata(tree: dict[str, Any]) -> bool: or tree.get("changed_files") or tree.get("commit_message") or tree.get("lockfile_changes") + or tree.get("ignored_changes") + or tree.get("policy_excluded_count") or tree.get("raw_diff") ) @@ -262,19 +264,28 @@ def _write_text_fragment(file: TextIO, frag: dict[str, Any], indent: str = "") - file.write(f"{content_indent}{line}\n") +def _write_text_path_list(file: TextIO, label: str, paths: list[Any]) -> None: + # One path per line: a comma or newline inside a path (git emits both + # unquoted under core.quotePath=false) would make a joined line unparseable. + file.write(f" {label}:\n") + for path in paths: + p = str(path).replace("\\", "\\\\").replace("\n", "\\n").replace("\r", "\\r") + file.write(f" {p}\n") + + def _write_tree_text_diff_context(file: TextIO, tree: dict[str, Any]) -> None: if tree.get("commit_message"): file.write(f" change: {tree['commit_message']}\n") if tree.get("changed_files"): - file.write(f" changed files: {', '.join(str(p) for p in tree['changed_files'])}\n") + _write_text_path_list(file, "changed files", tree["changed_files"]) if tree.get("deleted_files"): - file.write(f" deleted files: {', '.join(str(p) for p in tree['deleted_files'])}\n") + _write_text_path_list(file, "deleted files", tree["deleted_files"]) for pair in tree.get("renamed_files", []): file.write(f" renamed: {pair.get('from', '')} -> {pair.get('to', '')}\n") if tree.get("lockfile_changes"): - file.write(f" lock files changed: {', '.join(str(p) for p in tree['lockfile_changes'])}\n") + _write_text_path_list(file, "lock files changed", tree["lockfile_changes"]) if tree.get("ignored_changes"): - file.write(f" changed but excluded by ignore rules: {', '.join(str(p) for p in tree['ignored_changes'])}\n") + _write_text_path_list(file, "changed but excluded by ignore rules", tree["ignored_changes"]) if tree.get("policy_excluded_count"): file.write(f" changed files withheld by .diffctx/ignore: {tree['policy_excluded_count']}\n") if tree.get("raw_diff"): diff --git a/tests/test_excluded_changes_visibility.py b/tests/test_excluded_changes_visibility.py index b034f5c3d..40f2d597d 100644 --- a/tests/test_excluded_changes_visibility.py +++ b/tests/test_excluded_changes_visibility.py @@ -11,6 +11,7 @@ from __future__ import annotations import diffctx +from tests.conftest import run_diffctx_subprocess from tests.framework.pygit2_backend import Pygit2Repo @@ -74,6 +75,34 @@ def test_policy_excluded_count_is_files_not_hunks(tmp_path): assert result.get("policy_excluded_count") == 1 +def test_exclusion_only_change_still_renders_the_withheld_notice(tmp_path): + repo = Pygit2Repo(tmp_path / "repo") + repo.add_file("src/app.py", "def a():\n pass\n") + repo.add_file("notes.md", "# QA notes\noriginal\n") + repo.commit("initial") + + repo.add_file(".gitignore", "*.md\n") + repo.commit("ignore rule arrives") + + repo.add_file("notes.md", "# QA notes\nonly the excluded file changed\n") + repo.commit("touch only the excluded file") + + result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1") + assert result.get("ignored_changes") == ["notes.md"] + for rendered in ( + diffctx.to_yaml(result), + diffctx.to_markdown(result), + diffctx.to_text(result), + ): + assert "notes.md" in rendered + assert "only the excluded file changed" not in rendered + + proc = run_diffctx_subprocess([str(repo.path), "--diff", "HEAD~1"], cwd=str(repo.path)) + assert proc.returncode == 0, proc.stderr + assert "notes.md" in proc.stdout + assert "no semantic context" not in proc.stderr + + def test_markdown_render_carries_both_exclusion_notes(tmp_path): repo = _two_commit_repo(tmp_path, ".gitignore", "*.md\n") result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1") From d104d2107e574cdf09d66fe7956b3c572224b9c8 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Mon, 10 Aug 2026 23:10:16 +0200 Subject: [PATCH 12/73] refactor: extract helpers flagged by Sonar cognitive-complexity --- eval/analysis/dcbench_summary.py | 64 +++++++++++++++++--------------- eval/harness/common.py | 46 ++++++++++++----------- eval/workflows/dcbench_score.py | 60 ++++++++++++++++++------------ 3 files changed, 94 insertions(+), 76 deletions(-) diff --git a/eval/analysis/dcbench_summary.py b/eval/analysis/dcbench_summary.py index d14f5cb3e..1755c4ae4 100644 --- a/eval/analysis/dcbench_summary.py +++ b/eval/analysis/dcbench_summary.py @@ -169,6 +169,39 @@ def _print_bootstrap(modes: dict[str, dict[str, dict]], base: str, with_nt: list print(f"| {m} | {d:+.4f} | {lo:+.4f} | {hi:+.4f} | {'yes' if lo > 0 or hi < 0 else 'no'} |") +def _print_union_ceiling(modes: dict[str, dict[str, dict]], with_nt: list[str]) -> None: + print("\n## Union ceiling (ego+bm25 union, same instances)\n") + ego, lex = modes["ego"], modes["bm25"] + # Recomputed from selected_files rather than from the recall columns: the + # union of two recalls is not the recall of the union. + ceil, e_only, l_only = [], [], [] + for i in with_nt: + gold = nontrivial_gold(i) + if not gold: + continue + e = set(ego[i].get("selected_files") or []) + x = set(lex[i].get("selected_files") or []) + e_only.append(_hit_rate(gold, e)) + l_only.append(_hit_rate(gold, x)) + ceil.append(_hit_rate(gold, e | x)) + if not ceil: + print( + "**Skipped: no annotation.yaml found for any paired instance** — " + f"the ceiling reads gold from {INSTANCES}, which must be checked out." + ) + return + print(f"- ego nontrivial recall: {statistics.mean(e_only):.4f} (n={len(ceil)}, re-read from today's annotations)") + print(f"- bm25 nontrivial recall: {statistics.mean(l_only):.4f}") + print(f"- union ceiling: {statistics.mean(ceil):.4f}") + print(f"- headroom over ego: {statistics.mean(ceil) - statistics.mean(e_only):+.4f}") + print( + "\nThe ceiling is an oracle: it credits a gold file if either arm surfaced " + "it, with no mechanism able to choose. Fusion cannot exceed it. Headroom " + "at or near zero means fusion had nothing to win here and the remaining " + "loss is candidate supply (#130), not ranking (#125)." + ) + + def main() -> None: ap = argparse.ArgumentParser() ap.add_argument("--runs", required=True, help="directory holding one subdirectory per mode") @@ -189,36 +222,7 @@ def main() -> None: _print_bootstrap(modes, base, with_nt) if "ego" in modes and "bm25" in modes and with_nt: - print("\n## Union ceiling (ego+bm25 union, same instances)\n") - ego, lex = modes["ego"], modes["bm25"] - # Recomputed from selected_files rather than from the recall columns: the - # union of two recalls is not the recall of the union. - ceil, e_only, l_only = [], [], [] - for i in with_nt: - gold = nontrivial_gold(i) - if not gold: - continue - e = set(ego[i].get("selected_files") or []) - x = set(lex[i].get("selected_files") or []) - e_only.append(_hit_rate(gold, e)) - l_only.append(_hit_rate(gold, x)) - ceil.append(_hit_rate(gold, e | x)) - if not ceil: - print( - "**Skipped: no annotation.yaml found for any paired instance** — " - f"the ceiling reads gold from {INSTANCES}, which must be checked out." - ) - else: - print(f"- ego nontrivial recall: {statistics.mean(e_only):.4f} (n={len(ceil)}, re-read from today's annotations)") - print(f"- bm25 nontrivial recall: {statistics.mean(l_only):.4f}") - print(f"- union ceiling: {statistics.mean(ceil):.4f}") - print(f"- headroom over ego: {statistics.mean(ceil) - statistics.mean(e_only):+.4f}") - print( - "\nThe ceiling is an oracle: it credits a gold file if either arm surfaced " - "it, with no mechanism able to choose. Fusion cannot exceed it. Headroom " - "at or near zero means fusion had nothing to win here and the remaining " - "loss is candidate supply (#130), not ranking (#125)." - ) + _print_union_ceiling(modes, with_nt) print("\n## Per-repo nontrivial recall\n") repos = sorted({modes[base][i]["repo"] for i in with_nt}) if base in modes else [] diff --git a/eval/harness/common.py b/eval/harness/common.py index c5c1614e6..b3e1c046c 100644 --- a/eval/harness/common.py +++ b/eval/harness/common.py @@ -440,33 +440,35 @@ def prune_dead_worker_worktrees(repos_dir: Path) -> int: runner = os.environ.get("RUNNER_NAME", "").replace("-", "_").replace(" ", "_") removed = 0 for d in root.iterdir(): - name = d.name - if not name.startswith("w"): - continue - if runner: - if not name.startswith(f"w{runner}_"): - continue - elif "_" in name: - continue - pid_part = name.rsplit("_", 1)[-1].lstrip("w") - try: - pid = int(pid_part) - except ValueError: - continue - try: - os.kill(pid, 0) - continue # alive - except ProcessLookupError: - pass - except PermissionError: - continue # alive, other user - shutil.rmtree(d, ignore_errors=True) - removed += 1 + if _is_prunable_worker_dir(d.name, runner): + shutil.rmtree(d, ignore_errors=True) + removed += 1 if removed: print(f"pruned {removed} dead worker worktree dirs under {root}", flush=True) return removed +def _is_prunable_worker_dir(name: str, runner: str) -> bool: + if not name.startswith("w"): + return False + if runner: + if not name.startswith(f"w{runner}_"): + return False + elif "_" in name: + return False + try: + pid = int(name.rsplit("_", 1)[-1].lstrip("w")) + except ValueError: + return False + try: + os.kill(pid, 0) + except ProcessLookupError: + return True # dead in our namespace + except PermissionError: + return False # alive, other user + return False # alive + + STRICT_APPLY = "strict" TOLERANT_APPLY = "ignore_whitespace" diff --git a/eval/workflows/dcbench_score.py b/eval/workflows/dcbench_score.py index 43f2d1335..9f82828f1 100644 --- a/eval/workflows/dcbench_score.py +++ b/eval/workflows/dcbench_score.py @@ -81,6 +81,34 @@ def checkout(wt: Path, sha: str) -> bool: return True +def _run_group_killable( + argv: list[str], + extra_env: dict[str, str] | None, + timeout_s: float, +) -> tuple[int, str, str] | None: + # Own session so a timeout kills the whole process group — killing the + # direct child alone leaves forked grandchildren running past the cap. + env = dict(os.environ, **extra_env) if extra_env else None + with subprocess.Popen( + argv, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + env=env, + start_new_session=True, + ) as proc: + try: + stdout, stderr = proc.communicate(timeout=timeout_s) + except subprocess.TimeoutExpired: + try: + os.killpg(proc.pid, signal.SIGKILL) + except ProcessLookupError: + pass + proc.wait() + return None + return proc.returncode, stdout, stderr + + def run_one( wt: Path, sha: str, @@ -92,7 +120,6 @@ def run_one( ) -> dict: if not _COMMIT_RE.fullmatch(sha): return {"status": "bad_sha", "elapsed_s": 0.0} - env = dict(os.environ, **extra_env) if extra_env else None started = time.monotonic() argv = [ str(NATIVE), @@ -109,34 +136,19 @@ def run_one( "--timeout", str(timeout_s), ] + (["--tau", str(tau)] if tau is not None else []) - # Own session so a timeout kills the whole process group — the direct - # child alone leaves forked grandchildren running past the cap. - with subprocess.Popen( - argv, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - env=env, - start_new_session=True, - ) as proc: - try: - stdout, stderr = proc.communicate(timeout=timeout_s + 30) - except subprocess.TimeoutExpired: - try: - os.killpg(proc.pid, signal.SIGKILL) - except ProcessLookupError: - pass - proc.wait() - return {"status": "hang", "elapsed_s": round(time.monotonic() - started, 1)} + outcome = _run_group_killable(argv, extra_env, timeout_s + 30) elapsed = round(time.monotonic() - started, 1) + if outcome is None: + return {"status": "hang", "elapsed_s": elapsed} + rc, stdout, stderr = outcome - if proc.returncode != 0 or not stdout.strip(): + if rc != 0 or not stdout.strip(): if "unknown revision" in (stderr or ""): # `^..` has no parent side on a root commit; an explicit # status keeps it out of the no_output bucket. - return {"status": "root_commit", "elapsed_s": elapsed, "rc": proc.returncode} - kind = "hang" if proc.returncode in (124, 143) else "no_output" - return {"status": kind, "elapsed_s": elapsed, "rc": proc.returncode} + return {"status": "root_commit", "elapsed_s": elapsed, "rc": rc} + kind = "hang" if rc in (124, 143) else "no_output" + return {"status": kind, "elapsed_s": elapsed, "rc": rc} try: doc = json.loads(stdout) From 98f58675f380efd3b1fe5966b5139ca05f6d98bb Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Thu, 13 Aug 2026 21:37:47 +0200 Subject: [PATCH 13/73] QA.md: unbind version-file count, add surface-flip note, cut stale FP --- QA.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/QA.md b/QA.md index 7c6ba1ffc..004fe2cc0 100644 --- a/QA.md +++ b/QA.md @@ -14,6 +14,9 @@ Project-specific facts for `/qa`. Generic methodology lives in | Backend smoke | no | — | | SonarCloud | yes | project key is `nikolay-e_TreeMapper` (legacy name, never renamed) | +The `no` rows describe the current CLI/library shape — they flip the day +a deployed/web surface ships; re-derive then, don't trust this table. + ## Forge - `origin` = Forgejo (source of truth, push here); `github` = mirror, @@ -79,7 +82,8 @@ Project-specific facts for `/qa`. Generic methodology lives in - **Python API fragments carry** `content/kind/lines/path/role/symbol` only — no `token_count`. Integration tests measuring budget use must proxy via `len(content)` (~4 chars/token). -- **Version-bearing files**: the CD bump patches 8 files incl. +- **Version-bearing files**: the CD bump patches every file listed in + the cd.yml bump block — that block is the enumeration, incl. `docs/product/github-action.md` (pins gated by `test_version_consistency`). Adding a new file that embeds the version requires BOTH the cd.yml bump block and that test. @@ -158,10 +162,10 @@ Project-specific facts for `/qa`. Generic methodology lives in ## Known false positives -- ~~import-linter pre-commit hook can fail locally (namespace package) - while green in CI.~~ **No longer true** — `lint-imports` reports - `6 kept, 0 broken` locally. Read a failure as a real violation: one - caught `from diffctx import _diffctx` in `mcp/server.py`, which +- import-linter local failures are REAL — the old excuse ("fails locally + on the namespace package while green in CI") is dead; `lint-imports` + reports `6 kept, 0 broken` locally. One failure caught + `from diffctx import _diffctx` in `mcp/server.py`, which executes `diffctx/__init__` and so pulls `_app` -> `cli`, breaking "MCP server must not import CLI". Import the submodule directly (`from diffctx._diffctx import X`) so the edge points at the submodule @@ -250,7 +254,7 @@ snapshots and the fixture worktree. ## Measuring against a running build -Two ways to invalidate an overnight measurement, both hit this session: +Two ways to invalidate an overnight measurement, both observed in practice: - **`maturin develop` swaps the extension under a running experiment.** The eval harnesses invoke `.venv/bin/diffctx`, which loads From 9febaeb58eddd9f7ae62c8144d253fa8834748af Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Thu, 13 Aug 2026 21:48:01 +0200 Subject: [PATCH 14/73] docs: dedupe CLAUDE.md against CONTRIBUTING, fix stale paths --- CLAUDE.md | 53 +++++++++++++++-------------------------------------- 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index de99a8981..efd217481 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,21 +4,15 @@ ## Ultimate Goal -**CRITICAL: This is the guiding star of the entire project. -Every feature, every design decision, every line of code must -serve this goal. It is an asymptotic ideal — not a finish line -to cross, but a direction to relentlessly pursue.** - **Maximize the speed and depth of understanding textual information — for any reader, in any scenario.** Whether the consumer is an LLM processing a context window or a human reviewing a code change, diffctx's job is the same: extract the maximum signal from a codebase and present it in the -clearest, most information-dense form possible. Every design -decision optimizes for **comprehension-per-token** — the ratio -of understanding gained to attention spent. This metric is the -single lens through which all trade-offs are evaluated. +clearest, most information-dense form possible. The single lens +for every trade-off is **comprehension-per-token** — the ratio +of understanding gained to attention spent. --- @@ -39,19 +33,12 @@ theoretical foundation, see the research paper ## Development -```bash -pip install "maturin>=1.10,<1.11" -pip install -e ".[dev,full,mcp]" --no-build-isolation -pytest -pre-commit run --all-files -``` - -Rust core: `cd crates/diffctx-native && cargo test --lib`. CI gates the -full 2725-case YAML corpus per-case against -`tests/known_below_threshold.txt` (bidirectional: a listed case that -passes also fails); nightly tracks baseline size with -`DIFFCTX_YAML_IGNORE_BASELINE=1`. Full setup: -[CONTRIBUTING.md](CONTRIBUTING.md). +Setup, test commands, and the per-case YAML-corpus CI gate +(`crates/diffctx-native/tests/known_below_threshold.txt`, bidirectional: +a listed case that starts passing also fails) live in +[CONTRIBUTING.md](CONTRIBUTING.md). Nightly CI reruns the corpus with +`DIFFCTX_YAML_IGNORE_BASELINE=1`, so baseline growth/shrinkage is +tracked even when every per-commit verdict passes. ## Performance-change discipline (E/Q classes) @@ -68,22 +55,12 @@ fragmentation or scoring changes are Q-class. ## Testing -The Python suite is integration-only — real filesystem, real git -repos, no mocking. The Rust crate additionally carries inline -`#[test]` units run via `cargo test --lib`. - -The diff context tests use a **YAML-based declarative framework**: -each test case defines initial files, changed files, and expected -output assertions. A dedicated test runner creates a real git repo -per test, commits the files, runs the full diffctx pipeline, and -verifies results. - -**Negative testing via garbage injection**: every test case -automatically includes ~10 unrelated "garbage" files with -distinctive markers. Tests verify the algorithm excludes this -noise, catching regressions in relevance filtering. Each garbage -file uses unique prefixed identifiers (e.g. `GARBAGE_*`) so leaks -are unambiguously detectable. +Suite shape and commands: [CONTRIBUTING.md](CONTRIBUTING.md). Each YAML +case runs the full pipeline against a real git repo built per test, and +**every case automatically injects ~10 unrelated "garbage" files** +(`tests/garbage_data.py`) with unique `GARBAGE_*` markers — asserting +they stay excluded is what catches relevance-filter regressions, and +the prefixes make any leak unambiguous. **Reading oracle results** — two traps that make raw numbers lie: From 08b7a1918a494d47737227b400a5654beab9b0ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 08:13:08 +0000 Subject: [PATCH 15/73] chore(deps)(deps): bump thiserror from 2.0.19 to 2.0.20 (#220) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.19 to 2.0.20. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/2.0.19...2.0.20) --- updated-dependencies: - dependency-name: thiserror dependency-version: 2.0.20 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea4c268d6..dd043bae0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -816,18 +816,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", From 1b742117ba52ce4c854ea9ae75cf45a4eaefc75a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 08:13:36 +0000 Subject: [PATCH 16/73] chore(deps)(deps): bump tree-sitter-scala from 0.26.0 to 0.26.2 (#221) Bumps [tree-sitter-scala](https://github.com/tree-sitter/tree-sitter-scala) from 0.26.0 to 0.26.2. - [Release notes](https://github.com/tree-sitter/tree-sitter-scala/releases) - [Commits](https://github.com/tree-sitter/tree-sitter-scala/compare/v0.26.0...v0.26.2) --- updated-dependencies: - dependency-name: tree-sitter-scala dependency-version: 0.26.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dd043bae0..e55721228 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1252,9 +1252,9 @@ dependencies = [ [[package]] name = "tree-sitter-scala" -version = "0.26.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5a4a7ff23a55474ce6a741d52aaeca7a82fe9421bb982b86e98c6ac8629397" +checksum = "24e0ab4505990bfe30051761d40a7bf4033ce5a81c9eda9e20e987a5cdc84826" dependencies = [ "cc", "tree-sitter-language", From 5165e200350a7523800084c0555366fc15f9249d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 08:14:28 +0000 Subject: [PATCH 17/73] chore(deps)(deps): bump clap from 4.6.5 to 4.6.6 (#222) Bumps [clap](https://github.com/clap-rs/clap) from 4.6.5 to 4.6.6. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.5...clap_complete-v4.6.6) --- updated-dependencies: - dependency-name: clap dependency-version: 4.6.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e55721228..a1373ca37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,9 +123,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", From b7d03a5c9403d49a84957f340809e6da152d2cf4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:46:32 +0200 Subject: [PATCH 18/73] chore(deps)(deps): bump the all-dependencies group with 2 updates (#223) Bumps the all-dependencies group with 2 updates: [softprops/action-gh-release](https://github.com/softprops/action-gh-release) and [codecov/codecov-action](https://github.com/codecov/codecov-action). Updates `softprops/action-gh-release` from 2.6.2 to 3.0.2 - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/softprops/action-gh-release/compare/3bb12739c298aeb8a4eeaf626c5b8d85266b0e65...3d0d9888cb7fd7b750713d6e236d1fcb99157228) Updates `codecov/codecov-action` from 5.5.5 to 7.0.0 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/0fb7174895f61a3b6b78fc075e0cd60383518dac...fb8b3582c8e4def4969c97caa2f19720cb33a72f) --- updated-dependencies: - dependency-name: softprops/action-gh-release dependency-version: 3.0.2 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all-dependencies - dependency-name: codecov/codecov-action dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cd.yml | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index c3ab739b5..ba069d3d0 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -717,7 +717,7 @@ jobs: subject-path: ./release-assets/* - name: Create GitHub Release with wheel and sdist assets - uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 + uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 with: tag_name: ${{ needs.prepare-version.outputs.tag_name }} name: Release ${{ needs.prepare-version.outputs.version }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b030a26e0..3ee295a22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -302,7 +302,7 @@ jobs: - name: Upload coverage reports to Codecov if: runner.os == 'Linux' && matrix.python-version == '3.12' - uses: codecov/codecov-action@0fb7174895f61a3b6b78fc075e0cd60383518dac # v5 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage.xml From b204267952a639fcf52d0a73eb37fc50a28e987c Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 13:13:25 +0200 Subject: [PATCH 19/73] chore(deps): ignore mcp 2.x majors, bump huggingface-hub floor --- .github/dependabot.yml | 6 ++++++ requirements-eval.txt | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 95f4bb3ee..058907b7e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,6 +16,12 @@ updates: commit-message: prefix: "chore(deps)" include: "scope" + ignore: + # mcp 2.x is a breaking SDK rewrite; the <2.0 pin in pyproject.toml is a + # deliberate compatibility decision (see the comment there). PR #219 + # widened the bound mechanically and every test matrix failed at import. + - dependency-name: "mcp" + update-types: ["version-update:semver-major"] groups: all-dependencies: patterns: diff --git a/requirements-eval.txt b/requirements-eval.txt index 3d3cbbc16..c8f0c5b01 100644 --- a/requirements-eval.txt +++ b/requirements-eval.txt @@ -4,7 +4,7 @@ tiktoken>=0.8,<1.0 pathspec>=0.11,<2.0 charset-normalizer>=3.0,<4.0 datasets>=5.0.1,<6.0 -huggingface-hub>=1.25.1,<2.0 +huggingface-hub>=1.27.0,<2.0 pebble>=5.2.1,<6.0 rank-bm25>=0.2.2,<1.0 pyyaml>=6.0,<7.0 From 1b3a8d23c2c9897ed3a54883f6195d6fb7758142 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 13:15:59 +0200 Subject: [PATCH 20/73] fix: per-run deadlines, secret-path disclosure, dead-wiring cleanup --- CHANGELOG.md | 19 +++ crates/diffctx-native/src/deadline.rs | 137 ++++++++++++++---- crates/diffctx-native/src/discovery.rs | 25 ---- .../src/edges/config_edges/generic.rs | 24 ++- crates/diffctx-native/src/edges/mod.rs | 7 +- .../src/edges/semantic/c_family.rs | 48 +++--- .../src/edges/semantic/python.rs | 6 +- crates/diffctx-native/src/git.rs | 65 +++++---- crates/diffctx-native/src/graph.rs | 8 +- crates/diffctx-native/src/memory_pipeline.rs | 3 + crates/diffctx-native/src/pipeline.rs | 37 +++-- crates/diffctx-native/src/project_graph.rs | 1 + crates/diffctx-native/src/render.rs | 4 +- crates/diffctx-native/src/scoring.rs | 28 +++- src/diffctx/writer.py | 4 +- tests/test_concurrent_deadlines.py | 47 ++++++ tests/test_excluded_changes_visibility.py | 2 +- tests/test_secret_ignores_diff.py | 37 +++++ 18 files changed, 370 insertions(+), 132 deletions(-) create mode 100644 tests/test_concurrent_deadlines.py diff --git a/CHANGELOG.md b/CHANGELOG.md index fa53b655e..4fdba7e59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- **Changed secret-classified files (`id_rsa`, `*.key`, `*.pem`, …) are now + disclosed in `policy_excluded_count`** (#214): they were silently dropped + before the ignore-exclusion disclosure ran, so a change touching only + secret paths printed a bare stub and a mixed change under-counted its + withheld files. Count only — the paths themselves stay out of the output, + same stance as `.diffctx/ignore`. The renderers' note now reads "withheld + by exclusion policy" to cover both families. +- **The compute deadline and the git subprocess timeout are per-run, not + process-global** (#210): concurrent MCP requests overwrote each other's + ceiling (a short-timeout request could abort a long-timeout one mid-flight, + and vice versa disable it), an expired ceiling was never cleared and leaked + into later in-process runs, and a single flooding edge builder could outrun + the whole timeout between checks. The deadline is now a value threaded + through the run, the git timeout is thread-scoped, and the known flooding + loops (config-key scan, C-family pairing, Python identifier emission) poll + the deadline inside the loop. +- A failed Aho-Corasick automaton build in the config-edge builder now logs a + warning instead of silently disabling the entire keyed channel (#216). + - **A commit touching only excluded paths now renders its disclosure** (#188 completion): the YAML/Markdown/text renderers and the CLI's empty-diff exit treated `ignored_changes`/`policy_excluded_count` as "no output", so the one diff --git a/crates/diffctx-native/src/deadline.rs b/crates/diffctx-native/src/deadline.rs index 0916cd7e5..ae2b0ae67 100644 --- a/crates/diffctx-native/src/deadline.rs +++ b/crates/diffctx-native/src/deadline.rs @@ -1,47 +1,89 @@ -use std::sync::atomic::{AtomicU64, Ordering}; -use std::time::Instant; +use std::cell::Cell; +use std::time::{Duration, Instant}; -use once_cell::sync::Lazy; - -/// Wall-clock ceiling for the compute phases, shared across rayon workers. +/// Per-run wall-clock ceiling for the compute phases. /// /// The `timeout` parameter only ever reached git subprocesses /// (`set_git_timeout`); the native CLI is protected by a process-level /// watchdog that exits 124, but the library path — pyo3, and through it the /// MCP server — had no ceiling at all: a 420s timeout was observed to sit -/// through an 8-minute edge build without firing. The edge phase checks this -/// between builders, so the overshoot is bounded by the slowest single -/// builder rather than unbounded. +/// through an 8-minute edge build without firing. +/// +/// A per-run value rather than a process global (#210): the MCP server runs +/// overlapping pipelines on worker threads, and a shared atomic meant the +/// last request to arrive overwrote every in-flight request's ceiling — and +/// an expired ceiling was never cleared, so unrelated later runs in the same +/// process (the yaml harness above all) inherited it. /// /// Expiry panics with a recognizable message on purpose: the phase runs deep /// inside call chains that do not return `Result`, rayon propagates the /// unwind to the caller, and pyo3 surfaces it as a Python exception — an /// error after `timeout` seconds, where before there was a hang. -static ANCHOR: Lazy = Lazy::new(Instant::now); -static DEADLINE_MS: AtomicU64 = AtomicU64::new(0); +#[derive(Clone, Copy, Debug)] +pub struct Deadline { + expires_at: Option, +} + +impl Deadline { + /// Saturating: an absurd caller-supplied timeout must clamp to "no + /// ceiling", not wrap behind `now` and fire instantly. + pub fn from_timeout_secs(timeout_secs: u64) -> Self { + Deadline { + expires_at: Instant::now().checked_add(Duration::from_secs(timeout_secs)), + } + } + + pub fn none() -> Self { + Deadline { expires_at: None } + } + + pub fn check(&self, phase: &str) { + if let Some(expires_at) = self.expires_at { + check_expired(Instant::now(), expires_at, phase); + } + } + + /// Publishes this deadline to the current thread for the guard's + /// lifetime, so hot loops deep inside edge builders can poll it via + /// `check_current_every` without threading a parameter through 51 + /// `EdgeBuilder::build` implementations. Each rayon worker publishes its + /// own copy, so concurrent runs never see each other's ceiling. + pub fn enter(&self) -> ScopedDeadline { + let prev = CURRENT.with(|c| c.replace(self.expires_at)); + ScopedDeadline { prev } + } +} -pub fn set_compute_deadline(timeout_secs: u64) { - let now_ms = ANCHOR.elapsed().as_millis() as u64; - // +1 keeps a zero timeout distinct from the 0 = "no deadline" sentinel. - // Saturating: an absurd caller-supplied timeout must clamp to "far future", - // not wrap behind `now_ms` and fire instantly. - let deadline = now_ms - .saturating_add(timeout_secs.saturating_mul(1000)) - .saturating_add(1); - DEADLINE_MS.store(deadline, Ordering::Relaxed); +thread_local! { + static CURRENT: Cell> = const { Cell::new(None) }; } -pub fn check_compute_deadline(phase: &str) { - let deadline = DEADLINE_MS.load(Ordering::Relaxed); - if deadline == 0 { +pub struct ScopedDeadline { + prev: Option, +} + +impl Drop for ScopedDeadline { + fn drop(&mut self) { + let prev = self.prev; + CURRENT.with(|c| c.set(prev)); + } +} + +/// Cheap intra-loop poll: costs a branch on all but every `every`-th +/// iteration. For the builder loops whose single invocation can outrun the +/// whole timeout (the envoy 520-`config` cross product, the sentry-scale +/// config-key scan), where the between-builders check cannot help. +pub fn check_current_every(i: usize, every: usize, phase: &str) { + if i % every != 0 { return; } - let now_ms = ANCHOR.elapsed().as_millis() as u64; - check_expired(now_ms, deadline, phase); + if let Some(expires_at) = CURRENT.with(|c| c.get()) { + check_expired(Instant::now(), expires_at, phase); + } } -fn check_expired(now_ms: u64, deadline_ms: u64, phase: &str) { - if now_ms > deadline_ms { +fn check_expired(now: Instant, expires_at: Instant, phase: &str) { + if now > expires_at { panic!("diffctx compute deadline exceeded during {phase}"); } } @@ -50,13 +92,11 @@ fn check_expired(now_ms: u64, deadline_ms: u64, phase: &str) { mod tests { use super::*; - // The expiry check is tested against the pure comparison, not the - // process-global atomic: an expired global deadline is visible to every - // rayon worker in the test process, so mutating it here made any - // concurrently running graph test flakily panic mid-build. #[test] fn an_expired_deadline_panics_with_the_phase_name() { - let err = std::panic::catch_unwind(|| check_expired(6, 1, "edge construction")) + let deadline = Deadline::from_timeout_secs(0); + std::thread::sleep(Duration::from_millis(5)); + let err = std::panic::catch_unwind(|| deadline.check("edge construction")) .expect_err("deadline did not fire"); let msg = err.downcast_ref::().cloned().unwrap_or_default(); assert!(msg.contains("edge construction"), "message was: {msg}"); @@ -64,6 +104,39 @@ mod tests { #[test] fn an_unexpired_deadline_does_not_fire() { - check_expired(1, 6, "edge construction"); + Deadline::from_timeout_secs(1000).check("edge construction"); + Deadline::none().check("edge construction"); + } + + #[test] + fn concurrent_deadlines_do_not_affect_each_other() { + // The #210 defect: request B's short ceiling used to overwrite + // request A's. Per-run values make each check see only its own. + let short = Deadline::from_timeout_secs(0); + let long = Deadline::from_timeout_secs(1000); + std::thread::sleep(Duration::from_millis(5)); + long.check("edge construction"); + std::panic::catch_unwind(|| short.check("edge construction")) + .expect_err("short deadline did not fire"); + long.check("edge construction"); + } + + #[test] + fn scoped_deadline_clears_on_drop_and_nests() { + let outer = Deadline::from_timeout_secs(1000); + let guard = outer.enter(); + check_current_every(0, 1, "edge construction"); + { + let expired = Deadline::from_timeout_secs(0); + let inner = expired.enter(); + std::thread::sleep(Duration::from_millis(5)); + std::panic::catch_unwind(|| check_current_every(0, 1, "edge construction")) + .expect_err("inner deadline did not fire"); + drop(inner); + } + check_current_every(0, 1, "edge construction"); + drop(guard); + // No deadline published: must never fire. + check_current_every(0, 1, "edge construction"); } } diff --git a/crates/diffctx-native/src/discovery.rs b/crates/diffctx-native/src/discovery.rs index a48b4a29e..5c793a07a 100644 --- a/crates/diffctx-native/src/discovery.rs +++ b/crates/diffctx-native/src/discovery.rs @@ -309,24 +309,6 @@ impl EnsembleDiscovery { pub fn new(strategies: Vec>) -> Self { Self { strategies } } - - pub fn default_ensemble() -> Self { - // The lexical channel's breadth into the candidate universe. The - // shipped 1 means BM25 contributes a single file to discovery; measured - // on dcbench, 79% of nontrivial gold never enters the universe at all, - // and most of it shares 3+ path tokens with the diff — exactly what a - // wider lexical channel would surface. Env-gated for the universe - // ablation (#130); unset, behaviour is byte-identical to before. - let bm25_k = - crate::config::env_overrides::read_env_usize("DIFFCTX_BM25_DISCOVERY_TOP_K", 1); - Self { - strategies: vec![ - Box::new(DefaultDiscovery), - Box::new(TestFileDiscovery), - Box::new(BM25Discovery::new(bm25_k)), - ], - } - } } impl DiscoveryStrategy for EnsembleDiscovery { @@ -750,11 +732,4 @@ mod tests { assert_eq!(paths.len(), 1); assert_eq!(attribution[0].1, "solo"); } - - #[test] - fn default_ensemble_wires_three_channels() { - // A channel silently disappearing from the default wiring is exactly - // the regression the ensemble's own output cannot reveal. - assert_eq!(EnsembleDiscovery::default_ensemble().strategies.len(), 3); - } } diff --git a/crates/diffctx-native/src/edges/config_edges/generic.rs b/crates/diffctx-native/src/edges/config_edges/generic.rs index c53cbfd13..ff1369fc5 100644 --- a/crates/diffctx-native/src/edges/config_edges/generic.rs +++ b/crates/diffctx-native/src/edges/config_edges/generic.rs @@ -252,10 +252,21 @@ impl EdgeBuilder for ConfigToCodeEdgeBuilder { } let keys: Vec<&String> = key_to_cfgs.keys().collect(); - let automaton = aho_corasick::AhoCorasick::builder() + let automaton = match aho_corasick::AhoCorasick::builder() .ascii_case_insensitive(true) .build(&keys) - .ok(); + { + Ok(ac) => Some(ac), + Err(e) => { + // A failed build silences the entire keyed channel (only the + // fallback regexes still run) — that must never be silent. + tracing::warn!( + "config-edge AhoCorasick build failed over {} keys — keyed channel disabled: {e}", + keys.len() + ); + None + } + }; // Document-frequency gate, same ambiguity bar as // `CFamilySemanticWeights::max_files_per_name`: a key matched in more @@ -267,7 +278,11 @@ impl EdgeBuilder for ConfigToCodeEdgeBuilder { let mut key_files: Vec> = vec![FxHashSet::default(); keys.len()]; let mut fallback_files: Vec> = vec![FxHashSet::default(); fallback_patterns.len()]; - for code_frag in &code_frags { + for (i, code_frag) in code_frags.iter().enumerate() { + // This scan alone outran the whole pipeline timeout on a + // sentry-scale commit (#116); the between-builders deadline check + // cannot interrupt a single builder, so poll inside the loop. + crate::deadline::check_current_every(i, 64, "edge construction (config key scan)"); let content = code_frag.content.as_ref(); if let Some(ac) = &automaton { for m in ac.find_overlapping_iter(content) { @@ -298,7 +313,8 @@ impl EdgeBuilder for ConfigToCodeEdgeBuilder { .collect(); let mut edges: EdgeDict = FxHashMap::default(); - for code_frag in &code_frags { + for (i, code_frag) in code_frags.iter().enumerate() { + crate::deadline::check_current_every(i, 64, "edge construction (config emission)"); let content = code_frag.content.as_ref(); let mut matched_cfgs: FxHashSet = FxHashSet::default(); if let Some(ac) = &automaton { diff --git a/crates/diffctx-native/src/edges/mod.rs b/crates/diffctx-native/src/edges/mod.rs index 3741015dd..634d6a975 100644 --- a/crates/diffctx-native/src/edges/mod.rs +++ b/crates/diffctx-native/src/edges/mod.rs @@ -113,6 +113,7 @@ pub fn collect_capped_edges( fragments: &[Fragment], repo_root: Option<&Path>, skip_expensive: bool, + deadline: crate::deadline::Deadline, ) -> CappedEdges { let mut all_builders: Vec<(&str, Box)> = Vec::new(); for cat in builder_categories() { @@ -143,7 +144,8 @@ pub fn collect_capped_edges( .par_iter() .enumerate() .map(|(builder_idx, (name, builder))| { - crate::deadline::check_compute_deadline("edge construction"); + deadline.check("edge construction"); + let _in_builder = deadline.enter(); let t = std::time::Instant::now(); let edges = builder.build(fragments, repo_root); if std::env::var_os("DIFFCTX_TRACE_BUILDERS").is_some() { @@ -438,7 +440,8 @@ mod fallback_gate_tests { frag("proj/u1.xyz", "zzcommonzz here\n", &["zzcommonzz"]), frag("proj/u2.xyz", "zzcommonzz there\n", &["zzcommonzz"]), ]; - let capped = collect_capped_edges(&fragments, None, false); + let capped = + collect_capped_edges(&fragments, None, false, crate::deadline::Deadline::none()); let node_path = |idx: u32| capped.idx_to_node[idx as usize].path.clone(); // Category matters: a.py and c.py legitimately share a structural // sibling edge; the class under test is the SEMANTIC tags link. diff --git a/crates/diffctx-native/src/edges/semantic/c_family.rs b/crates/diffctx-native/src/edges/semantic/c_family.rs index 0ead5b32d..b1f003f56 100644 --- a/crates/diffctx-native/src/edges/semantic/c_family.rs +++ b/crates/diffctx-native/src/edges/semantic/c_family.rs @@ -176,23 +176,29 @@ impl EdgeBuilder for CFamilyEdgeBuilder { // mass to the rest of the file. Buckets therefore hold file paths, and // ambiguity is measured in files: a basename repeated across the tree // is what makes an include unresolvable. - let owned: Vec = c_frags.iter().map(|f| (*f).clone()).collect(); - let reps = super::super::base::file_representatives(&owned); - drop(owned); - let mut header_to_files: FxHashMap>> = FxHashMap::default(); + // Representatives keyed off the full slice: is_c_family is per-path, so + // the map restricted to C-family paths is identical, and only C-family + // paths are ever looked up. + let reps = super::super::base::file_representatives(fragments); + let mut header_to_files: FxHashMap>, FxHashSet>)> = + FxHashMap::default(); let mut func_defs_map: FxHashMap> = FxHashMap::default(); let mut func_def_files: FxHashMap>> = FxHashMap::default(); let mut type_defs_map: FxHashMap> = FxHashMap::default(); let mut type_def_files: FxHashMap>> = FxHashMap::default(); let mut frag_own_defs: FxHashMap> = FxHashMap::default(); - let push_file_key = - |map: &mut FxHashMap>>, key: String, f: &Fragment| { - let bucket = map.entry(key).or_default(); - if !bucket.contains(&f.id.path) { - bucket.push(f.id.path.clone()); - } - }; + // Order-preserving dedup: the Vec keeps insertion order (edge emission + // order depends on it), the set makes membership O(1) instead of a + // linear rescan per fragment of every file sharing the key. + let push_file_key = |map: &mut FxHashMap>, FxHashSet>)>, + key: String, + f: &Fragment| { + let (order, seen) = map.entry(key).or_default(); + if seen.insert(f.id.path.clone()) { + order.push(f.id.path.clone()); + } + }; for f in &c_frags { let path = Path::new(f.path()); @@ -245,14 +251,18 @@ impl EdgeBuilder for CFamilyEdgeBuilder { let mut edges: EdgeDict = FxHashMap::default(); - for f in &c_frags { + for (i, f) in c_frags.iter().enumerate() { + // The envoy shape (520 files sharing one stem) made a single + // c_family build outrun the whole timeout; the between-builders + // check cannot interrupt it, so poll inside the loop (#210). + crate::deadline::check_current_every(i, 256, "edge construction (c_family)"); for inc in extract_includes(&f.content) { let inc_name = if inc.contains('/') { inc.split('/').next_back().unwrap().to_string() } else { inc.clone() }; - let Some(candidates) = header_to_files.get(&inc_name) else { + let Some((candidates, _)) = header_to_files.get(&inc_name) else { continue; }; // `#include "common/buffer/buffer_impl.h"` names one file; a @@ -333,7 +343,8 @@ impl EdgeBuilder for CFamilyEdgeBuilder { // stems real projects repeat most (envoy: 520 files with stem // `config`, whose fragment-level cross product alone was tens of // millions of edges). - let mut by_stem: FxHashMap<(String, String), Vec<&str>> = FxHashMap::default(); + let mut by_stem: FxHashMap<(String, String), (Vec<&str>, FxHashSet<&str>)> = + FxHashMap::default(); for f in &c_frags { let path = Path::new(f.path()); let stem = path @@ -344,16 +355,17 @@ impl EdgeBuilder for CFamilyEdgeBuilder { .parent() .map(|d| d.to_string_lossy().to_string()) .unwrap_or_default(); - let bucket = by_stem.entry((dir, stem)).or_default(); - if !bucket.contains(&f.path()) { - bucket.push(f.path()); + let (order, seen) = by_stem.entry((dir, stem)).or_default(); + if seen.insert(f.path()) { + order.push(f.path()); } } // A header/impl pair is a relation between two files; representatives // carry it, the containment star spreads it. Pairing every fragment // with every fragment restated the same fact quadratically. - for (_key, files) in &by_stem { + for (i, (_key, (files, _))) in by_stem.iter().enumerate() { + crate::deadline::check_current_every(i, 256, "edge construction (c_family pairing)"); if files.len() < 2 { continue; } diff --git a/crates/diffctx-native/src/edges/semantic/python.rs b/crates/diffctx-native/src/edges/semantic/python.rs index 8be8b8234..7a8298bb8 100644 --- a/crates/diffctx-native/src/edges/semantic/python.rs +++ b/crates/diffctx-native/src/edges/semantic/python.rs @@ -207,7 +207,11 @@ impl EdgeBuilder for PythonEdgeBuilder { let mut edges: EdgeDict = FxHashMap::default(); - for f in &py_frags { + for (i, f) in py_frags.iter().enumerate() { + // A 10k-module monorepo still emits tens of millions of edges at + // the 8-file cap (#196); the between-builders deadline check + // cannot interrupt a single builder, so poll inside the loop. + crate::deadline::check_current_every(i, 256, "edge construction (python)"); let self_defs = frag_defines.get(&f.id).cloned().unwrap_or_default(); let src_imports = frag_imports.get(&f.id).cloned().unwrap_or_default(); diff --git a/crates/diffctx-native/src/git.rs b/crates/diffctx-native/src/git.rs index d378ca543..ab715c0a9 100644 --- a/crates/diffctx-native/src/git.rs +++ b/crates/diffctx-native/src/git.rs @@ -13,15 +13,23 @@ use wait_timeout::ChildExt; use crate::config::git::{self, GIT}; use crate::types::DiffHunk; -static GIT_TIMEOUT_SECS: AtomicU64 = AtomicU64::new(git::DEFAULT_TIMEOUT_SECONDS); +// Thread-local, not a process global: the MCP server runs overlapping +// pipelines on worker threads, and a shared atomic let one request's short +// timeout kill another request's in-flight git subprocess (#210). Every git +// call runs on the thread that entered the pipeline, so the per-thread value +// is the per-run value. +thread_local! { + static GIT_TIMEOUT_SECS: std::cell::Cell = + const { std::cell::Cell::new(git::DEFAULT_TIMEOUT_SECONDS) }; +} pub fn set_git_timeout(secs: u64) { - GIT_TIMEOUT_SECS.store(secs, Ordering::Relaxed); + GIT_TIMEOUT_SECS.with(|c| c.set(secs)); } // PID alone is not unique within a process: the MCP server runs each tool // body on its own worker thread, so two overlapping pipelines can both reach -// `find_ignored_paths` under the same PID. A shared filename means whoever +// `find_ignored_paths_with_source` under the same PID. A shared filename means whoever // finishes first deletes the other's still-in-use excludesFile; git tolerates // a missing `core.excludesFile` silently, so the loser's `.diffctx/ignore` // rules are dropped without error. The counter makes every call's temp path @@ -29,7 +37,7 @@ pub fn set_git_timeout(secs: u64) { static TEMP_EXCLUDES_COUNTER: AtomicU64 = AtomicU64::new(0); fn git_timeout() -> u64 { - GIT_TIMEOUT_SECS.load(Ordering::Relaxed) + GIT_TIMEOUT_SECS.with(|c| c.get()) } // The prefix and color flags are not cosmetic: the diff parser keys off the // literal `--- a/` / `+++ b/` headers, so a user's `diff.noprefix`, @@ -888,12 +896,22 @@ fn collect_diffctx_ignore_patterns(repo_root: &Path) -> Vec { patterns } +/// Which rule family excluded a path. `.diffctx/ignore` is a declared +/// confidentiality policy, so its exclusions are surfaced only as a count; +/// gitignore exclusions are mundane and can be listed by path (#188). +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum IgnoreSource { + DiffctxPolicy, + Gitignore, +} + /// Returns the subset of `rel_paths` (repo-root-relative) excluded by either /// `.gitignore` (via git's own engine, so nesting/negation/`**` are handled /// correctly) or `.diffctx/ignore` (patterns anchored per-directory and fed /// to git as a temporary `core.excludesFile`, so the same engine evaluates -/// both mechanisms uniformly). Best-effort: any failure returns an empty set -/// rather than blocking the diff pipeline on an ignore-resolution problem. +/// both mechanisms uniformly), mapped to the rule family that excluded each. +/// Best-effort: any failure returns an empty map rather than blocking the +/// diff pipeline on an ignore-resolution problem. /// /// A `.gitignore` exclusion inherited from an excluded ancestor directory does /// NOT count. `--no-index` is required for `.diffctx/ignore` to apply to @@ -905,21 +923,6 @@ fn collect_diffctx_ignore_patterns(repo_root: &Path) -> Vec { /// change to an empty selection (#153). A pattern matching the path itself /// still excludes it, so `.diffctx/ignore` and per-directory `.gitignore` /// rules (#85) keep working. -pub fn find_ignored_paths(repo_root: &Path, rel_paths: &[String]) -> FxHashSet { - find_ignored_paths_with_source(repo_root, rel_paths) - .into_keys() - .collect() -} - -/// Which rule family excluded a path. `.diffctx/ignore` is a declared -/// confidentiality policy, so its exclusions are surfaced only as a count; -/// gitignore exclusions are mundane and can be listed by path (#188). -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum IgnoreSource { - DiffctxPolicy, - Gitignore, -} - pub fn find_ignored_paths_with_source( repo_root: &Path, rel_paths: &[String], @@ -1969,7 +1972,7 @@ mod tests { // --- PID-keyed temp excludesFile: two concurrent calls in one process --- #[test] - fn find_ignored_paths_concurrent_calls_both_see_their_own_ignore_rules() { + fn ignored_paths_concurrent_calls_both_see_their_own_ignore_rules() { let tmp = TempDir::new().expect("tempdir"); let root_a = tmp.path().join("repo_a"); let root_b = tmp.path().join("repo_b"); @@ -1994,7 +1997,7 @@ mod tests { let barrier_a = Arc::clone(&barrier); let handle_a = std::thread::spawn(move || { barrier_a.wait(); - find_ignored_paths( + find_ignored_paths_with_source( &root_a_thread, &["secret_a.py".to_string(), "app.py".to_string()], ) @@ -2004,7 +2007,7 @@ mod tests { let barrier_b = Arc::clone(&barrier); let handle_b = std::thread::spawn(move || { barrier_b.wait(); - find_ignored_paths( + find_ignored_paths_with_source( &root_b_thread, &["secret_b.py".to_string(), "app.py".to_string()], ) @@ -2013,16 +2016,18 @@ mod tests { let ignored_a = handle_a.join().expect("thread a panicked"); let ignored_b = handle_b.join().expect("thread b panicked"); - assert!( - ignored_a.contains("secret_a.py"), + assert_eq!( + ignored_a.get("secret_a.py"), + Some(&IgnoreSource::DiffctxPolicy), "repo A lost its .diffctx/ignore rule to a concurrent call" ); - assert!( - ignored_b.contains("secret_b.py"), + assert_eq!( + ignored_b.get("secret_b.py"), + Some(&IgnoreSource::DiffctxPolicy), "repo B lost its .diffctx/ignore rule to a concurrent call" ); - assert!(!ignored_a.contains("app.py")); - assert!(!ignored_b.contains("app.py")); + assert!(!ignored_a.contains_key("app.py")); + assert!(!ignored_b.contains_key("app.py")); } } } diff --git a/crates/diffctx-native/src/graph.rs b/crates/diffctx-native/src/graph.rs index 85b45bddf..2a29662c9 100644 --- a/crates/diffctx-native/src/graph.rs +++ b/crates/diffctx-native/src/graph.rs @@ -137,9 +137,13 @@ pub fn intern_fragment_nodes( /// Merge duplicate (src, dst) entries: weight = max across duplicates, /// category = first occurrence in input order (builder order), matching /// the historical `EdgeDict` max-merge + `or_insert` category semantics. -/// Requires a stable sort so first-in-input stays first-in-group. +/// Requires a stable sort so first-in-input stays first-in-group — +/// `par_sort_by` is a stable parallel merge sort, so its output is +/// bit-identical to `sort_by` while cutting the dominant serial phase of a +/// tens-of-millions-edge build (#196). pub fn dedup_compact_edges(edges: &mut Vec) { - edges.sort_by(|a, b| (a.src, a.dst).cmp(&(b.src, b.dst))); + use rayon::prelude::*; + edges.par_sort_by(|a, b| (a.src, a.dst).cmp(&(b.src, b.dst))); let mut out = 0usize; let mut i = 0usize; while i < edges.len() { diff --git a/crates/diffctx-native/src/memory_pipeline.rs b/crates/diffctx-native/src/memory_pipeline.rs index fdb2c57cd..c7553b74c 100644 --- a/crates/diffctx-native/src/memory_pipeline.rs +++ b/crates/diffctx-native/src/memory_pipeline.rs @@ -125,6 +125,9 @@ pub fn build_diff_context_in_memory( None, Some(&seed_weights), Some(&discovered_arc), + // The corpus harness has no timeout contract; before #210 it + // inherited whatever ceiling the last in-process run left behind. + crate::deadline::Deadline::none(), ); let needs = crate::utility::needs::needs_from_diff(&all_fragments, &core_ids, &diff_text); diff --git a/crates/diffctx-native/src/pipeline.rs b/crates/diffctx-native/src/pipeline.rs index 326f3542e..07f6bc99d 100644 --- a/crates/diffctx-native/src/pipeline.rs +++ b/crates/diffctx-native/src/pipeline.rs @@ -56,9 +56,10 @@ pub struct ScoredState { /// filtered, and #188 documents a reviewer concluding "no tests" from /// exactly that silence. pub ignored_changes: Vec, - /// Changed files withheld by `.diffctx/ignore`. Count only: the policy's - /// point is that these paths stay out of the artifact (#85), but a bare - /// number still tells the reader the output is deliberately incomplete. + /// Changed files withheld by `.diffctx/ignore` or the secret-path + /// heuristics. Count only: both policies' point is that these paths stay + /// out of the artifact (#85, #214), but a bare number still tells the + /// reader the output is deliberately incomplete. pub policy_excluded_count: usize, /// Which discovery strategy first surfaced each discovered path. /// @@ -215,7 +216,7 @@ pub fn compute_scored_state( ) -> Result { let t_entry = Instant::now(); git::set_git_timeout(timeout); - crate::deadline::set_compute_deadline(timeout); + let deadline = crate::deadline::Deadline::from_timeout_secs(timeout); let root_dir = resolve_repo_root(root_dir)?; if alpha <= 0.0 || alpha >= 1.0 { anyhow::bail!("alpha must be in (0, 1), got {}", alpha); @@ -253,10 +254,27 @@ pub fn compute_scored_state( } } - hunks.retain(|h| !is_secret_path(Path::new(&*h.path))); + // Secret-classified changed paths are withheld like `.diffctx/ignore` + // ones, and with the same disclosure stance: count only, never the path + // (#85, #188, #214). Disjoint from the policy set below by construction — + // these hunks are gone before resolve_ignored_paths runs. + let mut secret_excluded_paths: FxHashSet = FxHashSet::default(); + hunks.retain(|h| { + let p = Path::new(&*h.path); + if is_secret_path(p) { + if let Some(rel) = rel_path_string(&root_dir, p) { + secret_excluded_paths.insert(rel); + } + false + } else { + true + } + }); if hunks.is_empty() { - return Ok(empty_scored_state_with_changes(root_dir, diff_range)); + let mut state = empty_scored_state_with_changes(root_dir, diff_range); + state.policy_excluded_count = secret_excluded_paths.len(); + return Ok(state); } let ignored_rel_paths = resolve_ignored_paths(&root_dir, &hunks); @@ -282,7 +300,7 @@ pub fn compute_scored_state( None => {} } } - let policy_excluded = policy_excluded_paths.len(); + let policy_excluded = policy_excluded_paths.len() + secret_excluded_paths.len(); ignored_display.sort(); ignored_display.dedup(); hunks.retain(|h| !is_ignored_path(&root_dir, Path::new(&*h.path), &ignored_rel_paths)); @@ -473,6 +491,7 @@ pub fn compute_scored_state( Some(root_dir.as_path()), Some(&seed_weights), Some(&discovered_path_set), + deadline, ); let needs = crate::utility::needs::needs_from_diff(&all_fragments, &core_ids, &diff_text); @@ -862,7 +881,6 @@ pub(crate) fn is_ignored_path( /// selection state, so selection is bit-identical with and without it. pub fn raw_diff_text(root_dir: &Path, diff_range: Option<&str>, timeout: u64) -> Result { git::set_git_timeout(timeout); - crate::deadline::set_compute_deadline(timeout); let root_dir = resolve_repo_root(root_dir)?; let resolved = git::resolve_duration_range(&root_dir, diff_range)?; let diff_text = git::get_diff_text(&root_dir, resolved.range.as_deref())?; @@ -985,8 +1003,9 @@ fn build_diff_context_full( no_content: bool, timeout: u64, ) -> Result { + // --full runs no scoring/edge phase, so the git subprocess timeout is the + // only ceiling it needs. git::set_git_timeout(timeout); - crate::deadline::set_compute_deadline(timeout); let root_dir = resolve_repo_root(root_dir)?; let resolved = git::resolve_duration_range(&root_dir, diff_range)?; let diff_range = resolved.range.as_deref(); diff --git a/crates/diffctx-native/src/project_graph.rs b/crates/diffctx-native/src/project_graph.rs index 6bf88b728..8ca860806 100644 --- a/crates/diffctx-native/src/project_graph.rs +++ b/crates/diffctx-native/src/project_graph.rs @@ -104,6 +104,7 @@ pub fn build_project_graph_with_options( &all_fragments, Some(resolved_root.as_path()), skip_expensive, + crate::deadline::Deadline::none(), ); let graph = graph::build_graph_capped(&all_fragments, capped); diff --git a/crates/diffctx-native/src/render.rs b/crates/diffctx-native/src/render.rs index 8ba36add8..0e4d555fd 100644 --- a/crates/diffctx-native/src/render.rs +++ b/crates/diffctx-native/src/render.rs @@ -67,8 +67,8 @@ pub struct DiffContextOutput { /// against a change whose tests the tool had filtered). #[serde(skip_serializing_if = "Vec::is_empty")] pub ignored_changes: Vec, - /// Files excluded by `.diffctx/ignore` policy — count only, see - /// `ScoredState::policy_excluded_count`. + /// Files excluded by `.diffctx/ignore` or secret-path policy — count + /// only, see `ScoredState::policy_excluded_count`. #[serde(skip_serializing_if = "is_zero")] pub policy_excluded_count: usize, pub fragment_count: usize, diff --git a/crates/diffctx-native/src/scoring.rs b/crates/diffctx-native/src/scoring.rs index abb848a93..6a9448498 100644 --- a/crates/diffctx-native/src/scoring.rs +++ b/crates/diffctx-native/src/scoring.rs @@ -88,6 +88,7 @@ pub fn create_scoring_strategy(config: &PipelineConfig) -> Box, seed_weights: Option<&FxHashMap>, discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, ) -> ScoringResult; } @@ -118,10 +120,12 @@ impl ScoringStrategy for PPRScoring { repo_root: Option<&Path>, seed_weights: Option<&FxHashMap>, _discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, ) -> ScoringResult { let skip_expensive = all_fragments.len() > LIMITS.skip_expensive_threshold; let t_graph = Instant::now(); - let capped = edges::collect_capped_edges(all_fragments, repo_root, skip_expensive); + let capped = + edges::collect_capped_edges(all_fragments, repo_root, skip_expensive, deadline); let admissible_files = file_admission_enabled().then(|| { edges::naming_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) }); @@ -180,10 +184,12 @@ impl ScoringStrategy for EgoGraphScoring { repo_root: Option<&Path>, _seed_weights: Option<&FxHashMap>, _discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, ) -> ScoringResult { let skip_expensive = all_fragments.len() > LIMITS.skip_expensive_threshold; let t_graph = Instant::now(); - let capped = edges::collect_capped_edges(all_fragments, repo_root, skip_expensive); + let capped = + edges::collect_capped_edges(all_fragments, repo_root, skip_expensive, deadline); let admissible_files = file_admission_enabled().then(|| { edges::naming_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) }); @@ -236,6 +242,7 @@ impl ScoringStrategy for BM25Scoring { _repo_root: Option<&Path>, _seed_weights: Option<&FxHashMap>, _discovered_paths: Option<&FxHashSet>>, + _deadline: crate::deadline::Deadline, ) -> ScoringResult { let query_tokens: Vec = all_fragments .iter() @@ -421,6 +428,7 @@ impl ScoringStrategy for RrfFusionScoring { repo_root: Option<&Path>, seed_weights: Option<&FxHashMap>, discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, ) -> ScoringResult { let ego = EgoGraphScoring::new(self.ego_depth).score_and_filter( all_fragments, @@ -429,6 +437,7 @@ impl ScoringStrategy for RrfFusionScoring { repo_root, seed_weights, discovered_paths, + deadline, ); let lexical = BM25Scoring.score_and_filter( all_fragments, @@ -437,6 +446,7 @@ impl ScoringStrategy for RrfFusionScoring { repo_root, seed_weights, discovered_paths, + deadline, ); let ego_admitted: FxHashSet = ego @@ -705,6 +715,7 @@ impl ScoringStrategy for PitFusionScoring { repo_root: Option<&Path>, seed_weights: Option<&FxHashMap>, discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, ) -> ScoringResult { let ego = EgoGraphScoring::new(self.ego_depth).score_and_filter( all_fragments, @@ -713,6 +724,7 @@ impl ScoringStrategy for PitFusionScoring { repo_root, seed_weights, discovered_paths, + deadline, ); let lexical = BM25Scoring.score_and_filter( all_fragments, @@ -721,6 +733,7 @@ impl ScoringStrategy for PitFusionScoring { repo_root, seed_weights, discovered_paths, + deadline, ); let ego_admitted: FxHashSet = ego @@ -1153,8 +1166,15 @@ mod tests { let config = PipelineConfig::from_mode(mode); let strategy = create_scoring_strategy(&config); let empty: Vec = Vec::new(); - let result = - strategy.score_and_filter(&empty, &FxHashSet::default(), &[], None, None, None); + let result = strategy.score_and_filter( + &empty, + &FxHashSet::default(), + &[], + None, + None, + None, + crate::deadline::Deadline::none(), + ); assert!( result.filtered_fragments.is_empty(), "{mode:?} invented fragments from an empty universe" diff --git a/src/diffctx/writer.py b/src/diffctx/writer.py index 74526e3f2..65d97322c 100644 --- a/src/diffctx/writer.py +++ b/src/diffctx/writer.py @@ -287,7 +287,7 @@ def _write_tree_text_diff_context(file: TextIO, tree: dict[str, Any]) -> None: if tree.get("ignored_changes"): _write_text_path_list(file, "changed but excluded by ignore rules", tree["ignored_changes"]) if tree.get("policy_excluded_count"): - file.write(f" changed files withheld by .diffctx/ignore: {tree['policy_excluded_count']}\n") + file.write(f" changed files withheld by exclusion policy: {tree['policy_excluded_count']}\n") if tree.get("raw_diff"): file.write(" raw diff:\n") for line in tree["raw_diff"].rstrip("\n").split("\n"): @@ -459,7 +459,7 @@ def _write_markdown_diff_context(file: TextIO, tree: dict[str, Any]) -> None: _write_md_path_list(file, tree, "ignored_changes", "Changed but excluded by ignore rules") if tree.get("policy_excluded_count"): n = tree["policy_excluded_count"] - file.write(f"*{n} changed file(s) withheld by `.diffctx/ignore`.*\n\n") + file.write(f"*{n} changed file(s) withheld by exclusion policy (`.diffctx/ignore` or secret paths).*\n\n") if tree.get("raw_diff"): file.write("## Raw diff\n\n") _write_md_code_block(file, tree["raw_diff"], "diff", "") diff --git a/tests/test_concurrent_deadlines.py b/tests/test_concurrent_deadlines.py new file mode 100644 index 000000000..0dfd0f79e --- /dev/null +++ b/tests/test_concurrent_deadlines.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import threading +import time + +import diffctx +from tests.framework.pygit2_backend import Pygit2Repo + + +def _repo(tmp_path, name, files): + repo = Pygit2Repo(tmp_path / name) + for i in range(files): + repo.add_file(f"mod_{i}.py", f"def fn_{i}():\n return {i}\n") + repo.add_file("main.py", "\n".join(f"from mod_{i} import fn_{i}" for i in range(files)) + "\n") + repo.commit("initial") + repo.add_file("main.py", "\n".join(f"from mod_{i} import fn_{i}" for i in range(files)) + "\nEXTRA = 1\n") + repo.commit("change") + return repo + + +def test_expired_deadline_in_one_run_does_not_kill_a_concurrent_run(tmp_path): + healthy_repo = _repo(tmp_path, "healthy", files=40) + expired_repo = _repo(tmp_path, "expired", files=2) + results: dict[str, dict] = {} + errors: dict[str, BaseException] = {} + started = threading.Event() + + def run(key, repo, timeout, delay): + started.wait() + time.sleep(delay) + try: + results[key] = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1", timeout=timeout) + except BaseException as e: # pyo3 surfaces the deadline panic as a BaseException + errors[key] = e + + threads = [ + threading.Thread(target=run, args=("healthy", healthy_repo, 300, 0.0)), + threading.Thread(target=run, args=("expired", expired_repo, 0, 0.05)), + ] + for t in threads: + t.start() + started.set() + for t in threads: + t.join(timeout=120) + + assert "healthy" in results, errors.get("healthy") + assert results["healthy"].get("fragments") diff --git a/tests/test_excluded_changes_visibility.py b/tests/test_excluded_changes_visibility.py index 40f2d597d..386719477 100644 --- a/tests/test_excluded_changes_visibility.py +++ b/tests/test_excluded_changes_visibility.py @@ -113,5 +113,5 @@ def test_markdown_render_carries_both_exclusion_notes(tmp_path): repo2 = _two_commit_repo(tmp_path / "p2", ".diffctx/ignore", "*.md\n") result2 = diffctx.build_diff_context(root_dir=repo2.path, diff_range="HEAD~1") md2 = diffctx.to_markdown(result2) - assert "withheld by `.diffctx/ignore`" in md2 + assert "withheld by exclusion policy" in md2 assert "notes.md" not in md2 diff --git a/tests/test_secret_ignores_diff.py b/tests/test_secret_ignores_diff.py index b5dd1f59c..56f304d84 100644 --- a/tests/test_secret_ignores_diff.py +++ b/tests/test_secret_ignores_diff.py @@ -1,6 +1,7 @@ from __future__ import annotations import diffctx +from tests.conftest import run_diffctx_subprocess from tests.framework.pygit2_backend import Pygit2Repo @@ -34,3 +35,39 @@ def test_diff_context_excludes_changed_private_keys(tmp_path): assert "tls.key" not in rendered assert "server.pem" not in rendered assert "app.py" in rendered + + +def test_withheld_secret_files_are_disclosed_as_a_count(tmp_path): + repo = _build_repo_with_changed_private_keys(tmp_path) + + result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1") + assert result.get("policy_excluded_count") == 3 + rendered = diffctx.to_yaml(result) + assert "policy_excluded_count: 3" in rendered + assert "id_rsa" not in rendered + + +def test_secret_only_change_still_renders_the_withheld_notice(tmp_path): + repo = Pygit2Repo(tmp_path / "repo") + repo.add_file("app.py", "import os\nKEY = os.environ['K']\n") + repo.add_file("id_rsa", "private-key-material LEAK_RSA_INITIAL\n") # pragma: allowlist secret + repo.commit("initial") + + repo.add_file("id_rsa", "private-key-material LEAK_RSA_CHANGED\n") # pragma: allowlist secret + repo.commit("touch only the secret file") + + result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1") + assert result.get("policy_excluded_count") == 1 + for rendered in ( + diffctx.to_yaml(result), + diffctx.to_markdown(result), + diffctx.to_text(result), + ): + assert "id_rsa" not in rendered + assert "LEAK_RSA" not in rendered + + proc = run_diffctx_subprocess([str(repo.path), "--diff", "HEAD~1"], cwd=str(repo.path)) + assert proc.returncode == 0, proc.stderr + assert "no semantic context" not in proc.stderr + assert "id_rsa" not in proc.stdout + assert "withheld by exclusion policy" in proc.stdout From c58afb5cef6d3eef2c3bd786fa2247effaf68fc1 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 13:27:02 +0200 Subject: [PATCH 21/73] QA.md: unbind pytest count, pin mid-compile-edit trap for corpus runs --- QA.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/QA.md b/QA.md index 004fe2cc0..022a93291 100644 --- a/QA.md +++ b/QA.md @@ -46,8 +46,8 @@ a deployed/web surface ships; re-derive then, don't trust this table. ## Tests -- `pytest` — integration-only, ~600 tests, ~2 min locally. Known valid - skip: `test_clipboard.py` (Windows only). +- `pytest` — integration-only (the run prints the count; don't pin it + here, it rots). Known valid skip: `test_clipboard.py` (Windows only). - Local flake mode: `-n auto` on the M4 Pro means 14 xdist workers, each CLI subprocess spawning a full rayon pool — under load the global pytest-timeout (30 s since 27d6a3d6, was 10 s) fires on @@ -262,6 +262,9 @@ Two ways to invalidate an overnight measurement, both observed in practice: result file. `cargo build` / `cargo test` are safe — they write `target/`. Editing Python under `src/diffctx/` is NOT safe for the CLI path (editable install), though `mcp/` is, since the CLI never imports it. +- **A background `cargo test` compiles the live tree**: editing sources after + launching the corpus run means the binary's content is undefined — kill and + relaunch after the last edit (one mid-compile edit cost a full 150s rerun). - **Name the build, not the branch.** Commit time is not build time. Compare the `.so` mtime against `git log --date` and state which commit's *content* the run executed; "measured on main" is meaningless when six commits landed while From 78a0d3c2492bac2e856c01aa490d125bdbc3eec5 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 13:30:26 +0200 Subject: [PATCH 22/73] chore(deps): block mcp>=2 by version range, not just semver class --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 058907b7e..5f77da8f6 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,8 +20,12 @@ updates: # mcp 2.x is a breaking SDK rewrite; the <2.0 pin in pyproject.toml is a # deliberate compatibility decision (see the comment there). PR #219 # widened the bound mechanically and every test matrix failed at import. + # `versions` in addition to `update-types`: a "update requirement" range + # widening is not classified as semver-major (PR #224 got through), the + # explicit range is what actually blocks it. - dependency-name: "mcp" update-types: ["version-update:semver-major"] + versions: [">=2.0.0"] groups: all-dependencies: patterns: From c94843566e7cb8a03a8d8342e564f536fd0c7764 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 11:39:17 +0000 Subject: [PATCH 23/73] Release version 1.14.0 --- .claude-plugin/plugin.json | 2 +- Cargo.lock | 2 +- action.yml | 2 +- crates/diffctx-native/Cargo.toml | 2 +- docs/product/github-action.md | 4 ++-- pyproject.toml | 2 +- server.json | 4 ++-- src/diffctx/version.py | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 9beb91c23..8f037453d 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "diffctx", "displayName": "diffctx", - "version": "1.13.0", + "version": "1.14.0", "description": "Smart git diff context for LLMs and AI agents: budgeted fragment selection, deterministic, MCP server included", "author": { "name": "Nikolay Eremeev", diff --git a/Cargo.lock b/Cargo.lock index a1373ca37..3e5266d39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -194,7 +194,7 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "diffctx" -version = "1.13.0" +version = "1.14.0" dependencies = [ "aho-corasick", "anyhow", diff --git a/action.yml b/action.yml index 06e092124..d1ebd06e8 100644 --- a/action.yml +++ b/action.yml @@ -88,7 +88,7 @@ inputs: diffctx-version: description: Exact diffctx release installed from PyPI. required: false - default: 1.13.0 + default: 1.14.0 python-version: description: Python interpreter used for the isolated diffctx install. required: false diff --git a/crates/diffctx-native/Cargo.toml b/crates/diffctx-native/Cargo.toml index 730a27a6d..bc940aa35 100644 --- a/crates/diffctx-native/Cargo.toml +++ b/crates/diffctx-native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diffctx" -version = "1.13.0" +version = "1.14.0" edition = "2024" rust-version = "1.85" description = "Selects the minimum code an LLM needs to review a git diff: walks the dependency graph outward from changed lines and stops when extra context stops paying for itself" diff --git a/docs/product/github-action.md b/docs/product/github-action.md index ba7e418be..b09195262 100644 --- a/docs/product/github-action.md +++ b/docs/product/github-action.md @@ -6,7 +6,7 @@ No secret, no agent loop, no model of its own: the review step downstream chooses the model. Marketplace name: **diffctx LLM Diff Context** -(`nikolay-e/diffctx@v1.13.0`). Runs on `ubuntu-latest`. Releases are tagged +(`nikolay-e/diffctx@v1.14.0`). Runs on `ubuntu-latest`. Releases are tagged `vMAJOR.MINOR.PATCH` only — there is no floating `@v1` tag, so pin an exact release. @@ -24,7 +24,7 @@ jobs: fetch-depth: 0 - id: context - uses: nikolay-e/diffctx@v1.13.0 + uses: nikolay-e/diffctx@v1.14.0 with: budget: '8000' diff --git a/pyproject.toml b/pyproject.toml index d8c6ea1e6..5940eba7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = [ "maturin>=1.10,<1.15" ] [project] name = "diffctx" -version = "1.13.0" +version = "1.14.0" description = "Smart git diff context for LLMs and AI agents: budgeted fragment selection, deterministic, MCP server included" readme = "README.md" keywords = [ diff --git a/server.json b/server.json index 8517d88f6..feeaa7e28 100644 --- a/server.json +++ b/server.json @@ -3,7 +3,7 @@ "name": "io.github.nikolay-e/diffctx", "title": "diffctx", "description": "Selects the minimum code an LLM needs to review a git diff", - "version": "1.13.0", + "version": "1.14.0", "websiteUrl": "https://nikolay-e.github.io/diffctx/", "repository": { "url": "https://github.com/nikolay-e/diffctx", @@ -14,7 +14,7 @@ "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "diffctx", - "version": "1.13.0", + "version": "1.14.0", "runtimeHint": "uvx", "runtimeArguments": [ { diff --git a/src/diffctx/version.py b/src/diffctx/version.py index 9a34ccc9f..b9f68edb2 100644 --- a/src/diffctx/version.py +++ b/src/diffctx/version.py @@ -1 +1 @@ -__version__ = "1.13.0" +__version__ = "1.14.0" From 0663cef389f568a1d1944d78866274a90428f07f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 11:47:34 +0000 Subject: [PATCH 24/73] chore: packaging manifests for 1.14.0 --- bucket/diffctx.json | 6 +++--- packaging/npm/checksums.json | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bucket/diffctx.json b/bucket/diffctx.json index 7c8b8e69b..3c25162d8 100644 --- a/bucket/diffctx.json +++ b/bucket/diffctx.json @@ -1,12 +1,12 @@ { - "version": "1.13.0", + "version": "1.14.0", "description": "Selects the minimum code an LLM needs to review a git diff", "homepage": "https://github.com/nikolay-e/diffctx", "license": "Apache-2.0", "architecture": { "64bit": { - "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.13.0/diffctx-1.13.0-x86_64-pc-windows-msvc.zip", - "hash": "43a862384d393ca8f54e81812f530fc434e07f8d85faa1219cd893fd5932ef88" + "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.14.0/diffctx-1.14.0-x86_64-pc-windows-msvc.zip", + "hash": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf" } }, "bin": "diffctx.exe", diff --git a/packaging/npm/checksums.json b/packaging/npm/checksums.json index f8bf17167..a6cb70d6a 100644 --- a/packaging/npm/checksums.json +++ b/packaging/npm/checksums.json @@ -1,6 +1,6 @@ { - "diffctx-1.13.0-aarch64-apple-darwin.tar.gz": "bc657ca9ceafee4127c454940e9d4700dd9ba8df338326b1e67a04a430479902", - "diffctx-1.13.0-aarch64-unknown-linux-gnu.tar.gz": "46b726b644f4a7d3759ecb5c4b48f1467f26f3c0880c7db66b6deb64c92da5c7", - "diffctx-1.13.0-x86_64-pc-windows-msvc.zip": "43a862384d393ca8f54e81812f530fc434e07f8d85faa1219cd893fd5932ef88", - "diffctx-1.13.0-x86_64-unknown-linux-gnu.tar.gz": "0585f5df531dbac369ced4398fa745a161c6f6fdaff52e457e646da43bc79f50" + "diffctx-1.14.0-aarch64-apple-darwin.tar.gz": "20223d07e8f304b631eff3556386564918037359dbbf12c2ca18335381c129fd", + "diffctx-1.14.0-aarch64-unknown-linux-gnu.tar.gz": "3922b1460a1f5e8f4f79a2c7c2dcc3d3da5dc9a9174719b44bf936cf57b86a6a", + "diffctx-1.14.0-x86_64-pc-windows-msvc.zip": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf", + "diffctx-1.14.0-x86_64-unknown-linux-gnu.tar.gz": "2125f363fae2439162e4403e20bc90bc366bed098332c32714867273376b38a1" } From d08eb8ce35eaff4e53292a1f21bdc8b876ebe6e6 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 13:53:04 +0200 Subject: [PATCH 25/73] docs: cut CHANGELOG 1.14.0 section --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fdba7e59..8f29fca8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.14.0] - 2026-08-16 + ### Fixed - **Changed secret-classified files (`id_rsa`, `*.key`, `*.pem`, …) are now @@ -991,7 +993,8 @@ Earlier releases shipped as `treemapper`; see for the corresponding GitHub release notes (`1.0.0` through `1.6.1`). -[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.13.0...HEAD +[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.14.0...HEAD +[1.14.0]: https://github.com/nikolay-e/diffctx/compare/v1.13.0...v1.14.0 [1.13.0]: https://github.com/nikolay-e/diffctx/compare/v1.12.3...v1.13.0 [1.12.3]: https://github.com/nikolay-e/diffctx/compare/v1.12.2...v1.12.3 [1.12.2]: https://github.com/nikolay-e/diffctx/compare/v1.12.1...v1.12.2 From 14612a8069ae792e82319af1a65d31ba93bfec33 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 18:15:48 +0200 Subject: [PATCH 26/73] fix: edge-cap dedup, script type=, scala imports, pub-use order, sig ceiling, omitted-files footer --- CHANGELOG.md | 36 +++++++++ crates/diffctx-native/src/edges/base.rs | 64 +++++++++++++-- .../src/edges/config_edges/generic.rs | 46 ++++++++++- .../diffctx-native/src/edges/semantic/jvm.rs | 77 ++++++++++++++++++- .../src/edges/semantic/rust_lang.rs | 71 ++++++++++++++--- .../src/parsers/tree_sitter_strategy.rs | 58 ++++++++++++-- crates/diffctx-native/src/select.rs | 73 +++++++++++++++++- .../tests/known_below_threshold.txt | 1 - src/diffctx/writer.py | 20 +++++ tests/test_excluded_changes_visibility.py | 38 +++++++++ 10 files changed, 451 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f29fca8c..3d2276ba9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- **Changed files that produced no fragments are disclosed in the md/text + output** ("Changed files not represented in the output"): a range whose + selection dropped some changed files no longer hides the gap — the footer + names exactly the changed files absent from the fragment list. Derived + from the already policy-clean `changed_files`, so withheld paths can never + appear in it. + +### Fixed + +- **Path-reference ambiguity cap counted duplicate index keys** (#207): every + file was indexed under its absolute AND repo-relative path, so + `MAX_FILES_PER_PATH_REF` (8) effectively halved, and host directory + components (`/home/runner/work/...`) matched references they had nothing + to do with. The index now carries one repo-relative posix entry per file. +- **`\n"; + let frags = TreeSitterStrategy::new().fragment(Arc::from("app.html"), content); + assert!( + frags + .iter() + .any(|f| f.symbol_name.as_deref() == Some("realJs")), + "data-type is not the type attribute; the script is JavaScript" + ); + } + + #[test] + fn a_mime_parameter_does_not_defeat_the_javascript_type() { + let content = "\n"; + let frags = TreeSitterStrategy::new().fragment(Arc::from("app.html"), content); + assert!( + frags + .iter() + .any(|f| f.symbol_name.as_deref() == Some("legacyJs")), + "charset parameter after ';' must not degrade the script to raw lines" + ); + } } #[cfg(test)] diff --git a/crates/diffctx-native/src/select.rs b/crates/diffctx-native/src/select.rs index 790c1e295..4ccc10109 100644 --- a/crates/diffctx-native/src/select.rs +++ b/crates/diffctx-native/src/select.rs @@ -264,8 +264,14 @@ fn select_core_fragments( let over_file_ceiling = spent > 0 && spent + frag.token_count > file_ceiling; if core_used + frag.token_count > core_budget || over_file_ceiling { if let Some(sig) = sig_lookup.get(&core_id) { + // The substitute honors the same per-file ceiling (#212): a + // file at its share must not keep placing signature stubs — + // its remaining cores defer to the ceiling-free rescue sweep + // below, after other files had their turn. + let sig_over_ceiling = spent > 0 && spent + sig.token_count > file_ceiling; if !state.selected_ids.contains(&sig.id) && core_used + sig.token_count <= core_budget + && !sig_over_ceiling { let rel_score = rel.get(&core_id).copied().unwrap_or(0.0); place_fragment(sig, &mut core_used, state, rel_score, &mut file_spent); @@ -1240,6 +1246,70 @@ mod tests { "leftover budget must flow back to the blob once competitors are served" ); + run_lone_file_check(budget, &rel); + } + + /// #212: once a file is at its ceiling, its remaining cores may not keep + /// placing signature stubs either — competitor cores get their phase-1 + /// seat first, and the file's tail waits for the ceiling-free sweep. + #[test] + fn signature_stubs_honor_the_per_file_ceiling() { + let budget = 1_000u32; + let mut cores: Vec = vec![frag("blob.rs", 1, 90, FragmentKind::Function, 240)]; + for i in 1..8 { + cores.push(frag( + "blob.rs", + 1 + i * 100, + 90 + i * 100, + FragmentKind::Function, + 400, + )); + } + cores.push(frag("b.rs", 1, 50, FragmentKind::Function, 200)); + let sig_lookup: FxHashMap = cores + .iter() + .filter(|c| c.id.path.as_ref() == "blob.rs") + .map(|c| { + let mut sig = frag( + "blob.rs", + c.start_line(), + c.start_line(), + FragmentKind::FunctionSignature, + 30, + ); + sig.id = FragmentId::new(c.id.path.clone(), c.start_line(), c.start_line()); + (c.id.clone(), sig) + }) + .collect(); + let mut rel: FxHashMap = FxHashMap::default(); + for c in &cores { + let w = if c.id.path.as_ref() == "blob.rs" { + 1.0 + } else { + 0.5 + }; + rel.insert(c.id.clone(), w); + } + let core_ids: FxHashSet = cores.iter().map(|c| c.id.clone()).collect(); + let mut state = init_selection_state(&core_ids, &rel, budget, None); + select_core_fragments(&cores, &rel, &[], &mut state, budget, &sig_lookup, None); + + let first_b = state + .selected + .iter() + .position(|f| f.id.path.as_ref() == "b.rs") + .expect("the competitor core must be selected"); + let stubs_before_b = state.selected[..first_b] + .iter() + .filter(|f| f.kind.is_signature()) + .count(); + assert_eq!( + stubs_before_b, 0, + "a file at its ceiling placed {stubs_before_b} signature stubs before the competitor got its seat" + ); + } + + fn run_lone_file_check(budget: u32, rel: &FxHashMap) { // Lone-file run: ceiling must not strand budget. let lone: Vec = (0..20) .map(|i| { @@ -1252,7 +1322,8 @@ mod tests { ) }) .collect(); - let result = lazy_greedy_select(lone, &core, &rel, &[], budget, 0.0, None, None, None); + let core: FxHashSet = FxHashSet::default(); + let result = lazy_greedy_select(lone, &core, rel, &[], budget, 0.0, None, None, None); assert!( result.selected.len() >= 9, "single-file selection stranded budget: {} fragments", diff --git a/crates/diffctx-native/tests/known_below_threshold.txt b/crates/diffctx-native/tests/known_below_threshold.txt index f2397f7ef..8a4f2caa4 100644 --- a/crates/diffctx-native/tests/known_below_threshold.txt +++ b/crates/diffctx-native/tests/known_below_threshold.txt @@ -75,7 +75,6 @@ languages/rust/rust_016_use_crate_module languages/rust/rust_022_unsafe_ffi languages/rust/rust_025_question_mark_operator languages/rust/rust_026_box_dyn_trait -languages/rust/rust_027_arc_mutex languages/rust/rust_028_build_rs languages/rust/rust_032_move_semantics languages/rust/rust_034_copy_trait diff --git a/src/diffctx/writer.py b/src/diffctx/writer.py index 65d97322c..652131180 100644 --- a/src/diffctx/writer.py +++ b/src/diffctx/writer.py @@ -294,6 +294,9 @@ def _write_tree_text_diff_context(file: TextIO, tree: dict[str, Any]) -> None: file.write(f" {line}\n" if line else "\n") for frag in tree.get("fragments", []): _write_text_fragment(file, frag, " ") + omitted = _omitted_changed_files(tree) + if omitted: + _write_text_path_list(file, "changed files not represented in the output", omitted) def _write_tree_text_children(file: TextIO, children: list[dict[str, Any]]) -> None: @@ -434,6 +437,17 @@ def _write_markdown_fragment(file: TextIO, frag: dict[str, Any]) -> None: _write_md_code_block(file, frag["content"], lang, "") +def _omitted_changed_files(tree: dict[str, Any]) -> list[str]: + # Changed files the selection produced nothing for. Derived strictly from + # changed_files (already policy-clean: secret/ignored/deleted paths never + # enter it), so the footer can never name a withheld path. + changed = tree.get("changed_files") or [] + if not changed: + return [] + represented = {str(frag.get("path", "")) for frag in tree.get("fragments") or []} + return [str(p) for p in changed if str(p) not in represented] + + def _write_md_path_list(file: TextIO, tree: dict[str, Any], key: str, title: str) -> None: if not tree.get(key): return @@ -465,6 +479,12 @@ def _write_markdown_diff_context(file: TextIO, tree: dict[str, Any]) -> None: _write_md_code_block(file, tree["raw_diff"], "diff", "") for frag in tree.get("fragments", []): _write_markdown_fragment(file, frag) + omitted = _omitted_changed_files(tree) + if omitted: + file.write("**Changed files not represented in the output (budget/selection):**\n\n") + for path in omitted: + file.write(f"- {_escape_md_inline_code(path)}\n") + file.write("\n") def write_tree_markdown(file: TextIO, tree: dict[str, Any]) -> None: diff --git a/tests/test_excluded_changes_visibility.py b/tests/test_excluded_changes_visibility.py index 386719477..ac4dc8c89 100644 --- a/tests/test_excluded_changes_visibility.py +++ b/tests/test_excluded_changes_visibility.py @@ -115,3 +115,41 @@ def test_markdown_render_carries_both_exclusion_notes(tmp_path): md2 = diffctx.to_markdown(result2) assert "withheld by exclusion policy" in md2 assert "notes.md" not in md2 + + +def test_omitted_changed_files_are_disclosed_in_md_and_text(tmp_path): + repo = Pygit2Repo(tmp_path / "repo") + for i in range(6): + repo.add_file(f"src/mod_{i}.py", f"def fn_{i}(x):\n return x + {i}\n") + repo.commit("initial") + for i in range(6): + repo.add_file(f"src/mod_{i}.py", f"def fn_{i}(x):\n return x + {i} + 1\n") + repo.commit("bump all") + + result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1", budget_tokens=25) + represented = {f["path"] for f in result.get("fragments") or []} + omitted = [p for p in result.get("changed_files") or [] if p not in represented] + assert omitted, "budget 25 over 6 changed files must force omission" + + md = diffctx.to_markdown(result) + assert "Changed files not represented in the output" in md + footer = md.split("Changed files not represented in the output", 1)[1] + for path in omitted: + assert path in footer + for path in represented: + assert path not in footer + + txt = diffctx.to_text(result) + assert "changed files not represented in the output" in txt + + +def test_fully_represented_output_has_no_omission_footer(tmp_path): + repo = Pygit2Repo(tmp_path / "repo") + repo.add_file("src/app.py", "def a():\n pass\n") + repo.commit("initial") + repo.add_file("src/app.py", "def a():\n return 1\n") + repo.commit("change") + + result = diffctx.build_diff_context(root_dir=repo.path, diff_range="HEAD~1") + md = diffctx.to_markdown(result) + assert "not represented in the output" not in md From b56e85b1e26d06dfe3fcabe35dd6dffdbae11cad Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 18:26:53 +0200 Subject: [PATCH 27/73] docs+perf: file-star measured net-negative (#208), gate reps alloc, truthful comments --- crates/diffctx-native/src/edges/base.rs | 11 +++++---- .../src/edges/semantic/c_family.rs | 9 +++---- .../src/edges/structural/containment.rs | 24 ++++++++++++------- .../src/edges/structural/testing.rs | 4 ++-- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/crates/diffctx-native/src/edges/base.rs b/crates/diffctx-native/src/edges/base.rs index b06e5ec76..94627300e 100644 --- a/crates/diffctx-native/src/edges/base.rs +++ b/crates/diffctx-native/src/edges/base.rs @@ -97,8 +97,8 @@ pub struct FragmentIndex { /// interior) requires each reference component to appear as a whole path /// component, so the last component is a complete candidate filter. Each /// entry carries the file's representative fragment: a path reference is a - /// file-level relation, and the containment star spreads its mass inside - /// the file. + /// file-level relation and endorses the file, not each sibling (see + /// `file_representatives` on the accepted reachability trade, #208). lower_paths: Vec<(String, FragmentId)>, component_to_paths: FxHashMap>, } @@ -185,8 +185,11 @@ impl FragmentIndex { /// change endorsing a file diffusely must not outweigh a call edge naming one /// symbol — the fragment-pair encoding gave both the same weight, which is /// simultaneously the quadratic edge blow-up (envoy: 22M c-family edges) and -/// the file-level noise mechanism of #65. Reachability of the file's other -/// fragments is the containment star's job. +/// the file-level noise mechanism of #65. The file's other fragments are +/// reachable only through nesting and naming edges — the intra-file star is +/// OFF by default and measured net-negative on the corpus (#208) — an +/// accepted trade: a file-level relation endorses the file, not each of its +/// siblings. pub fn file_representatives(fragments: &[Fragment]) -> FxHashMap { let mut file_to_rep: FxHashMap = FxHashMap::default(); let mut file_to_token_count: FxHashMap = FxHashMap::default(); diff --git a/crates/diffctx-native/src/edges/semantic/c_family.rs b/crates/diffctx-native/src/edges/semantic/c_family.rs index b1f003f56..9821a4f57 100644 --- a/crates/diffctx-native/src/edges/semantic/c_family.rs +++ b/crates/diffctx-native/src/edges/semantic/c_family.rs @@ -172,8 +172,8 @@ impl EdgeBuilder for CFamilyEdgeBuilder { // An include names a file, so its edge lands on the file's // representative fragment (base::file_representatives — the sibling - // builder's long-standing semantics); the containment star carries the - // mass to the rest of the file. Buckets therefore hold file paths, and + // builder's long-standing semantics; see its doc on the accepted + // reachability trade, #208). Buckets therefore hold file paths, and // ambiguity is measured in files: a basename repeated across the tree // is what makes an include unresolvable. // Representatives keyed off the full slice: is_c_family is per-path, so @@ -362,8 +362,9 @@ impl EdgeBuilder for CFamilyEdgeBuilder { } // A header/impl pair is a relation between two files; representatives - // carry it, the containment star spreads it. Pairing every fragment - // with every fragment restated the same fact quadratically. + // carry it (see base::file_representatives on the accepted + // reachability trade, #208). Pairing every fragment with every + // fragment restated the same fact quadratically. for (i, (_key, (files, _))) in by_stem.iter().enumerate() { crate::deadline::check_current_every(i, 256, "edge construction (c_family pairing)"); if files.len() < 2 { diff --git a/crates/diffctx-native/src/edges/structural/containment.rs b/crates/diffctx-native/src/edges/structural/containment.rs index 6d98e073a..e28a92675 100644 --- a/crates/diffctx-native/src/edges/structural/containment.rs +++ b/crates/diffctx-native/src/edges/structural/containment.rs @@ -22,7 +22,15 @@ impl EdgeBuilder for ContainmentEdgeBuilder { let mut edges: EdgeDict = FxHashMap::default(); - let reps = super::super::base::file_representatives(fragments); + // Computed only for the experimental star below — OFF by default, and + // measured net-negative when ON (#208): 21 corpus regressions vs 14 + // improvements, 2026-08-16 A/B at shipped defaults. + let star_on = std::env::var_os("DIFFCTX_FILE_STAR").is_some(); + let reps = if star_on { + super::super::base::file_representatives(fragments) + } else { + FxHashMap::default() + }; for (path, frags) in &by_path { if frags.len() < 2 { @@ -58,13 +66,13 @@ impl EdgeBuilder for ContainmentEdgeBuilder { stack.push(f); } - // The nesting pass only connects a fragment to what encloses it, - // so a file's top-level fragments were mutually unreachable. The - // star through the file representative gives every file an - // intra-file spine — linear in fragment count — which is what - // lets file-level relations (includes, path references, pairing) - // link representatives instead of full fragment cross products. - if std::env::var_os("DIFFCTX_FILE_STAR").is_some() { + // Experimental intra-file spine: connects every fragment to the + // file representative so top-level siblings become mutually + // reachable. Ships OFF — the 2026-08-16 corpus A/B measured it + // net-negative (#208) — so by default a flat file's siblings are + // reachable only through nesting and naming edges, and the + // representative-only builders accept that. + if star_on { if let Some(rep) = reps.get(*path) { for f in &sorted { if f.id != *rep { diff --git a/crates/diffctx-native/src/edges/structural/testing.rs b/crates/diffctx-native/src/edges/structural/testing.rs index fe33ebfa3..fd690520e 100644 --- a/crates/diffctx-native/src/edges/structural/testing.rs +++ b/crates/diffctx-native/src/edges/structural/testing.rs @@ -120,8 +120,8 @@ impl EdgeBuilder for TestEdgeBuilder { let mut edges: EdgeDict = FxHashMap::default(); // The naming convention names a FILE, so the relation is carried by - // the two files' representatives (base::file_representatives) and the - // containment star spreads it within each file. One pair per + // the two files' representatives (base::file_representatives; see its + // doc on the accepted reachability trade, #208). One pair per // (test file, source file), not per fragment pair. let mut linked_file_pairs: FxHashSet<(&str, &str)> = FxHashSet::default(); From f0fe9fb9feb3cad2c11ce40a5851359dc7ec90b8 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Sun, 16 Aug 2026 18:42:32 +0200 Subject: [PATCH 28/73] fix: substituted signature stub carries changed role on both surfaces (#209) --- CHANGELOG.md | 4 ++ crates/diffctx-native/src/locate.rs | 22 +++++++++-- crates/diffctx-native/src/render.rs | 58 +++++++++++++++++++++++++---- 3 files changed, 73 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d2276ba9..3d7579efe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **The per-file budget ceiling now also gates signature substitution** (#212): a file at its ceiling can no longer keep placing signature stubs ahead of other files' cores. +- **A signature stub substituted for a changed core renders as `changed`** + (#209): the stub shares the core's location, and both surfaces (pack render + and locate) now agree it carries the change, same as an excerpt. Ordinary + context signatures stay context. - **Config-key word boundaries treat non-ASCII bytes as word bytes** (#216): a config key ending exactly where a non-ASCII letter begins (e.g. inside `tokenización`) is no longer a match, restoring the Unicode-`\b` rejection diff --git a/crates/diffctx-native/src/locate.rs b/crates/diffctx-native/src/locate.rs index d689cd36e..4d6c2a17d 100644 --- a/crates/diffctx-native/src/locate.rs +++ b/crates/diffctx-native/src/locate.rs @@ -226,13 +226,28 @@ fn rel_path(state: &ScoredState, path: &str) -> String { .unwrap_or_else(|| crate::paths::to_posix_display(std::borrow::Cow::Borrowed(path))) } +/// Same predicate on both surfaces (pack render agrees via +/// `render::carries_changed_role`): the fragment is a core, an excerpt +/// stand-in, or a signature stub substituted at a core's location (#209). +fn carries_change( + state: &ScoredState, + frag: &Fragment, + core_locs: &rustc_hash::FxHashSet<(std::sync::Arc, u32)>, +) -> bool { + state.core_ids.contains(&frag.id) + || frag.kind == crate::types::FragmentKind::Excerpt + || (frag.kind.is_signature() + && core_locs.contains(&(frag.id.path.clone(), frag.id.start_line))) +} + fn reasons_for( state: &ScoredState, frag: &Fragment, + core_locs: &rustc_hash::FxHashSet<(std::sync::Arc, u32)>, hops: Option, attribution: Option<&Vec<(String, String, f64)>>, ) -> Vec { - if state.core_ids.contains(&frag.id) || frag.kind == crate::types::FragmentKind::Excerpt { + if carries_change(state, frag, core_locs) { return vec![Reason::Changed]; } let mut reasons: Vec = Vec::new(); @@ -456,12 +471,12 @@ pub fn build_locate(state: &ScoredState, outcome: &SelectionOutcome) -> LocateOu let attribution = incoming_attribution(state); let (overflow, overflow_count, next_up) = build_overflow(state, outcome, &hops, &attribution); + let core_locs = crate::render::core_substitute_locs(&state.core_ids); let items: Vec = outcome .selected .iter() .map(|frag| { - let is_changed = state.core_ids.contains(&frag.id) - || frag.kind == crate::types::FragmentKind::Excerpt; + let is_changed = carries_change(state, frag, &core_locs); let path = rel_path(state, frag.id.path.as_ref()); let group = group_of(&path, frag.kind); LocateItem { @@ -479,6 +494,7 @@ pub fn build_locate(state: &ScoredState, outcome: &SelectionOutcome) -> LocateOu reasons: reasons_for( state, frag, + &core_locs, hops.get(&frag.id).copied(), attribution.get(&frag.id), ), diff --git a/crates/diffctx-native/src/render.rs b/crates/diffctx-native/src/render.rs index 0e4d555fd..066101511 100644 --- a/crates/diffctx-native/src/render.rs +++ b/crates/diffctx-native/src/render.rs @@ -290,8 +290,26 @@ fn create_fragment_entry(frag: &Fragment, path_str: &str) -> FragmentEntry { /// downshift would silently strip the change marker from the output, which is /// worse than the over-dump it replaces. `locate.rs` already treats `Excerpt` /// this way; both surfaces must agree. -fn carries_changed_role(frag: &Fragment, core_ids: &FxHashSet) -> bool { - core_ids.contains(&frag.id) || frag.kind == FragmentKind::Excerpt +fn carries_changed_role( + frag: &Fragment, + core_ids: &FxHashSet, + core_locs: &FxHashSet<(Arc, u32)>, +) -> bool { + core_ids.contains(&frag.id) + || frag.kind == FragmentKind::Excerpt + || (frag.kind.is_signature() + && core_locs.contains(&(frag.id.path.clone(), frag.id.start_line))) +} + +/// (path, start_line) of every core. A signature stub substituted for a +/// changed core shares its location — that is how `sig_lookup` keyed the +/// substitution — so a selected signature at a core's location carries the +/// change, same as an `Excerpt` (#209). Signatures elsewhere stay context. +pub(crate) fn core_substitute_locs(core_ids: &FxHashSet) -> FxHashSet<(Arc, u32)> { + core_ids + .iter() + .map(|id| (id.path.clone(), id.start_line)) + .collect() } /// Collapse a file's fragments (sorted by start line, ties by descending end @@ -309,19 +327,20 @@ fn merge_file_fragments( rel_path: &str, frags: &[&Fragment], core_ids: &FxHashSet, + core_locs: &FxHashSet<(Arc, u32)>, ) -> Vec<(bool, u32, FragmentEntry)> { let mut out: Vec<(bool, u32, FragmentEntry)> = Vec::new(); let mut i = 0; while i < frags.len() { let first = frags[i]; - let role_changed = carries_changed_role(first, core_ids); + let role_changed = carries_changed_role(first, core_ids, core_locs); let mut end = first.end_line(); let mut parts: Vec<&str> = vec![first.content.trim_end_matches('\n')]; let mut uniform_kind = true; let mut j = i + 1; while j < frags.len() { let next = frags[j]; - if carries_changed_role(next, core_ids) != role_changed { + if carries_changed_role(next, core_ids, core_locs) != role_changed { break; } if next.end_line() <= end { @@ -373,6 +392,7 @@ pub fn build_diff_context_output( rel_scores: &FxHashMap, change: ChangeSummary, ) -> DiffContextOutput { + let core_locs = core_substitute_locs(core_ids); let mut by_path: FxHashMap> = FxHashMap::default(); for frag in selected { by_path @@ -397,7 +417,9 @@ pub fn build_diff_context_output( .iter() .map(|f| rel_scores.get(&f.id).copied().unwrap_or(0.0)) .fold(0.0_f64, f64::max); - for (role_changed, start, mut entry) in merge_file_fragments(rel_path, &sorted, core_ids) { + for (role_changed, start, mut entry) in + merge_file_fragments(rel_path, &sorted, core_ids, &core_locs) + { if no_content { entry.content = None; } @@ -568,13 +590,33 @@ mod merge_kind_tests { frag(2, 3, FragmentKind::Chunk, " x = 1\n y = 2"), ]; let refs: Vec<&Fragment> = frags.iter().collect(); - let out = merge_file_fragments("a.py", &refs, &FxHashSet::default()); + let out = merge_file_fragments("a.py", &refs, &FxHashSet::default(), &FxHashSet::default()); assert_eq!(out.len(), 1, "contiguous fragments should merge into one"); assert_eq!(out[0].2.kind, "chunk"); assert_eq!(out[0].2.lines, "1-3"); } + /// #209: a signature stub substituted for a changed core shares the core's + /// (path, start_line); it carries the change and must render as `changed`. + /// A signature anywhere else stays context. + #[test] + fn a_signature_substituted_at_a_core_location_renders_changed() { + let core_id = FragmentId::new(Arc::from("a.py"), 10, 120); + let core_ids: FxHashSet = std::iter::once(core_id).collect(); + let core_locs = core_substitute_locs(&core_ids); + + let substituted = frag(10, 11, FragmentKind::FunctionSignature, "def big(a):"); + let refs: Vec<&Fragment> = vec![&substituted]; + let out = merge_file_fragments("a.py", &refs, &core_ids, &core_locs); + assert!(out[0].0, "the substituted stub must carry role=changed"); + + let elsewhere = frag(300, 301, FragmentKind::FunctionSignature, "def other(b):"); + let refs: Vec<&Fragment> = vec![&elsewhere]; + let out = merge_file_fragments("a.py", &refs, &core_ids, &core_locs); + assert!(!out[0].0, "an ordinary context signature must stay context"); + } + /// A run that is genuinely all one kind keeps it — the rule is about the /// label becoming false, not about merging itself. #[test] @@ -584,7 +626,7 @@ mod merge_kind_tests { frag(3, 4, FragmentKind::Chunk, "c\nd"), ]; let refs: Vec<&Fragment> = frags.iter().collect(); - let out = merge_file_fragments("a.py", &refs, &FxHashSet::default()); + let out = merge_file_fragments("a.py", &refs, &FxHashSet::default(), &FxHashSet::default()); assert_eq!(out.len(), 1); assert_eq!(out[0].2.kind, "chunk"); @@ -595,7 +637,7 @@ mod merge_kind_tests { fn a_lone_fragment_keeps_its_kind() { let frags = vec![frag(1, 1, FragmentKind::FunctionSignature, "def big(a):")]; let refs: Vec<&Fragment> = frags.iter().collect(); - let out = merge_file_fragments("a.py", &refs, &FxHashSet::default()); + let out = merge_file_fragments("a.py", &refs, &FxHashSet::default(), &FxHashSet::default()); assert_eq!(out[0].2.kind, "function_signature"); } From fc99033e3447035fab2fdf53a80dfdd22fb9b3d1 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 19 Aug 2026 10:30:14 +0000 Subject: [PATCH 29/73] chore(deps): update docker/dockerfile docker tag to v1.26 (#14) --- Dockerfile.eval | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.eval b/Dockerfile.eval index 8b96c247b..4a735a917 100644 --- a/Dockerfile.eval +++ b/Dockerfile.eval @@ -1,4 +1,4 @@ -# syntax=docker/dockerfile:1.7 +# syntax=docker/dockerfile:1.26@sha256:ecfaec9ed6d810b56388c508f4121597bfbba70d41a6dfeee4d8cad5f295fc32 # # Runtime evaluation image (code only, ~1-2 GB). # Repo cache (~20 GB) is populated at provision time by bake_eval_cache.py From 92bed54c29bb85eb45980c57fe8e526df63acf71 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 19 Aug 2026 10:30:14 +0000 Subject: [PATCH 30/73] chore(deps): update dependency python (#13) --- .mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mise.toml b/.mise.toml index 15aa78407..4b7cb8c16 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -python = "3.12" +python = "3.14.7" [env] _.python.venv = { path = ".venv", create = true } From 390872184331447e92771c8fa000ae89966a4b44 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 19 Aug 2026 10:30:17 +0000 Subject: [PATCH 31/73] chore(deps): update pre-commit hook rhysd/actionlint to v1.7.12 (#12) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3eb7c4778..e57c01fb6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -80,7 +80,7 @@ repos: name: Validate Dependabot config - repo: https://github.com/rhysd/actionlint - rev: v1.7.8 + rev: v1.7.12 hooks: - id: actionlint name: Lint GitHub Actions From 972a2147a361277aa3d909cdcc161a6c9c0a5c65 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 19 Aug 2026 10:30:17 +0000 Subject: [PATCH 32/73] chore(deps): update pre-commit hook pycqa/pylint to v4.0.7 (#11) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e57c01fb6..851cd41fa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -203,7 +203,7 @@ repos: # CODE DUPLICATION DETECTION # ============================================================================ - repo: https://github.com/PyCQA/pylint - rev: v4.0.1 + rev: v4.0.7 hooks: - id: pylint name: pylint (duplicate code detection) From 7a78c3a80486a7334bb86d1da717b976cd1497e5 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 19 Aug 2026 10:30:20 +0000 Subject: [PATCH 33/73] chore(deps): update pre-commit hook gitleaks/gitleaks to v8.29.1 (#10) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 851cd41fa..6ca7889f5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -139,7 +139,7 @@ repos: exclude: ^(packaging|bucket)/ - repo: https://github.com/gitleaks/gitleaks - rev: v8.29.0 + rev: v8.29.1 hooks: - id: gitleaks name: Scan for secrets (gitleaks) From cc47e511c46017cd9bc69abcf16547e67b03f291 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:30:12 +0000 Subject: [PATCH 34/73] chore: packaging manifests for 1.15.0 --- bucket/diffctx.json | 6 +++--- packaging/npm/checksums.json | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bucket/diffctx.json b/bucket/diffctx.json index 3c25162d8..dd6e0ddc2 100644 --- a/bucket/diffctx.json +++ b/bucket/diffctx.json @@ -1,12 +1,12 @@ { - "version": "1.14.0", + "version": "1.15.0", "description": "Selects the minimum code an LLM needs to review a git diff", "homepage": "https://github.com/nikolay-e/diffctx", "license": "Apache-2.0", "architecture": { "64bit": { - "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.14.0/diffctx-1.14.0-x86_64-pc-windows-msvc.zip", - "hash": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf" + "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.15.0/diffctx-1.15.0-x86_64-pc-windows-msvc.zip", + "hash": "91bb8437cab735b674bb14a76ddc04f8477d8e37766336157551854dc5ab2e1d" } }, "bin": "diffctx.exe", diff --git a/packaging/npm/checksums.json b/packaging/npm/checksums.json index a6cb70d6a..6a63ed543 100644 --- a/packaging/npm/checksums.json +++ b/packaging/npm/checksums.json @@ -1,6 +1,6 @@ { - "diffctx-1.14.0-aarch64-apple-darwin.tar.gz": "20223d07e8f304b631eff3556386564918037359dbbf12c2ca18335381c129fd", - "diffctx-1.14.0-aarch64-unknown-linux-gnu.tar.gz": "3922b1460a1f5e8f4f79a2c7c2dcc3d3da5dc9a9174719b44bf936cf57b86a6a", - "diffctx-1.14.0-x86_64-pc-windows-msvc.zip": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf", - "diffctx-1.14.0-x86_64-unknown-linux-gnu.tar.gz": "2125f363fae2439162e4403e20bc90bc366bed098332c32714867273376b38a1" + "diffctx-1.15.0-aarch64-apple-darwin.tar.gz": "721f534c2f6c3c6b6bd1a8e9e1a9595116202cb9177c294d625f55d34fb00bed", + "diffctx-1.15.0-aarch64-unknown-linux-gnu.tar.gz": "1c9bc1fb064547f24f74401a9e7bab4b85b1c93006e740faae6c1ee2a9bf1a87", + "diffctx-1.15.0-x86_64-pc-windows-msvc.zip": "91bb8437cab735b674bb14a76ddc04f8477d8e37766336157551854dc5ab2e1d", + "diffctx-1.15.0-x86_64-unknown-linux-gnu.tar.gz": "bfe4b6efc300bd9f38832d10e8a1bb63d6c1e3a328ccf774901f34c914fa513f" } From 9626343a4b322f7a72a73f71c269df43e11b4aa3 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:16 +0200 Subject: [PATCH 35/73] ci: idempotent npm publish, smoke retry guard with hard fail --- .github/workflows/publish-extras.yml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-extras.yml b/.github/workflows/publish-extras.yml index b1fd38756..163e49e28 100644 --- a/.github/workflows/publish-extras.yml +++ b/.github/workflows/publish-extras.yml @@ -116,9 +116,19 @@ jobs: console.log('checksums.json: ' + n + ' assets, all version-tagged'); " + # Idempotent like the PyPI step's skip-existing: a rerun after a + # smoke-only failure must not die on "cannot publish over previously + # published versions" (observed on 1.15.0). - name: Publish working-directory: ./packaging/npm - run: npm publish --access public --provenance + env: + VERSION: ${{ github.event.inputs.version }} + run: | + if npm view "diffctx@$VERSION" version >/dev/null 2>&1; then + echo "diffctx@$VERSION already on the registry; skipping publish" + else + npm publish --access public --provenance + fi # install.js is the script every `npx diffctx` runs, and nothing executed # it before this step existed. --ignore-scripts keeps npm from running @@ -131,14 +141,21 @@ jobs: WORK=$(mktemp -d) cd "$WORK" npm init -y >/dev/null - for attempt in 1 2 3 4 5; do + installed=0 + # Registry propagation took >100s on 1.15.0; without the installed + # guard the loop used to fall through to a MODULE_NOT_FOUND that + # hid the real failure. + for attempt in 1 2 3 4 5 6 7 8 9 10; do # Sonar S8543 (unlocked dependency versions) is marked false # positive in SonarCloud: VERSION is the exact just-published # version and the package has zero dependencies. - if npm install --ignore-scripts "diffctx@$VERSION"; then break; fi + if npm install --ignore-scripts "diffctx@$VERSION"; then installed=1; break; fi echo "npm registry not settled yet (attempt $attempt); retrying" - sleep 20 + sleep 30 done + if [ "$installed" != 1 ]; then + echo "diffctx@$VERSION never became installable"; exit 1 + fi node node_modules/diffctx/install.js ./node_modules/.bin/diffctx --version From 5a48084833c43b192d403901af74fecc2b95bad9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:21:36 +0000 Subject: [PATCH 36/73] Release version 1.15.0 --- .claude-plugin/plugin.json | 2 +- Cargo.lock | 2 +- action.yml | 2 +- crates/diffctx-native/Cargo.toml | 2 +- docs/product/github-action.md | 4 ++-- pyproject.toml | 2 +- server.json | 4 ++-- src/diffctx/version.py | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 8f037453d..72ec16e86 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "diffctx", "displayName": "diffctx", - "version": "1.14.0", + "version": "1.15.0", "description": "Smart git diff context for LLMs and AI agents: budgeted fragment selection, deterministic, MCP server included", "author": { "name": "Nikolay Eremeev", diff --git a/Cargo.lock b/Cargo.lock index 3e5266d39..cee36ff26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -194,7 +194,7 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "diffctx" -version = "1.14.0" +version = "1.15.0" dependencies = [ "aho-corasick", "anyhow", diff --git a/action.yml b/action.yml index d1ebd06e8..ea0107e17 100644 --- a/action.yml +++ b/action.yml @@ -88,7 +88,7 @@ inputs: diffctx-version: description: Exact diffctx release installed from PyPI. required: false - default: 1.14.0 + default: 1.15.0 python-version: description: Python interpreter used for the isolated diffctx install. required: false diff --git a/crates/diffctx-native/Cargo.toml b/crates/diffctx-native/Cargo.toml index bc940aa35..30962934b 100644 --- a/crates/diffctx-native/Cargo.toml +++ b/crates/diffctx-native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diffctx" -version = "1.14.0" +version = "1.15.0" edition = "2024" rust-version = "1.85" description = "Selects the minimum code an LLM needs to review a git diff: walks the dependency graph outward from changed lines and stops when extra context stops paying for itself" diff --git a/docs/product/github-action.md b/docs/product/github-action.md index b09195262..df01e3763 100644 --- a/docs/product/github-action.md +++ b/docs/product/github-action.md @@ -6,7 +6,7 @@ No secret, no agent loop, no model of its own: the review step downstream chooses the model. Marketplace name: **diffctx LLM Diff Context** -(`nikolay-e/diffctx@v1.14.0`). Runs on `ubuntu-latest`. Releases are tagged +(`nikolay-e/diffctx@v1.15.0`). Runs on `ubuntu-latest`. Releases are tagged `vMAJOR.MINOR.PATCH` only — there is no floating `@v1` tag, so pin an exact release. @@ -24,7 +24,7 @@ jobs: fetch-depth: 0 - id: context - uses: nikolay-e/diffctx@v1.14.0 + uses: nikolay-e/diffctx@v1.15.0 with: budget: '8000' diff --git a/pyproject.toml b/pyproject.toml index 5940eba7c..a017e3783 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = [ "maturin>=1.10,<1.15" ] [project] name = "diffctx" -version = "1.14.0" +version = "1.15.0" description = "Smart git diff context for LLMs and AI agents: budgeted fragment selection, deterministic, MCP server included" readme = "README.md" keywords = [ diff --git a/server.json b/server.json index feeaa7e28..2e6e1275e 100644 --- a/server.json +++ b/server.json @@ -3,7 +3,7 @@ "name": "io.github.nikolay-e/diffctx", "title": "diffctx", "description": "Selects the minimum code an LLM needs to review a git diff", - "version": "1.14.0", + "version": "1.15.0", "websiteUrl": "https://nikolay-e.github.io/diffctx/", "repository": { "url": "https://github.com/nikolay-e/diffctx", @@ -14,7 +14,7 @@ "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "diffctx", - "version": "1.14.0", + "version": "1.15.0", "runtimeHint": "uvx", "runtimeArguments": [ { diff --git a/src/diffctx/version.py b/src/diffctx/version.py index b9f68edb2..6b0872cb2 100644 --- a/src/diffctx/version.py +++ b/src/diffctx/version.py @@ -1 +1 @@ -__version__ = "1.14.0" +__version__ = "1.15.0" From e9995ad48056b7940f2622296a181adc39aca30f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:30:12 +0000 Subject: [PATCH 37/73] chore: packaging manifests for 1.15.0 --- bucket/diffctx.json | 6 +++--- packaging/npm/checksums.json | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bucket/diffctx.json b/bucket/diffctx.json index 3c25162d8..dd6e0ddc2 100644 --- a/bucket/diffctx.json +++ b/bucket/diffctx.json @@ -1,12 +1,12 @@ { - "version": "1.14.0", + "version": "1.15.0", "description": "Selects the minimum code an LLM needs to review a git diff", "homepage": "https://github.com/nikolay-e/diffctx", "license": "Apache-2.0", "architecture": { "64bit": { - "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.14.0/diffctx-1.14.0-x86_64-pc-windows-msvc.zip", - "hash": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf" + "url": "https://github.com/nikolay-e/diffctx/releases/download/v1.15.0/diffctx-1.15.0-x86_64-pc-windows-msvc.zip", + "hash": "91bb8437cab735b674bb14a76ddc04f8477d8e37766336157551854dc5ab2e1d" } }, "bin": "diffctx.exe", diff --git a/packaging/npm/checksums.json b/packaging/npm/checksums.json index a6cb70d6a..6a63ed543 100644 --- a/packaging/npm/checksums.json +++ b/packaging/npm/checksums.json @@ -1,6 +1,6 @@ { - "diffctx-1.14.0-aarch64-apple-darwin.tar.gz": "20223d07e8f304b631eff3556386564918037359dbbf12c2ca18335381c129fd", - "diffctx-1.14.0-aarch64-unknown-linux-gnu.tar.gz": "3922b1460a1f5e8f4f79a2c7c2dcc3d3da5dc9a9174719b44bf936cf57b86a6a", - "diffctx-1.14.0-x86_64-pc-windows-msvc.zip": "07b67a9da0c4331f75bb821ba3404bce349ca6c8063ff5f412c30dcc993bc6bf", - "diffctx-1.14.0-x86_64-unknown-linux-gnu.tar.gz": "2125f363fae2439162e4403e20bc90bc366bed098332c32714867273376b38a1" + "diffctx-1.15.0-aarch64-apple-darwin.tar.gz": "721f534c2f6c3c6b6bd1a8e9e1a9595116202cb9177c294d625f55d34fb00bed", + "diffctx-1.15.0-aarch64-unknown-linux-gnu.tar.gz": "1c9bc1fb064547f24f74401a9e7bab4b85b1c93006e740faae6c1ee2a9bf1a87", + "diffctx-1.15.0-x86_64-pc-windows-msvc.zip": "91bb8437cab735b674bb14a76ddc04f8477d8e37766336157551854dc5ab2e1d", + "diffctx-1.15.0-x86_64-unknown-linux-gnu.tar.gz": "bfe4b6efc300bd9f38832d10e8a1bb63d6c1e3a328ccf774901f34c914fa513f" } From 32a38b04c295c62c6d24d838d28f109a90ec6b07 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:16 +0200 Subject: [PATCH 38/73] ci: idempotent npm publish, smoke retry guard with hard fail --- .github/workflows/publish-extras.yml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-extras.yml b/.github/workflows/publish-extras.yml index b1fd38756..163e49e28 100644 --- a/.github/workflows/publish-extras.yml +++ b/.github/workflows/publish-extras.yml @@ -116,9 +116,19 @@ jobs: console.log('checksums.json: ' + n + ' assets, all version-tagged'); " + # Idempotent like the PyPI step's skip-existing: a rerun after a + # smoke-only failure must not die on "cannot publish over previously + # published versions" (observed on 1.15.0). - name: Publish working-directory: ./packaging/npm - run: npm publish --access public --provenance + env: + VERSION: ${{ github.event.inputs.version }} + run: | + if npm view "diffctx@$VERSION" version >/dev/null 2>&1; then + echo "diffctx@$VERSION already on the registry; skipping publish" + else + npm publish --access public --provenance + fi # install.js is the script every `npx diffctx` runs, and nothing executed # it before this step existed. --ignore-scripts keeps npm from running @@ -131,14 +141,21 @@ jobs: WORK=$(mktemp -d) cd "$WORK" npm init -y >/dev/null - for attempt in 1 2 3 4 5; do + installed=0 + # Registry propagation took >100s on 1.15.0; without the installed + # guard the loop used to fall through to a MODULE_NOT_FOUND that + # hid the real failure. + for attempt in 1 2 3 4 5 6 7 8 9 10; do # Sonar S8543 (unlocked dependency versions) is marked false # positive in SonarCloud: VERSION is the exact just-published # version and the package has zero dependencies. - if npm install --ignore-scripts "diffctx@$VERSION"; then break; fi + if npm install --ignore-scripts "diffctx@$VERSION"; then installed=1; break; fi echo "npm registry not settled yet (attempt $attempt); retrying" - sleep 20 + sleep 30 done + if [ "$installed" != 1 ]; then + echo "diffctx@$VERSION never became installable"; exit 1 + fi node node_modules/diffctx/install.js ./node_modules/.bin/diffctx --version From 7da93d336ee82635ece1e2047ac017f9832ca65b Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:47 +0200 Subject: [PATCH 39/73] docs: cut CHANGELOG 1.15.0 section --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d7579efe..07b1c7689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.15.0] - 2026-08-19 + ### Added - **Changed files that produced no fragments are disclosed in the md/text @@ -1033,7 +1035,8 @@ Earlier releases shipped as `treemapper`; see for the corresponding GitHub release notes (`1.0.0` through `1.6.1`). -[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.14.0...HEAD +[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.15.0...HEAD +[1.15.0]: https://github.com/nikolay-e/diffctx/compare/v1.14.0...v1.15.0 [1.14.0]: https://github.com/nikolay-e/diffctx/compare/v1.13.0...v1.14.0 [1.13.0]: https://github.com/nikolay-e/diffctx/compare/v1.12.3...v1.13.0 [1.12.3]: https://github.com/nikolay-e/diffctx/compare/v1.12.2...v1.12.3 From f3cc41587d37b1a51d803ef2e6783d57807abb51 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:47 +0200 Subject: [PATCH 40/73] docs: cut CHANGELOG 1.15.0 section --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d7579efe..07b1c7689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.15.0] - 2026-08-19 + ### Added - **Changed files that produced no fragments are disclosed in the md/text @@ -1033,7 +1035,8 @@ Earlier releases shipped as `treemapper`; see for the corresponding GitHub release notes (`1.0.0` through `1.6.1`). -[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.14.0...HEAD +[Unreleased]: https://github.com/nikolay-e/diffctx/compare/v1.15.0...HEAD +[1.15.0]: https://github.com/nikolay-e/diffctx/compare/v1.14.0...v1.15.0 [1.14.0]: https://github.com/nikolay-e/diffctx/compare/v1.13.0...v1.14.0 [1.13.0]: https://github.com/nikolay-e/diffctx/compare/v1.12.3...v1.13.0 [1.12.3]: https://github.com/nikolay-e/diffctx/compare/v1.12.2...v1.12.3 From 6acacccfc43aaa620f3c90a4350c2364c056c176 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:49 +0200 Subject: [PATCH 41/73] chore: QA.md #123 drift fix, renovate python<3.14 CI-matrix gate --- QA.md | 10 ++++++---- renovate.json | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/QA.md b/QA.md index 022a93291..45172ec36 100644 --- a/QA.md +++ b/QA.md @@ -206,10 +206,12 @@ a deployed/web surface ships; re-derive then, don't trust this table. lines), `render` agrees with `locate` that an `Excerpt` is `changed`, and long uncovered runs are split into bounded chunks so a flat file has sub-file granularity at all. #105/#107/#114 closed on their own repros. - **Still open for the `context` role** (#123): there is no hunk to window - around, and the two obvious fixes both fail — see that issue for the - measurement (43 corpus failures, including cases that keep full recall but - get worse on forbidden files). + **The `context` role was fixed by a different lever** (#123, closed + 2026-08-04): not windowing (both windowing attempts measured 43 corpus + failures each) but the file-level relation encoding (9b41040d) — import-class + edges land on the file's representative fragment instead of fanning to every + fragment at full weight, so an indivisible 400-line parent stops being + selected as context at all. - **`coherence_post_pass` is inert by accident and load-bearing for precision.** It resolves a dangling semantic neighbour by lowercased `symbol_name` instead of by the id the graph edge already gives it. That diff --git a/renovate.json b/renovate.json index 416caf60b..a30a2c762 100644 --- a/renovate.json +++ b/renovate.json @@ -39,6 +39,11 @@ "automerge": true, "schedule": ["at any time"] }, + { + "description": "Python pin must stay inside the CI-tested matrix (ci.yml tops at 3.13)", + "matchDepNames": ["python"], + "allowedVersions": "<3.14" + }, { "description": "Major updates require manual review", "matchUpdateTypes": ["major"], From 6224b944b1a9c7b042c39ced563a6443e06e7c34 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:40:49 +0200 Subject: [PATCH 42/73] chore: QA.md #123 drift fix, renovate python<3.14 CI-matrix gate --- QA.md | 10 ++++++---- renovate.json | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/QA.md b/QA.md index 022a93291..45172ec36 100644 --- a/QA.md +++ b/QA.md @@ -206,10 +206,12 @@ a deployed/web surface ships; re-derive then, don't trust this table. lines), `render` agrees with `locate` that an `Excerpt` is `changed`, and long uncovered runs are split into bounded chunks so a flat file has sub-file granularity at all. #105/#107/#114 closed on their own repros. - **Still open for the `context` role** (#123): there is no hunk to window - around, and the two obvious fixes both fail — see that issue for the - measurement (43 corpus failures, including cases that keep full recall but - get worse on forbidden files). + **The `context` role was fixed by a different lever** (#123, closed + 2026-08-04): not windowing (both windowing attempts measured 43 corpus + failures each) but the file-level relation encoding (9b41040d) — import-class + edges land on the file's representative fragment instead of fanning to every + fragment at full weight, so an indivisible 400-line parent stops being + selected as context at all. - **`coherence_post_pass` is inert by accident and load-bearing for precision.** It resolves a dangling semantic neighbour by lowercased `symbol_name` instead of by the id the graph edge already gives it. That diff --git a/renovate.json b/renovate.json index 416caf60b..a30a2c762 100644 --- a/renovate.json +++ b/renovate.json @@ -39,6 +39,11 @@ "automerge": true, "schedule": ["at any time"] }, + { + "description": "Python pin must stay inside the CI-tested matrix (ci.yml tops at 3.13)", + "matchDepNames": ["python"], + "allowedVersions": "<3.14" + }, { "description": "Major updates require manual review", "matchUpdateTypes": ["major"], From f2e738cc0c41b241287a070fbadca3cd7fdd7a52 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 19:41:32 +0200 Subject: [PATCH 43/73] Revert "chore(deps): update dependency python (#13)" This reverts commit 92bed54c29bb85eb45980c57fe8e526df63acf71. --- .mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mise.toml b/.mise.toml index 4b7cb8c16..15aa78407 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -python = "3.14.7" +python = "3.12" [env] _.python.venv = { path = ".venv", create = true } From 993c0fb02cb77da01d13dfbc858bd7850d9b10ac Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 21:24:47 +0200 Subject: [PATCH 44/73] fix+refactor: admission gates (#211), --alpha wire, leverage sweep --- CHANGELOG.md | 21 ++ .../src/config/category_weights.rs | 9 +- crates/diffctx-native/src/config/scoring.rs | 8 +- crates/diffctx-native/src/edges/mod.rs | 64 ++++- .../src/edges/structural/containment.rs | 28 +- .../src/edges/structural/testing.rs | 29 +- crates/diffctx-native/src/graph.rs | 10 +- crates/diffctx-native/src/graph_export.rs | 10 - crates/diffctx-native/src/lib.rs | 4 + crates/diffctx-native/src/locate.rs | 17 +- crates/diffctx-native/src/main.rs | 6 +- crates/diffctx-native/src/memory_pipeline.rs | 8 +- crates/diffctx-native/src/mode.rs | 83 ++---- .../src/parsers/tree_sitter_strategy.rs | 23 -- crates/diffctx-native/src/pipeline.rs | 20 +- crates/diffctx-native/src/postpass.rs | 23 +- crates/diffctx-native/src/pybridge.rs | 56 +--- crates/diffctx-native/src/scoring.rs | 261 +++++++++--------- crates/diffctx-native/src/select.rs | 65 ++++- crates/diffctx-native/src/stopwords.rs | 9 - crates/diffctx-native/src/types.rs | 5 - crates/diffctx-native/src/utility/needs.rs | 6 +- crates/diffctx-native/src/utility/scoring.rs | 2 + .../tests/known_below_threshold.txt | 143 +--------- 24 files changed, 387 insertions(+), 523 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07b1c7689..e0a4d6d28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- **The per-file admission gate (#65) now covers every selection path** + (#211): both post-selection passes and both singleton comparators used to + admit files the greedy was forbidden to open. The rescue pass keeps a + measured escape — when the selection holds no context at all, an admissible + answer beats an empty one. Singletons admit via a wider declared-relation + reachability (config keys, latex/terraform references) so weak-but-declared + channels are not starved. Net on the 2725-case oracle corpus: 133 cases + fixed, 6 explained regressions (`known_below_threshold.txt` 195 → 68). +- **`--alpha` now actually reaches PPR scoring** (it was validated and then + silently discarded; every run used the default damping regardless). +- **A fragment deferred by the per-file ceiling still sets the stopping + peak** (#197): the tau bar was being calibrated on whatever foreign-file + fragment came after the deferred argmax. +- **Test-file imports are read from every fragment of the file** (#217): + module-level imports land in a fragment appended after the definitions, so + the old first-fragment read never saw them and the `test_direct` weight + never fired for tree-sitter languages. Test-naming edges also join the + naming class, so a `widget_test.go` with no import is admissible context. + ## [1.15.0] - 2026-08-19 ### Added diff --git a/crates/diffctx-native/src/config/category_weights.rs b/crates/diffctx-native/src/config/category_weights.rs index 1f70c09ae..d411570a9 100644 --- a/crates/diffctx-native/src/config/category_weights.rs +++ b/crates/diffctx-native/src/config/category_weights.rs @@ -4,12 +4,11 @@ //! Each fine-grained edge type (130+ in `weights.rs`) carries a default //! domain-prior weight. On top, every edge is scaled by a per-category //! multiplier `w_τ ∈ R_{≥0}`, one per `EdgeCategory` variant (10 total). -//! These ten scalars are the parameters intended for offline calibration -//! (Bayesian opt / grid search) against a labeled corpus, as described in -//! paper Section 4.3 (Edge-Type Weight Calibration). //! -//! Default for every variant is 1.0 (no scaling — the fine-grained -//! prior weights from `weights.rs` apply unchanged). +//! Every multiplier is fixed at 1.0: no calibration has ever run on them and +//! there is no runtime override plumbing (see parameter-strategy.md, Tier 1). +//! The mechanism exists as the declared calibration surface of paper Section +//! 4.3 — do not read it as a live, tuned feature. use once_cell::sync::Lazy; diff --git a/crates/diffctx-native/src/config/scoring.rs b/crates/diffctx-native/src/config/scoring.rs index 53d1d4b74..a92c7af6b 100644 --- a/crates/diffctx-native/src/config/scoring.rs +++ b/crates/diffctx-native/src/config/scoring.rs @@ -35,9 +35,7 @@ impl Default for RrfConfig { } } -pub fn rrf() -> RrfConfig { - RrfConfig::default() -} +pub static RRF: Lazy = Lazy::new(RrfConfig::default); pub struct PitConfig { /// Weight on the structural component. `1 - blend` goes to the lexical one. @@ -64,6 +62,4 @@ impl Default for PitConfig { } } -pub fn pit() -> PitConfig { - PitConfig::default() -} +pub static PIT: Lazy = Lazy::new(PitConfig::default); diff --git a/crates/diffctx-native/src/edges/mod.rs b/crates/diffctx-native/src/edges/mod.rs index 634d6a975..b977be3a4 100644 --- a/crates/diffctx-native/src/edges/mod.rs +++ b/crates/diffctx-native/src/edges/mod.rs @@ -27,9 +27,12 @@ use crate::types::Fragment; use self::base::EdgeBuilder; -/// Raw-weight floor above which a Semantic edge counts as a naming channel -/// (imports/using, calls, type and member refs all sit at >=0.35; tags -/// fallback at 0.30 and same-package/namespace markers at 0.05 stay diffuse). +/// Raw-weight floor above which a Semantic, Config or TestEdge edge counts as +/// a naming channel (imports/using, calls, type and member refs at >=0.35 and +/// test_direct/test_naming at 0.60/0.50 clear it; tags fallback at 0.30, +/// test_reverse at 0.30 and same-package/namespace markers at 0.05 stay +/// diffuse — `naming_reachable_files` walks undirected, so the reverse arc +/// adds nothing the forward one lacks). pub const NAMING_WEIGHT_FLOOR: f64 = 0.30; const EXPENSIVE_CATEGORIES: &[&str] = &["similarity", "history"]; @@ -179,6 +182,10 @@ pub fn collect_capped_edges( // no dedicated semantic edge. Dual coverage was measured as pure noise — // a tags edge duplicating a real import/call edge adds mass, not reach — // while a parser-degraded file genuinely has nothing else (#131). + // A per-pair cross-language escape was tried and measured net-negative + // (#217, 2026-08-19: −4/+0 corpus — `.ts`/`.tsx` count as different + // languages, so same-project pairs slipped back in); a retry needs + // language-FAMILY granularity first. let mut per_builder_log = per_builder_log; if fallback_flags.iter().any(|&f| f) { let mut dedicated_files: FxHashSet<&str> = FxHashSet::default(); @@ -269,8 +276,13 @@ pub fn collect_capped_edges( // fixed channel set rather than trading a scalar band; raw // rather than damped so a hub-suppressed import keeps its // naming status. + // TestEdge included (#217): a `widget_test.go` in the same + // package, or a `widget.test.ts` with no import, is related to + // its source purely by naming convention — the exact relation + // the admission gate reads — and no Semantic channel carries it. let naming = (category == EdgeCategory::Semantic - || category == EdgeCategory::Config) + || category == EdgeCategory::Config + || category == EdgeCategory::TestEdge) && e.weight > NAMING_WEIGHT_FLOOR; push_bounded_top_k( per_source.entry(e.src).or_default(), @@ -356,6 +368,48 @@ pub fn naming_reachable_files( capped: &CappedEdges, core_ids: &rustc_hash::FxHashSet, max_depth: usize, +) -> rustc_hash::FxHashSet> { + reachable_files(capped, core_ids, max_depth, |e| e.naming) +} + +/// Files reachable through DECLARED-relation edges — any Semantic, Config, +/// ConfigGeneric, Document or TestEdge channel — within `max_depth` hops. +/// Wider than `naming_reachable_files`: it admits the low-weight declared +/// channels (config keys, tags at 0.30, latex/terraform references) while +/// still refusing proximity, lexical similarity and co-change. This is the +/// admission bar for the singleton comparators (#211): they recover +/// weak-but-declared relations, which the strict naming floor was measured +/// to starve (8 recall regressions: config→code, terraform data sources, +/// latex packages). +/// +/// The `> 0.05` floor is on the DAMPED weight (what CompactEdge carries): +/// same-package/namespace markers emit at exactly 0.05 raw and damping only +/// lowers, so they can never clear it — without the floor they made every +/// same-package sibling "declared" and the gate admitted the same junk it +/// exists to block (measured: 143 of 146 corpus improvements lost). +pub fn declared_reachable_files( + capped: &CappedEdges, + core_ids: &rustc_hash::FxHashSet, + max_depth: usize, +) -> rustc_hash::FxHashSet> { + reachable_files(capped, core_ids, max_depth, |e| { + e.weight > 0.05 + && matches!( + e.category, + EdgeCategory::Semantic + | EdgeCategory::Config + | EdgeCategory::ConfigGeneric + | EdgeCategory::Document + | EdgeCategory::TestEdge + ) + }) +} + +fn reachable_files( + capped: &CappedEdges, + core_ids: &rustc_hash::FxHashSet, + max_depth: usize, + keep: impl Fn(&CompactEdge) -> bool, ) -> rustc_hash::FxHashSet> { let n = capped.idx_to_node.len(); // Undirected on purpose: a naming edge relates the PAIR of files. For @@ -366,7 +420,7 @@ pub fn naming_reachable_files( // DI). let mut adj: Vec> = vec![Vec::new(); n]; for e in &capped.edges { - if e.naming { + if keep(e) { adj[e.src as usize].push(e.dst); adj[e.dst as usize].push(e.src); } diff --git a/crates/diffctx-native/src/edges/structural/containment.rs b/crates/diffctx-native/src/edges/structural/containment.rs index e28a92675..cfd22aa49 100644 --- a/crates/diffctx-native/src/edges/structural/containment.rs +++ b/crates/diffctx-native/src/edges/structural/containment.rs @@ -22,17 +22,7 @@ impl EdgeBuilder for ContainmentEdgeBuilder { let mut edges: EdgeDict = FxHashMap::default(); - // Computed only for the experimental star below — OFF by default, and - // measured net-negative when ON (#208): 21 corpus regressions vs 14 - // improvements, 2026-08-16 A/B at shipped defaults. - let star_on = std::env::var_os("DIFFCTX_FILE_STAR").is_some(); - let reps = if star_on { - super::super::base::file_representatives(fragments) - } else { - FxHashMap::default() - }; - - for (path, frags) in &by_path { + for frags in by_path.values() { if frags.len() < 2 { continue; } @@ -65,22 +55,6 @@ impl EdgeBuilder for ContainmentEdgeBuilder { stack.push(f); } - - // Experimental intra-file spine: connects every fragment to the - // file representative so top-level siblings become mutually - // reachable. Ships OFF — the 2026-08-16 corpus A/B measured it - // net-negative (#208) — so by default a flat file's siblings are - // reachable only through nesting and naming edges, and the - // representative-only builders accept that. - if star_on { - if let Some(rep) = reps.get(*path) { - for f in &sorted { - if f.id != *rep { - add_edge(&mut edges, &f.id, rep, weight, reverse_factor); - } - } - } - } } edges diff --git a/crates/diffctx-native/src/edges/structural/testing.rs b/crates/diffctx-native/src/edges/structural/testing.rs index fd690520e..0a058013d 100644 --- a/crates/diffctx-native/src/edges/structural/testing.rs +++ b/crates/diffctx-native/src/edges/structural/testing.rs @@ -82,12 +82,14 @@ impl EdgeBuilder for TestEdgeBuilder { let test_reverse_weight = EDGE_WEIGHTS["test_reverse"].forward; let mut test_frags: Vec<&Fragment> = Vec::new(); + let mut test_frags_by_path: FxHashMap<&str, Vec<&Fragment>> = FxHashMap::default(); let mut by_base: FxHashMap> = FxHashMap::default(); for f in fragments { let path = Path::new(f.path()); if is_test_file(path) { test_frags.push(f); + test_frags_by_path.entry(f.path()).or_default().push(f); } else { let stem = path .file_stem() @@ -107,14 +109,6 @@ impl EdgeBuilder for TestEdgeBuilder { } } - let mut import_cache: FxHashMap> = FxHashMap::default(); - for tf in &test_frags { - let path_str = tf.path().to_string(); - import_cache - .entry(path_str) - .or_insert_with(|| extract_imports(&tf.content)); - } - let reps = base::file_representatives(fragments); let mut edges: EdgeDict = FxHashMap::default(); @@ -144,11 +138,6 @@ impl EdgeBuilder for TestEdgeBuilder { None => continue, }; - let test_imports = import_cache - .get(test_frag.path()) - .cloned() - .unwrap_or_default(); - // `config_test` names `config` — but which one? envoy holds 520 // files with that stem, and pairing every test fragment with every // fragment of every one of them put 180M edges out of this builder @@ -176,6 +165,20 @@ impl EdgeBuilder for TestEdgeBuilder { let Some(test_rep) = reps.get(test_frag.path()) else { continue; }; + // Imports come from EVERY fragment of the test file: module-level + // import statements land in a gap fragment appended AFTER the + // definitions, so reading only the first fragment (the old + // import_cache) never saw them and `test_direct` never fired for + // tree-sitter languages. Computed here, past the continues, so + // only test files that actually produce edges pay the regex. + let test_imports: FxHashSet = test_frags_by_path + .get(test_frag.path()) + .map(|frs| { + frs.iter() + .flat_map(|f| extract_imports(&f.content)) + .collect() + }) + .unwrap_or_default(); for src_frag in chosen { if !linked_file_pairs.insert((test_frag.path(), src_frag.path())) { continue; diff --git a/crates/diffctx-native/src/graph.rs b/crates/diffctx-native/src/graph.rs index 2a29662c9..159917645 100644 --- a/crates/diffctx-native/src/graph.rs +++ b/crates/diffctx-native/src/graph.rs @@ -933,10 +933,12 @@ fn assemble_graph( graph } -/// Map-based adapter kept for tests and small callers; converts to the -/// compact representation and delegates. Edges whose endpoints are not -/// in `fragments` are dropped (the hashmap path silently dropped them -/// at CSR construction). +/// Map-based adapter for tests only; converts to the compact representation +/// and delegates. Edges whose endpoints are not in `fragments` are dropped +/// (the hashmap path silently dropped them at CSR construction). Note it +/// builds every edge with `naming: false`, so graphs made this way never +/// exercise the per-file naming-admission gate (#65). +#[cfg(test)] pub fn build_graph( fragments: &[Fragment], edges: FxHashMap<(FragmentId, FragmentId), f64>, diff --git a/crates/diffctx-native/src/graph_export.rs b/crates/diffctx-native/src/graph_export.rs index fd237cda6..5f2fbcf2d 100644 --- a/crates/diffctx-native/src/graph_export.rs +++ b/crates/diffctx-native/src/graph_export.rs @@ -5,7 +5,6 @@ use rustc_hash::FxHashMap; use serde::Serialize; use crate::graph::{EdgeCategory, Graph}; -use crate::project_graph::ProjectGraph; use crate::types::{Fragment, FragmentId}; pub struct ProjectGraphView<'a> { @@ -14,15 +13,6 @@ pub struct ProjectGraphView<'a> { pub root_dir: Option<&'a Path>, } -pub fn view_from_project_graph(pg: &ProjectGraph) -> (FxHashMap, &Path) { - let map: FxHashMap = pg - .fragments - .iter() - .map(|f| (f.id.clone(), f.clone())) - .collect(); - (map, pg.root_dir.as_path()) -} - #[derive(Debug, Clone, Serialize)] pub struct NodeRecord { pub id: String, diff --git a/crates/diffctx-native/src/lib.rs b/crates/diffctx-native/src/lib.rs index 1bf0885cf..0b1c21531 100644 --- a/crates/diffctx-native/src/lib.rs +++ b/crates/diffctx-native/src/lib.rs @@ -1,3 +1,7 @@ +//! Implementation crate for the `diffctx` CLI and Python extension. Every +//! module is public for those two consumers and the in-repo eval harness — +//! none of it is a stable library API, and internals may change or disappear +//! between releases without a semver signal. pub mod analytics; pub mod candidate_files; pub mod config; diff --git a/crates/diffctx-native/src/locate.rs b/crates/diffctx-native/src/locate.rs index 4d6c2a17d..cad9df80d 100644 --- a/crates/diffctx-native/src/locate.rs +++ b/crates/diffctx-native/src/locate.rs @@ -147,21 +147,6 @@ pub struct LocateItem { pub reasons: Vec, } -/// #182 unified the `TestEdge` builder and the needs matcher onto -/// `crate::testfiles`, but missed this one — locate carried a third, weaker -/// answer, and `summary.tests` in the shipped blast-radius view undercounted -/// because of it. It lowercased the path first, so every CamelCase convention -/// was invisible: `FooTest.java` outside a test directory, `AuthSpec.scala`, -/// `widget-test.js` (hyphen form) and `src/tests.rs` all read as ordinary code. -/// -/// One rule moves the other way: a `testing/` directory no longer counts. The -/// shared implementation excludes it deliberately — `testing` is Go's stdlib -/// package name and such directories hold helpers, not tests — and its unit -/// tests pin `src/testing.rs` as non-test. -fn is_test_path(path: &str) -> bool { - crate::testfiles::is_test_path(Path::new(path)) -} - const CONFIG_EXTENSIONS: &[&str] = &[ "yaml", "yml", @@ -176,7 +161,7 @@ const CONFIG_EXTENSIONS: &[&str] = &[ fn group_of(path: &str, kind: crate::types::FragmentKind) -> Option<&'static str> { use crate::types::FragmentKind as K; - if is_test_path(path) { + if crate::testfiles::is_test_path(Path::new(path)) { return Some("test"); } if matches!( diff --git a/crates/diffctx-native/src/main.rs b/crates/diffctx-native/src/main.rs index d7b6cf16a..420aa6444 100644 --- a/crates/diffctx-native/src/main.rs +++ b/crates/diffctx-native/src/main.rs @@ -252,10 +252,8 @@ fn main() -> Result<()> { let cli = Cli::parse(); - let scoring_mode = ScoringMode::from_str(&cli.scoring).unwrap_or_else(|e| { - eprintln!("error: {e}"); - std::process::exit(2); - }); + let scoring_mode = + ScoringMode::from_str(&cli.scoring).expect("clap value_parser already validated --scoring"); // The per-phase git timeout does not bound in-process phases (parse, graph // build, scoring), so a pathological repo can hang far past `--timeout` diff --git a/crates/diffctx-native/src/memory_pipeline.rs b/crates/diffctx-native/src/memory_pipeline.rs index c7553b74c..4d5cf1de1 100644 --- a/crates/diffctx-native/src/memory_pipeline.rs +++ b/crates/diffctx-native/src/memory_pipeline.rs @@ -28,7 +28,7 @@ pub struct MemoryRepo { pub fn build_diff_context_in_memory( repo: &MemoryRepo, budget_tokens: Option, - _alpha: f64, + alpha: f64, tau: f64, no_content: bool, scoring_mode: ScoringMode, @@ -108,7 +108,8 @@ pub fn build_diff_context_in_memory( all_fragments.extend(sig_frags); let effective_budget = budget_tokens.unwrap_or(BUDGET.unlimited); - let config = PipelineConfig::from_mode(scoring_mode); + let mut config = PipelineConfig::from_mode(scoring_mode); + config.ppr_alpha = alpha; let seed_weights = compute_seed_weights(&hunks, &core_ids, &all_fragments); let discovered_arc: FxHashSet> = discovered_paths @@ -144,6 +145,7 @@ pub fn build_diff_context_in_memory( Some(&file_importance), Some(&core_excerpts), scoring_result.admissible_files.as_ref(), + scoring_result.declared_admissible_files.as_ref(), ); let mut selected = selection.selected; @@ -153,6 +155,7 @@ pub fn build_diff_context_in_memory( &scoring_result.filtered_fragments, &scoring_result.graph, effective_budget, + scoring_result.admissible_files.as_ref(), ); crate::postpass::rescue_nontrivial_context( @@ -161,6 +164,7 @@ pub fn build_diff_context_in_memory( &scoring_result.rel_scores, &core_ids, effective_budget, + scoring_result.admissible_files.as_ref(), ); let used: u32 = selected.iter().map(|f| f.token_count).sum(); diff --git a/crates/diffctx-native/src/mode.rs b/crates/diffctx-native/src/mode.rs index b2c5af561..c49fd31ee 100644 --- a/crates/diffctx-native/src/mode.rs +++ b/crates/diffctx-native/src/mode.rs @@ -34,21 +34,6 @@ impl ScoringMode { /// pins this array against `from_str` in both directions. pub const SCORING_MODE_NAMES: &[&str] = &["ppr", "ego", "bm25", "rrf", "pit"]; -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum DiscoveryKind { - Default, - Ensemble, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum ScoringKind { - Ppr, - Ego, - Bm25, - Rrf, - Pit, -} - #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum ObjectiveMode { Submodular, @@ -66,8 +51,7 @@ impl ObjectiveMode { #[derive(Debug, Clone)] pub struct PipelineConfig { - pub discovery: DiscoveryKind, - pub scoring: ScoringKind, + pub scoring: ScoringMode, pub objective: ObjectiveMode, pub bm25_top_k: usize, pub ego_depth: usize, @@ -77,54 +61,23 @@ pub struct PipelineConfig { impl PipelineConfig { pub fn from_mode(mode: ScoringMode) -> Self { let m = mode_config(); - match mode { - ScoringMode::Ppr => Self { - discovery: DiscoveryKind::Ensemble, - scoring: ScoringKind::Ppr, - bm25_top_k: m.bm25_top_k_primary, - ego_depth: m.ego_depth_default, - ppr_alpha: PPR.alpha, - objective: ObjectiveMode::Submodular, - }, - ScoringMode::Ego => Self { - discovery: DiscoveryKind::Ensemble, - scoring: ScoringKind::Ego, - bm25_top_k: m.bm25_top_k_primary, - ego_depth: m.ego_depth_extended, - ppr_alpha: PPR.alpha, - objective: ObjectiveMode::Submodular, - }, - ScoringMode::Bm25 => Self { - discovery: DiscoveryKind::Ensemble, - scoring: ScoringKind::Bm25, - bm25_top_k: m.bm25_top_k_off, - ego_depth: m.ego_depth_default, - ppr_alpha: PPR.alpha, - objective: ObjectiveMode::Submodular, - }, - // Discovery is deliberately identical to EGO's: the fusion gain - // must come from ranking the same universe better, not from a - // wider universe that would confound it with a discovery change. - ScoringMode::Rrf => Self { - discovery: DiscoveryKind::Ensemble, - scoring: ScoringKind::Rrf, - bm25_top_k: m.bm25_top_k_primary, - ego_depth: m.ego_depth_extended, - ppr_alpha: PPR.alpha, - objective: ObjectiveMode::Submodular, - }, - // Same universe and the same depth as Rrf, so the two fusion modes - // differ only in how the two signals are combined. Comparing PIT - // against RRF is then a comparison of blends, not of candidate - // supply. - ScoringMode::Pit => Self { - discovery: DiscoveryKind::Ensemble, - scoring: ScoringKind::Pit, - bm25_top_k: m.bm25_top_k_primary, - ego_depth: m.ego_depth_extended, - ppr_alpha: PPR.alpha, - objective: ObjectiveMode::Submodular, - }, + // The fusion modes (rrf/pit) deliberately share EGO's universe and + // depth: the fusion gain must come from ranking the same universe + // better, not from a wider candidate supply that would confound it + // with a discovery change. + let (bm25_top_k, ego_depth) = match mode { + ScoringMode::Ppr => (m.bm25_top_k_primary, m.ego_depth_default), + ScoringMode::Ego | ScoringMode::Rrf | ScoringMode::Pit => { + (m.bm25_top_k_primary, m.ego_depth_extended) + } + ScoringMode::Bm25 => (m.bm25_top_k_off, m.ego_depth_default), + }; + Self { + scoring: mode, + objective: ObjectiveMode::Submodular, + bm25_top_k, + ego_depth, + ppr_alpha: PPR.alpha, } } } diff --git a/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs b/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs index 50197c0b5..259cf8103 100644 --- a/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs +++ b/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs @@ -1112,20 +1112,6 @@ fn parse_with_cached_parser( }) } -// Additive observability probe: the fragmentation pipeline itself never -// inspects `Node::has_error`, so a mostly-ERROR tree (unbalanced brace, -// stray merge-conflict marker, truncated mid-refactor file) is currently -// indistinguishable from a clean parse to every caller -- both just -// produce a Vec. This exposes that signal without changing any -// existing return path; nothing in `fragment()` calls it yet. -#[allow(dead_code)] -pub(crate) fn parse_has_error(path: &str, content: &str) -> Option { - let config = find_lang_config(path)?; - let language = get_tree_sitter_language(config.ts_name)?; - let tree = parse_with_cached_parser(config.ts_name, &language, content)?; - Some(tree.root_node().has_error()) -} - fn node_start_line(node: &Node) -> u32 { node.start_position().row as u32 + 1 } @@ -2273,15 +2259,6 @@ mod grammar_tests { ); } - #[test] - fn parse_error_is_observable_via_has_error_probe() { - let clean = "def foo():\n pass\n"; - let broken = "def foo(\n pass\n"; - assert_eq!(parse_has_error("clean.py", clean), Some(false)); - assert_eq!(parse_has_error("broken.py", broken), Some(true)); - assert_eq!(parse_has_error("no_grammar.unknownext", clean), None); - } - // Regression for tree_sitter_strategy.rs:1055 (PARSE_TIMEOUT / minified // files): a ~230KB single-line minified bundle collapses every // definition onto physical line 1, so line-granularity fragmentation diff --git a/crates/diffctx-native/src/pipeline.rs b/crates/diffctx-native/src/pipeline.rs index 07f6bc99d..79bccc0a7 100644 --- a/crates/diffctx-native/src/pipeline.rs +++ b/crates/diffctx-native/src/pipeline.rs @@ -18,7 +18,7 @@ use crate::discovery::{ }; use crate::fragmentation::process_files_for_fragments; use crate::git::{self, CatFileBatch}; -use crate::mode::{DiscoveryKind, PipelineConfig, ScoringMode}; +use crate::mode::{PipelineConfig, ScoringMode}; use crate::postpass; use crate::render::{self, DiffContextOutput}; use crate::scoring::{ScoringResult, create_scoring_strategy}; @@ -399,6 +399,7 @@ pub fn compute_scored_state( let file_cache = build_file_cache(&all_candidate_files); let mode = scoring_mode; let mut config = PipelineConfig::from_mode(mode); + config.ppr_alpha = alpha; if let Ok(s) = std::env::var("DIFFCTX_OBJECTIVE") { config.objective = crate::mode::ObjectiveMode::from_str(&s); } @@ -607,6 +608,7 @@ pub fn run_selection( Some(&file_importance), Some(&state.core_excerpts), state.scoring_result.admissible_files.as_ref(), + state.scoring_result.declared_admissible_files.as_ref(), ) } }; @@ -620,6 +622,7 @@ pub fn run_selection( &state.scoring_result.filtered_fragments, &state.scoring_result.graph, effective_budget, + state.scoring_result.admissible_files.as_ref(), ); postpass::rescue_nontrivial_context( @@ -628,6 +631,7 @@ pub fn run_selection( &state.scoring_result.rel_scores, &state.core_ids, effective_budget, + state.scoring_result.admissible_files.as_ref(), ); let used: u32 = selected.iter().map(|f| f.token_count).sum(); @@ -1153,6 +1157,7 @@ fn empty_scored_state(root_dir: PathBuf) -> ScoredState { policy_excluded_count: 0, scoring_result: ScoringResult { admissible_files: None, + declared_admissible_files: None, rel_scores: FxHashMap::default(), filtered_fragments: Vec::new(), graph: crate::graph::Graph::new(), @@ -1224,14 +1229,11 @@ fn build_preferred_revs(base_rev: Option<&str>, head_rev: Option<&str>) -> Vec Box { - match config.discovery { - DiscoveryKind::Ensemble => Box::new(EnsembleDiscovery::new(vec![ - Box::new(DefaultDiscovery), - Box::new(TestFileDiscovery), - Box::new(BM25Discovery::new(config.bm25_top_k)), - ])), - DiscoveryKind::Default => Box::new(DefaultDiscovery), - } + Box::new(EnsembleDiscovery::new(vec![ + Box::new(DefaultDiscovery), + Box::new(TestFileDiscovery), + Box::new(BM25Discovery::new(config.bm25_top_k)), + ])) } fn build_file_cache(candidate_files: &[PathBuf]) -> FxHashMap { diff --git a/crates/diffctx-native/src/postpass.rs b/crates/diffctx-native/src/postpass.rs index fb9a2e9b0..01d153500 100644 --- a/crates/diffctx-native/src/postpass.rs +++ b/crates/diffctx-native/src/postpass.rs @@ -98,8 +98,13 @@ pub fn coherence_post_pass( all_fragments: &[Fragment], graph: &Graph, budget: u32, + admissible_files: Option<&FxHashSet>>, ) { let selected_ids: FxHashSet = selected.iter().map(|f| f.id.clone()).collect(); + // #65/#211: the name lookup below can land on an arbitrary same-named + // symbol in any file, so a pick opening a NEW file must be naming- + // reachable like every other context. + let open_paths: FxHashSet> = selected.iter().map(|f| f.id.path.clone()).collect(); let mut interval_idx = IntervalIndex::new(); for f in selected.iter() { interval_idx.add(f); @@ -134,6 +139,8 @@ pub fn coherence_post_pass( if pick.token_count <= remaining && !added_ids.contains(&pick.id) && !interval_idx.overlaps(pick) + && admissible_files + .is_none_or(|a| open_paths.contains(&pick.id.path) || a.contains(&pick.id.path)) { selected.push(pick.clone()); added_ids.insert(pick.id.clone()); @@ -168,6 +175,7 @@ pub fn rescue_nontrivial_context( rel_scores: &FxHashMap, core_ids: &FxHashSet, budget: u32, + admissible_files: Option<&FxHashSet>>, ) { let used: u32 = selected.iter().map(|f| f.token_count).sum(); let remaining = budget.saturating_sub(used); @@ -188,6 +196,14 @@ pub fn rescue_nontrivial_context( let mut represented_paths: FxHashSet> = selected.iter().map(|f| f.id.path.clone()).collect(); let changed_paths: FxHashSet> = core_ids.iter().map(|fid| fid.path.clone()).collect(); + // The admission gate protects an already-useful selection from being + // padded with reachable-but-wrong files. When the selection holds NO + // context at all (changed files only), there is nothing to dilute and a + // weak-channel or similarity-only candidate is strictly better than an + // empty answer — measured: every gate-caused corpus regression was a + // zero-context selection, while every gate win had context already. + let has_context = selected.iter().any(|f| !changed_paths.contains(&f.id.path)); + let admissible_files = if has_context { admissible_files } else { None }; let mut candidates: Vec<&Fragment> = all_fragments .iter() @@ -198,6 +214,9 @@ pub fn rescue_nontrivial_context( && !represented_paths.contains(&f.id.path) && rel_scores.get(&f.id).copied().unwrap_or(0.0) >= min_score && f.token_count <= rescue_budget + // #65/#211: every pick here opens a new file by construction, + // so the admission gate applies with no open-file exemption. + && admissible_files.is_none_or(|a| a.contains(&f.id.path)) }) .collect(); candidates.sort_by(|a, b| { @@ -442,7 +461,7 @@ mod tests { Vec::new() }; - rescue_nontrivial_context(&mut selected, &all, &rel, &core_ids, budget); + rescue_nontrivial_context(&mut selected, &all, &rel, &core_ids, budget, None); assert!( cost(&selected) <= budget, "rescue overran budget {budget}: cost {}", @@ -522,7 +541,7 @@ mod tests { let mut selected = vec![core]; // 5% of 2000 = 100 tokens of rescue: room for two 40-token picks. - rescue_nontrivial_context(&mut selected, &all, &rel, &core_ids, 2_000); + rescue_nontrivial_context(&mut selected, &all, &rel, &core_ids, 2_000, None); let rescued: Vec<&str> = selected .iter() diff --git a/crates/diffctx-native/src/pybridge.rs b/crates/diffctx-native/src/pybridge.rs index 9a3ce7689..128d9089a 100644 --- a/crates/diffctx-native/src/pybridge.rs +++ b/crates/diffctx-native/src/pybridge.rs @@ -88,10 +88,7 @@ fn map_pipeline_err(e: anyhow::Error) -> PyErr { alpha = DEFAULT_PPR_ALPHA, tau = DEFAULT_STOPPING_THRESHOLD, no_content = false, - ignore_file = None, - no_default_ignores = false, full = false, - whitelist_file = None, scoring_mode = DEFAULT_SCORING, timeout = DEFAULT_PIPELINE_TIMEOUT_SECONDS, ))] @@ -103,31 +100,10 @@ fn build_diff_context<'py>( alpha: f64, tau: f64, no_content: bool, - ignore_file: Option<&str>, - no_default_ignores: bool, full: bool, - whitelist_file: Option<&str>, scoring_mode: &str, timeout: u64, ) -> PyResult> { - // None of these three are implemented in the Rust backend yet. Silently - // dropping them here would be invisible: `tracing_subscriber` is only - // ever installed in the native binary (main.rs), never in this extension - // module, so `tracing::warn!` has no sink and no one ever sees it. The - // real guard lives one layer up, in `diffctx._native.pipeline.build_diff_context`, - // which raises `NotImplementedError` for a non-default value of any of - // the three before this function is ever called - keep that in sync if a - // flag ever gets implemented here. - if ignore_file.is_some() { - tracing::warn!("ignore_file is not yet implemented in Rust backend, ignored"); - } - if no_default_ignores { - tracing::warn!("no_default_ignores is not yet implemented in Rust backend, ignored"); - } - if whitelist_file.is_some() { - tracing::warn!("whitelist_file is not yet implemented in Rust backend, ignored"); - } - let mode = ScoringMode::from_str(scoring_mode).map_err(pyo3::exceptions::PyValueError::new_err)?; let path = Path::new(root_dir); @@ -386,6 +362,16 @@ pub struct PyProjectGraph { fragment_map: RsFxHashMap, } +impl PyProjectGraph { + fn view(&self) -> graph_export::ProjectGraphView<'_> { + graph_export::ProjectGraphView { + graph: &self.inner.graph, + fragments: &self.fragment_map, + root_dir: Some(self.inner.root_dir.as_path()), + } + } +} + #[pymethods] impl PyProjectGraph { #[getter] @@ -566,22 +552,14 @@ fn to_mermaid(qg: &PyQuotientGraph, top_n: usize) -> String { #[pyfunction] fn graph_to_json_string(pg: &PyProjectGraph) -> PyResult { - let view = graph_export::ProjectGraphView { - graph: &pg.inner.graph, - fragments: &pg.fragment_map, - root_dir: Some(pg.inner.root_dir.as_path()), - }; + let view = pg.view(); graph_export::graph_to_json_string(&view) .map_err(|e| pyo3::exceptions::PyRuntimeError::new_err(e.to_string())) } #[pyfunction] fn graph_to_graphml_string(pg: &PyProjectGraph) -> String { - let view = graph_export::ProjectGraphView { - graph: &pg.inner.graph, - fragments: &pg.fragment_map, - root_dir: Some(pg.inner.root_dir.as_path()), - }; + let view = pg.view(); graph_export::graph_to_graphml_string(&view) } @@ -592,11 +570,7 @@ fn graph_summary<'py>( pg: &PyProjectGraph, top_n: usize, ) -> PyResult> { - let view = graph_export::ProjectGraphView { - graph: &pg.inner.graph, - fragments: &pg.fragment_map, - root_dir: Some(pg.inner.root_dir.as_path()), - }; + let view = pg.view(); let summary = graph_export::graph_summary(&view, top_n); let dict = PyDict::new(py); dict.set_item("node_count", summary.node_count)?; @@ -662,7 +636,3 @@ pub fn _diffctx(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add("GitError", m.py().get_type::())?; Ok(()) } - -// silence "unused" warnings for fields used only via Python pyclass getters -#[allow(dead_code)] -fn _used(_: PathBuf) {} diff --git a/crates/diffctx-native/src/scoring.rs b/crates/diffctx-native/src/scoring.rs index 6a9448498..3f1980e99 100644 --- a/crates/diffctx-native/src/scoring.rs +++ b/crates/diffctx-native/src/scoring.rs @@ -7,12 +7,12 @@ use rustc_hash::{FxHashMap, FxHashSet}; use crate::config::bm25::BM25; use crate::config::edge_weights::SEMANTIC_DISCOVERY; use crate::config::limits::{LIMITS, PPR}; -use crate::config::scoring::{EGO, pit, rrf}; +use crate::config::scoring::{EGO, PIT, RRF}; use crate::config::tokenization::TOKENIZATION; use crate::edges; use crate::filtering; use crate::graph::{self, Graph}; -use crate::mode::{PipelineConfig, ScoringKind}; +use crate::mode::{PipelineConfig, ScoringMode}; use crate::ppr::personalized_pagerank; use crate::types::{DiffHunk, Fragment, FragmentId, extract_identifier_list}; @@ -31,6 +31,11 @@ pub struct ScoringResult { /// from the core set via naming-class edges. None = admission off (flag /// unset or a strategy without a typed graph), every file admissible. pub admissible_files: Option>>, + /// Wider admission set for the singleton comparators (#211): + /// declared-relation reachability (any semantic/config/document/test + /// channel above the marker floor). Superset of `admissible_files`; + /// still refuses proximity, lexical similarity and co-change. + pub declared_admissible_files: Option>>, pub graph: Graph, /// Wall time spent constructing the typed dependency graph (edge /// builders + dedup + hub suppression + per-source cap). Reported @@ -68,6 +73,7 @@ impl Default for ScoringResult { rel_scores: FxHashMap::default(), filtered_fragments: Vec::new(), admissible_files: None, + declared_admissible_files: None, graph: Graph::new(), graph_build_ms: 0.0, ppr_truncated: false, @@ -79,11 +85,11 @@ impl Default for ScoringResult { pub fn create_scoring_strategy(config: &PipelineConfig) -> Box { match config.scoring { - ScoringKind::Ego => Box::new(EgoGraphScoring::new(config.ego_depth)), - ScoringKind::Ppr => Box::new(PPRScoring::new(config.ppr_alpha)), - ScoringKind::Bm25 => Box::new(BM25Scoring), - ScoringKind::Rrf => Box::new(RrfFusionScoring::new(config.ego_depth)), - ScoringKind::Pit => Box::new(PitFusionScoring::new(config.ego_depth)), + ScoringMode::Ego => Box::new(EgoGraphScoring::new(config.ego_depth)), + ScoringMode::Ppr => Box::new(PPRScoring::new(config.ppr_alpha)), + ScoringMode::Bm25 => Box::new(BM25Scoring), + ScoringMode::Rrf => Box::new(RrfFusionScoring::new(config.ego_depth)), + ScoringMode::Pit => Box::new(PitFusionScoring::new(config.ego_depth)), } } @@ -129,6 +135,9 @@ impl ScoringStrategy for PPRScoring { let admissible_files = file_admission_enabled().then(|| { edges::naming_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) }); + let declared_admissible_files = file_admission_enabled().then(|| { + edges::declared_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) + }); let mut g = graph::build_graph_capped(all_fragments, capped); let graph_build_ms = t_graph.elapsed().as_secs_f64() * 1000.0; let ppr = personalized_pagerank( @@ -154,6 +163,7 @@ impl ScoringStrategy for PPRScoring { ScoringResult { admissible_files, + declared_admissible_files, rel_scores, filtered_fragments: filtered, graph: g, @@ -193,6 +203,9 @@ impl ScoringStrategy for EgoGraphScoring { let admissible_files = file_admission_enabled().then(|| { edges::naming_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) }); + let declared_admissible_files = file_admission_enabled().then(|| { + edges::declared_reachable_files(&capped, core_ids, SEMANTIC_DISCOVERY.max_depth) + }); let g = graph::build_graph_capped(all_fragments, capped); let graph_build_ms = t_graph.elapsed().as_secs_f64() * 1000.0; let mut rel_scores = g.ego_graph(core_ids, self.max_depth); @@ -222,6 +235,7 @@ impl ScoringStrategy for EgoGraphScoring { ScoringResult { admissible_files, + declared_admissible_files, rel_scores, filtered_fragments: filtered, graph: g, @@ -352,7 +366,7 @@ impl RrfFusionScoring { pub fn new(ego_depth: usize) -> Self { Self { ego_depth, - k: rrf().k, + k: RRF.k, } } } @@ -419,6 +433,104 @@ fn fuse_reciprocal_ranks( fused } +struct FusionComponents { + ego: ScoringResult, + lexical: ScoringResult, + ego_admitted: FxHashSet, + lexical_admitted: FxHashSet, +} + +#[allow(clippy::too_many_arguments)] +fn run_fusion_components( + ego_depth: usize, + all_fragments: &[Fragment], + core_ids: &FxHashSet, + hunks: &[DiffHunk], + repo_root: Option<&Path>, + seed_weights: Option<&FxHashMap>, + discovered_paths: Option<&FxHashSet>>, + deadline: crate::deadline::Deadline, +) -> FusionComponents { + let ego = EgoGraphScoring::new(ego_depth).score_and_filter( + all_fragments, + core_ids, + hunks, + repo_root, + seed_weights, + discovered_paths, + deadline, + ); + let lexical = BM25Scoring.score_and_filter( + all_fragments, + core_ids, + hunks, + repo_root, + seed_weights, + discovered_paths, + deadline, + ); + let ego_admitted: FxHashSet = ego + .filtered_fragments + .iter() + .map(|f| f.id.clone()) + .collect(); + let lexical_admitted: FxHashSet = lexical + .filtered_fragments + .iter() + .map(|f| f.id.clone()) + .collect(); + FusionComponents { + ego, + lexical, + ego_admitted, + lexical_admitted, + } +} + +/// The union re-admits paths that EGO's structural guards dropped (hub noise, +/// generic-config-only code), because BM25 has no graph to judge them by. The +/// guards are re-applied and the per-file cap recomputed against the fused +/// scores via `finish_scoring`, since each component capped against its own. +/// +/// Measured caveat, not a claim of soundness: re-applying them does NOT make +/// the union a net win. On the oracle corpus RRF loses 97 cases to EGO and +/// gains 18, all on precision, and restricting candidates to EGO's admitted +/// set recovers only 28 of the 82 (#125). A second, unmeasured degree of +/// freedom: each component already applied `cap_context_fragments` (30/file) +/// against its own scores before voting, so a fragment the fused ranking +/// would have kept can have been capped away before it reached the ballot. +fn assemble_fusion_result( + components: FusionComponents, + rel_scores: FxHashMap, + all_fragments: &[Fragment], + core_ids: &FxHashSet, +) -> ScoringResult { + let union_ids: FxHashSet = components + .ego_admitted + .union(&components.lexical_admitted) + .cloned() + .collect(); + let union: Vec = all_fragments + .iter() + .filter(|f| union_ids.contains(&f.id)) + .cloned() + .collect(); + let filtered = finish_scoring(&union, core_ids, &rel_scores, &components.ego.graph); + ScoringResult { + // The fusion inherits the ego component's naming-reachability set: + // admission is a graph property, and the fusion's structural half + // IS that graph. Leaving this None silently ran fusion arms + // without the gate. + admissible_files: components.ego.admissible_files.clone(), + declared_admissible_files: components.ego.declared_admissible_files.clone(), + rel_scores, + filtered_fragments: filtered, + graph: components.ego.graph, + graph_build_ms: components.ego.graph_build_ms, + ..Default::default() + } +} + impl ScoringStrategy for RrfFusionScoring { fn score_and_filter( &self, @@ -430,7 +542,8 @@ impl ScoringStrategy for RrfFusionScoring { discovered_paths: Option<&FxHashSet>>, deadline: crate::deadline::Deadline, ) -> ScoringResult { - let ego = EgoGraphScoring::new(self.ego_depth).score_and_filter( + let c = run_fusion_components( + self.ego_depth, all_fragments, core_ids, hunks, @@ -439,76 +552,15 @@ impl ScoringStrategy for RrfFusionScoring { discovered_paths, deadline, ); - let lexical = BM25Scoring.score_and_filter( - all_fragments, - core_ids, - hunks, - repo_root, - seed_weights, - discovered_paths, - deadline, - ); - - let ego_admitted: FxHashSet = ego - .filtered_fragments - .iter() - .map(|f| f.id.clone()) - .collect(); - let lexical_admitted: FxHashSet = lexical - .filtered_fragments - .iter() - .map(|f| f.id.clone()) - .collect(); - let rel_scores = fuse_reciprocal_ranks( &[ - (&ego.rel_scores, &ego_admitted), - (&lexical.rel_scores, &lexical_admitted), + (&c.ego.rel_scores, &c.ego_admitted), + (&c.lexical.rel_scores, &c.lexical_admitted), ], core_ids, self.k, ); - - let union_ids: FxHashSet = - ego_admitted.union(&lexical_admitted).cloned().collect(); - - let union: Vec = all_fragments - .iter() - .filter(|f| union_ids.contains(&f.id)) - .cloned() - .collect(); - - // The union re-admits paths that EGO's structural guards dropped - // (hub noise, generic-config-only code), because BM25 has no graph - // to judge them by. The guards are re-applied and the per-file cap - // recomputed against the fused scores, since each component capped - // against its own. - // - // Measured caveat, not a claim of soundness: re-applying them does NOT - // make the union a net win. On the oracle corpus RRF loses 97 cases to - // EGO and gains 18, all on precision, and restricting candidates to - // EGO's admitted set recovers only 28 of the 82 (#125). - // - // A second, unmeasured degree of freedom lives here: each component - // already applied `cap_context_fragments` (30/file) against its own - // scores before voting, so a fragment the fused ranking would have kept - // can have been capped away before it ever reached the ballot. The cap - // is per file and the losses are cross-file, so this is unlikely to be - // the 97 — but it has not been isolated. - let filtered = finish_scoring(&union, core_ids, &rel_scores, &ego.graph); - - ScoringResult { - // The fusion inherits the ego component's naming-reachability set: - // admission is a graph property, and the fusion's structural half - // IS that graph. Leaving this None silently ran fusion arms - // without the gate. - admissible_files: ego.admissible_files.clone(), - rel_scores, - filtered_fragments: filtered, - graph: ego.graph, - graph_build_ms: ego.graph_build_ms, - ..Default::default() - } + assemble_fusion_result(c, rel_scores, all_fragments, core_ids) } } @@ -540,7 +592,7 @@ pub struct PitFusionScoring { impl PitFusionScoring { pub fn new(ego_depth: usize) -> Self { - let cfg = pit(); + let cfg = &*PIT; Self { ego_depth, blend: cfg.blend, @@ -717,7 +769,8 @@ impl ScoringStrategy for PitFusionScoring { discovered_paths: Option<&FxHashSet>>, deadline: crate::deadline::Deadline, ) -> ScoringResult { - let ego = EgoGraphScoring::new(self.ego_depth).score_and_filter( + let c = run_fusion_components( + self.ego_depth, all_fragments, core_ids, hunks, @@ -726,36 +779,15 @@ impl ScoringStrategy for PitFusionScoring { discovered_paths, deadline, ); - let lexical = BM25Scoring.score_and_filter( - all_fragments, - core_ids, - hunks, - repo_root, - seed_weights, - discovered_paths, - deadline, - ); - - let ego_admitted: FxHashSet = ego - .filtered_fragments - .iter() - .map(|f| f.id.clone()) - .collect(); - let lexical_admitted: FxHashSet = lexical - .filtered_fragments - .iter() - .map(|f| f.id.clone()) - .collect(); - let (ego_pct, ego_top) = percentiles( - &ego.rel_scores, - &ego_admitted, + &c.ego.rel_scores, + &c.ego_admitted, core_ids, self.agreement_top_k, ); let (lex_pct, lex_top) = percentiles( - &lexical.rel_scores, - &lexical_admitted, + &c.lexical.rel_scores, + &c.lexical_admitted, core_ids, self.agreement_top_k, ); @@ -793,11 +825,12 @@ impl ScoringStrategy for PitFusionScoring { rel_scores.insert(fid.clone(), 1.0); } } else { - let mut reference: Vec = ego + let mut reference: Vec = c + .ego .rel_scores .iter() .filter(|(fid, s)| { - **s > 0.0 && !core_ids.contains(*fid) && ego_admitted.contains(*fid) + **s > 0.0 && !core_ids.contains(*fid) && c.ego_admitted.contains(*fid) }) .map(|(_, s)| *s) .collect(); @@ -808,33 +841,13 @@ impl ScoringStrategy for PitFusionScoring { // excludes cores, but the utility does not, and a synthetic 1.0 on // EGO's raw scale is a different number from the one EGO assigns. for fid in core_ids { - if let Some(s) = ego.rel_scores.get(fid) { + if let Some(s) = c.ego.rel_scores.get(fid) { rel_scores.insert(fid.clone(), *s); } } } - let union_ids: FxHashSet = - ego_admitted.union(&lexical_admitted).cloned().collect(); - let union: Vec = all_fragments - .iter() - .filter(|f| union_ids.contains(&f.id)) - .cloned() - .collect(); - let filtered = finish_scoring(&union, core_ids, &rel_scores, &ego.graph); - - ScoringResult { - // The fusion inherits the ego component's naming-reachability set: - // admission is a graph property, and the fusion's structural half - // IS that graph. Leaving this None silently ran fusion arms - // without the gate. - admissible_files: ego.admissible_files.clone(), - rel_scores, - filtered_fragments: filtered, - graph: ego.graph, - graph_build_ms: ego.graph_build_ms, - ..Default::default() - } + assemble_fusion_result(c, rel_scores, all_fragments, core_ids) } } diff --git a/crates/diffctx-native/src/select.rs b/crates/diffctx-native/src/select.rs index 4ccc10109..646ec741b 100644 --- a/crates/diffctx-native/src/select.rs +++ b/crates/diffctx-native/src/select.rs @@ -400,6 +400,8 @@ fn find_best_singleton( rel: &FxHashMap, needs: &[InformationNeed], base_state: &UtilityState, + open_paths: &FxHashSet>, + admissible_files: Option<&FxHashSet>>, ) -> (Option, f64) { let mut best_singleton = None; let mut best_gain = 0.0; @@ -410,6 +412,9 @@ fn find_best_singleton( if base_selected_ids.overlaps(f) { continue; } + if !file_admitted(&f.id.path, open_paths, admissible_files) { + continue; + } let gain = marginal_gain(f, rel.get(&f.id).copied().unwrap_or(0.0), needs, base_state); if gain > best_gain { best_gain = gain; @@ -436,6 +441,8 @@ fn find_best_singleton_full_set( rel: &FxHashMap, needs: &[InformationNeed], empty_state: &UtilityState, + open_paths: &FxHashSet>, + admissible_files: Option<&FxHashSet>>, ) -> (Option, f64) { let mut best = None; let mut best_gain = 0.0; @@ -443,6 +450,9 @@ fn find_best_singleton_full_set( if f.token_count == 0 || f.token_count > budget_tokens { continue; } + if !file_admitted(&f.id.path, open_paths, admissible_files) { + continue; + } let gain = marginal_gain( f, rel.get(&f.id).copied().unwrap_or(0.0), @@ -541,12 +551,16 @@ fn run_greedy_loop_heap( break; } - if let Some(admissible) = admissible_files { - if !open_files.contains(&best_frag.id.path) - && !admissible.contains(&best_frag.id.path) - { - continue; - } + if !file_admitted(&best_frag.id.path, &open_files, admissible_files) { + continue; + } + + // A deferred candidate still sets the peak (#197): it was the + // legitimate argmax, and excluding it calibrated `tau * peak` on + // whatever foreign-file fragment came next — the ceiling is a + // budget constraint and must not silently act as a scoring one. + if best_density > peak_density { + peak_density = best_density; } if ceiling_active { @@ -561,9 +575,7 @@ fn run_greedy_loop_heap( } } - if best_density > peak_density { - peak_density = best_density; - } else if peak_density > 0.0 && best_density < tau * peak_density { + if peak_density > 0.0 && best_density < tau * peak_density { break; } @@ -590,6 +602,18 @@ fn run_greedy_loop_heap( (state.selected.len(), threshold, loop_iters) } +/// #65 admission for every selection path, not only the greedy loop (#211): +/// a fragment may open a NEW file only if that file is naming-reachable from +/// the changed set. Files already open keep competing, and `None` means the +/// gate is disabled (BM25 mode, or `DIFFCTX_FILE_ADMISSION=0`). +fn file_admitted( + path: &Arc, + open_paths: &FxHashSet>, + admissible: Option<&FxHashSet>>, +) -> bool { + admissible.is_none_or(|a| open_paths.contains(path) || a.contains(path)) +} + fn setup_and_select_core( fragments: &[Fragment], core_ids: &FxHashSet, @@ -678,6 +702,7 @@ pub fn lazy_greedy_select( file_importance: Option<&FxHashMap, f64>>, core_excerpts: Option<&FxHashMap>, admissible_files: Option<&FxHashSet>>, + declared_admissible_files: Option<&FxHashSet>>, ) -> SelectionResult { if fragments.is_empty() { return SelectionResult { @@ -751,6 +776,8 @@ pub fn lazy_greedy_select( base_selected_ids.add_id(&f.id); } + let base_open_paths: FxHashSet> = + base_selected.iter().map(|f| f.id.path.clone()).collect(); let (best_singleton, best_gain) = find_best_singleton( &non_core_fragments, &base_selected_ids, @@ -758,6 +785,8 @@ pub fn lazy_greedy_select( rel, needs, &base_state, + &base_open_paths, + declared_admissible_files, ); let empty_state = init_selection_state(core_ids, rel, budget_tokens, file_importance); @@ -767,6 +796,8 @@ pub fn lazy_greedy_select( rel, needs, &empty_state.utility_state, + &base_open_paths, + declared_admissible_files, ); let mut best_alt_utility = greedy_utility; @@ -909,6 +940,7 @@ mod tests { None, None, None, + None, ); assert!( cost_of(&result.selected) <= budget, @@ -967,6 +999,7 @@ mod tests { None, None, None, + None, ); assert_eq!( result.used_tokens, @@ -1002,6 +1035,7 @@ mod tests { None, Some(&excerpts), None, + None, ); let ids: Vec = result @@ -1026,7 +1060,7 @@ mod tests { .collect(); let core: FxHashSet = std::iter::once(frags[0].id.clone()).collect(); let rel = rel_map(&frags, 0.9); - let result = lazy_greedy_select(frags, &core, &rel, &[], 400, 0.12, None, None, None); + let result = lazy_greedy_select(frags, &core, &rel, &[], 400, 0.12, None, None, None, None); let ids: FxHashSet = result.selected.iter().map(|f| f.id.clone()).collect(); assert_eq!( @@ -1054,7 +1088,8 @@ mod tests { rel.insert(heavy.id.clone(), 1.0); rel.insert(frags[2].id.clone(), 0.1); - let result = lazy_greedy_select(frags, &core, &rel, &[], 2_000, 0.12, None, None, None); + let result = + lazy_greedy_select(frags, &core, &rel, &[], 2_000, 0.12, None, None, None, None); assert!( result.selected.iter().any(|f| core.contains(&f.id)), "no core fragment survived; reason was {:?}", @@ -1075,6 +1110,7 @@ mod tests { None, None, None, + None, ); assert!(result.selected.is_empty()); assert_eq!(result.reason, SelectionReason::NoCandidates); @@ -1158,8 +1194,10 @@ mod tests { None, None, None, + None, ); - let no_tau = lazy_greedy_select(frags, &core, &rel, &[], budget, 0.0, None, None, None); + let no_tau = + lazy_greedy_select(frags, &core, &rel, &[], budget, 0.0, None, None, None, None); assert_eq!( default_tau.reason, @@ -1229,6 +1267,7 @@ mod tests { None, None, None, + None, ); let by_file = |sel: &Vec, p: &str| sel.iter().filter(|f| f.id.path.as_ref() == p).count(); @@ -1323,7 +1362,7 @@ mod tests { }) .collect(); let core: FxHashSet = FxHashSet::default(); - let result = lazy_greedy_select(lone, &core, rel, &[], budget, 0.0, None, None, None); + let result = lazy_greedy_select(lone, &core, rel, &[], budget, 0.0, None, None, None, None); assert!( result.selected.len() >= 9, "single-file selection stranded budget: {} fragments", diff --git a/crates/diffctx-native/src/stopwords.rs b/crates/diffctx-native/src/stopwords.rs index 1cf70532c..82729fc80 100644 --- a/crates/diffctx-native/src/stopwords.rs +++ b/crates/diffctx-native/src/stopwords.rs @@ -904,15 +904,6 @@ pub fn get_stopwords(profile: &str) -> &FxHashSet { } } -pub fn get_min_len(profile: &str) -> usize { - match profile { - PROFILE_CODE | PROFILE_DOCS | PROFILE_GENERIC => 3, - PROFILE_LEGAL => 4, - PROFILE_DATA => 2, - _ => 3, - } -} - pub fn profile_from_path(path: &str) -> &'static str { let p = std::path::Path::new(path); let suffix = p diff --git a/crates/diffctx-native/src/types.rs b/crates/diffctx-native/src/types.rs index 409951253..10e029fde 100644 --- a/crates/diffctx-native/src/types.rs +++ b/crates/diffctx-native/src/types.rs @@ -1,7 +1,6 @@ use std::cmp::Ordering; use std::fmt; use std::hash::{Hash, Hasher}; -use std::path::PathBuf; use std::sync::Arc; use once_cell::sync::Lazy; @@ -227,10 +226,6 @@ impl FragmentId { cached_hash, } } - - pub fn path_buf(&self) -> PathBuf { - PathBuf::from(self.path.as_ref()) - } } #[derive(Clone)] diff --git a/crates/diffctx-native/src/utility/needs.rs b/crates/diffctx-native/src/utility/needs.rs index 49d83a13a..66de1e882 100644 --- a/crates/diffctx-native/src/utility/needs.rs +++ b/crates/diffctx-native/src/utility/needs.rs @@ -293,12 +293,8 @@ fn defines_strength(scope_match: bool, has_scope: bool) -> f64 { } } -fn is_test_file(path: &str) -> bool { - crate::testfiles::is_test_path(std::path::Path::new(path)) -} - fn is_test_fragment(frag: &Fragment) -> bool { - if is_test_file(frag.path()) { + if crate::testfiles::is_test_path(std::path::Path::new(frag.path())) { return true; } if let Some(ref sym) = frag.symbol_name { diff --git a/crates/diffctx-native/src/utility/scoring.rs b/crates/diffctx-native/src/utility/scoring.rs index e88cc624d..17ef09e3c 100644 --- a/crates/diffctx-native/src/utility/scoring.rs +++ b/crates/diffctx-native/src/utility/scoring.rs @@ -483,6 +483,7 @@ mod paper_claim_tests { None, None, None, + None, ); for (i, fi) in result.selected.iter().enumerate() { @@ -562,6 +563,7 @@ mod paper_claim_tests { None, None, None, + None, ); let ratio = result.utility / optimal; let bound = 0.5 * (1.0 - 1.0_f64.exp().recip()); diff --git a/crates/diffctx-native/tests/known_below_threshold.txt b/crates/diffctx-native/tests/known_below_threshold.txt index 8a4f2caa4..a2c58f7ce 100644 --- a/crates/diffctx-native/tests/known_below_threshold.txt +++ b/crates/diffctx-native/tests/known_below_threshold.txt @@ -14,130 +14,46 @@ # without ever being listed. Do not "simplify" these arguments back to # constants: a gate that does not run the shipped configuration measures # nothing. -algorithm/comprehensive/comprehensive_016_quality_method_call_on_object -algorithm/comprehensive/comprehensive_022_structural_code_inside_with_block -algorithm/fragments/fragments_003_class_decorator_included algorithm/fragments/fragments_015_markdown_long_heading_truncation -algorithm/internals/internals_013_diff_with_unicode_content -algorithm/internals/internals_025_korean_comments_code -algorithm/operations/operations_003_ignore_node_modules -algorithm/operations/operations_005_ignore_venv -algorithm/patterns/patterns_028_intra_constant_in_multiple_methods config/yaml/yaml_016_pagination_config -infrastructure/terraform/terraform_007_rds_instance infrastructure/terraform/terraform_010_iam_policy -infrastructure/terraform/terraform_011_ec2_instance infrastructure/terraform/terraform_035_count infrastructure/terraform/terraform_037_provisioner -languages/c/c_family_002_header_include_chain languages/go/go_004_embed_directive languages/go/go_016_error_wrapping languages/go/go_033_error_interface languages/java/java_006_entity_relations languages/java/java_025_kotlin_data_class -languages/javascript/javascript_004_http_client -languages/javascript/javascript_005_observable_pipe languages/javascript/javascript_016_type_import_resolves_definition languages/javascript/javascript_022_implements_interface -languages/javascript/javascript_024_object_assign_source -languages/javascript/javascript_029_proxy_handler -languages/javascript/javascript_034_intl_date_format languages/javascript/javascript_035_web_worker_message -languages/javascript/javascript_036_mixed_import_default_named -languages/javascript/javascript_052_express_middleware -languages/javascript/javascript_056_socket_event -languages/javascript/javascript_057_page_click languages/javascript/javascript_063_custom_hook -languages/javascript/javascript_066_use_callback languages/javascript/javascript_070_intersection_type languages/javascript/javascript_076_pick_type languages/jvm/jvm_and_compiled_028_java_custom_exception languages/jvm/jvm_and_compiled_043_java_streams_api -languages/jvm/jvm_and_compiled_048_scala_akka_actor -languages/jvm/jvm_and_compiled_049_scala_case_class languages/jvm/jvm_and_compiled_055_scala_pattern_matching -languages/jvm/jvm_and_compiled_059_swift_actor -languages/jvm/jvm_and_compiled_062_swift_environment_object -languages/jvm/jvm_and_compiled_065_swift_generic_constraint -languages/php/php_015_laravel_controller -languages/r/r_lang_015_r_package_namespace -languages/ruby/ruby_021_rspec_test_discovery -languages/rust/rust_001_basic_function -languages/rust/rust_002_function_signature_change languages/rust/rust_003_basic_struct languages/rust/rust_004_struct_with_methods languages/rust/rust_005_impl_block -languages/rust/rust_007_module_use -languages/rust/rust_009_trait_impl -languages/rust/rust_012_generic_function languages/rust/rust_013_result_error_handling languages/rust/rust_016_use_crate_module -languages/rust/rust_022_unsafe_ffi -languages/rust/rust_025_question_mark_operator languages/rust/rust_026_box_dyn_trait languages/rust/rust_028_build_rs languages/rust/rust_032_move_semantics -languages/rust/rust_034_copy_trait -languages/rust/rust_039_deref_trait languages/scala/scala_022_sealed_trait_adt languages/scala/scala_025_build_sbt languages/scripting/scripting_001_class_instantiation languages/scripting/scripting_004_interface languages/scripting/scripting_005_abstract_class -languages/swift/swift_005_guard_statement -languages/swift/swift_007_async_await -languages/swift/swift_010_combine_publisher -languages/typescript/typescript_003_generic_repository_pattern -regression/enrichment/regression_001_mixed_import_dependency -selection/dependencies/dependencies_019_backward_class_attribute_changed -synthetic/balanced/suite-1/cross-module/bal_crossmod_011_cpp_renderer_to_scene -synthetic/balanced/suite-1/cross-module/bal_crossmod_012_cpp_physics_to_entity -synthetic/balanced/suite-1/cross-module/bal_crossmod_013_cpp_database_to_repository -synthetic/balanced/suite-1/cross-module/bal_crossmod_014_cpp_network_to_protocol -synthetic/balanced/suite-1/cross-module/bal_crossmod_015_cpp_allocator_to_pool -synthetic/balanced/suite-1/cross-module/bal_crossmod_016_cpp_shader_to_material -synthetic/balanced/suite-1/cross-module/bal_crossmod_019_cpp_config_to_engine synthetic/balanced/suite-1/cross-module/bal_crossmod_025_kotlin_event_to_listener -synthetic/balanced/suite-1/hard/bal_hard_006_scala_http_middleware -synthetic/balanced/suite-1/hard/bal_hard_008_scala_stream_processing -synthetic/balanced/suite-1/hard/bal_hard_009_swift_networking_layer -synthetic/balanced/suite-1/hard/bal_hard_010_swift_game_engine -synthetic/balanced/suite-1/hard/bal_hard_011_swift_dependency_injection -synthetic/balanced/suite-1/hard/bal_hard_015_swift_event_bus -synthetic/balanced/suite-1/hard/bal_hard_020_php_queue_worker -synthetic/balanced/suite-1/hard/bal_hard_022_php_config_loader -synthetic/balanced/suite-1/hard/bal_hard_026_csharp_strategy_pattern -synthetic/balanced/suite-1/hard/bal_hard_027_csharp_observer_pattern -synthetic/balanced/suite-1/hard/bal_hard_029_csharp_decorator_chain -synthetic/balanced/suite-1/one-hop/bal_1hop_002_go_repo_calls_model -synthetic/balanced/suite-1/one-hop/bal_1hop_005_go_scheduler_calls_task -synthetic/balanced/suite-1/one-hop/bal_1hop_018_rust_parser_calls_lexer -synthetic/balanced/suite-1/one-hop/bal_1hop_031_java_repo_to_service -synthetic/balanced/suite-1/one-hop/bal_1hop_032_java_dao_to_controller -synthetic/balanced/suite-1/one-hop/bal_1hop_033_java_event_publisher_to_listener -synthetic/balanced/suite-1/one-hop/bal_1hop_034_java_validator_to_handler synthetic/balanced/suite-1/one-hop/bal_1hop_035_java_mapper_to_facade -synthetic/balanced/suite-1/one-hop/bal_1hop_038_java_config_provider_to_bootstrap synthetic/balanced/suite-1/one-hop/bal_1hop_050_typescript_cache_to_resolver -synthetic/balanced/suite-1/one-hop/bal_1hop_054_typescript_state_machine_to_controller -synthetic/balanced/suite-1/test-context/bal_testctx_001_python_calculator_test synthetic/balanced/suite-1/test-context/bal_testctx_003_python_http_client_test -synthetic/balanced/suite-1/test-context/bal_testctx_006_python_rate_limiter_test synthetic/balanced/suite-1/test-context/bal_testctx_009_python_template_engine_test -synthetic/balanced/suite-1/test-context/bal_testctx_018_typescript_config_parser_test -synthetic/balanced/suite-1/test-context/bal_testctx_029_rust_string_scanner_test synthetic/balanced/suite-2/one-hop/bal2_1hop_001_rb_activerecord_model_change synthetic/balanced/suite-2/one-hop/bal2_1hop_072_csharp_config_options_pattern -synthetic/balanced/suite-2/test-context/bal2_testctx_031_csharp_email_validator -synthetic/balanced/suite-2/test-context/bal2_testctx_033_csharp_order_repository -synthetic/balanced/suite-2/test-context/bal2_testctx_042_csharp_event_dispatcher -synthetic/balanced/suite-3/bugfix/bal3_bugfix_004_go_wrong_operator -synthetic/balanced/suite-3/bugfix/bal3_bugfix_006_rust_off_by_one_iter -synthetic/balanced/suite-3/bugfix/bal3_bugfix_007_rust_unwrap_to_option -synthetic/balanced/suite-3/bugfix/bal3_bugfix_010_rust_missing_validation synthetic/balanced/suite-3/bugfix/bal3_bugfix_014_ruby_wrong_boolean -synthetic/balanced/suite-3/bugfix/bal3_bugfix_019_scala_race_condition -synthetic/balanced/suite-3/one-hop/bal3_1hop_014_go_queue_consumer synthetic/balanced/suite-3/one-hop/bal3_1hop_032_php_repository_signature synthetic/balanced/suite-3/one-hop/bal3_1hop_034_php_bug_fix_validator synthetic/balanced/suite-3/one-hop/bal3_1hop_037_php_signature_serializer @@ -147,25 +63,7 @@ synthetic/balanced/suite-3/one-hop/bal3_1hop_070_swift_new_function_extension synthetic/balanced/suite-3/one-hop/bal3_1hop_073_swift_closure_callback synthetic/balanced/suite-3/one-hop/bal3_1hop_074_swift_bug_fix_race_condition synthetic/balanced/suite-3/rare/bal3_rare_006_dart_repository_api -synthetic/balanced/suite-3/rare/bal3_rare_013_julia_struct_dispatch -synthetic/balanced/suite-3/test-context/bal3_testctx_008_java_user_service_test -synthetic/balanced/suite-3/test-context/bal3_testctx_020_ruby_user_validator_spec -synthetic/balanced/suite-3/test-context/bal3_testctx_022_ruby_token_store_spec -synthetic/balanced/suite-3/test-context/bal3_testctx_026_rust_config_parser_test synthetic/balanced/suite-4/cross-module/bal4_crossmod_005_go_const_used_cross_pkg -synthetic/gaps/suite-1/gap_003_python_websocket_heartbeat_race -synthetic/gaps/suite-1/gap_004_python_inventory_stock_deduction_fix -synthetic/gaps/suite-1/gap_006_python_scheduler_timezone_fix -synthetic/gaps/suite-1/gap_007_python_game_collision_bounds_fix -synthetic/gaps/suite-1/gap_008_python_jwt_audience_validation_fix -synthetic/gaps/suite-1/gap_011_python_template_engine_escape_fix -synthetic/gaps/suite-1/gap_014_python_graph_shortest_path_addition -synthetic/gaps/suite-1/gap_015_python_cli_batch_export_command -synthetic/gaps/suite-1/gap_016_python_image_pipeline_watermark -synthetic/gaps/suite-1/gap_017_prisma_add_user_email_index -synthetic/gaps/suite-1/gap_018_prisma_product_soft_delete_column -synthetic/gaps/suite-1/gap_020_prisma_tenant_relation_addition -synthetic/gaps/suite-1/gap_109_scala_config_database_pool synthetic/gaps/suite-1/gap_110_scala_config_email_relay synthetic/gaps/suite-1/gap_111_scala_config_rate_throttle synthetic/gaps/suite-1/gap_112_scala_config_search_index @@ -174,38 +72,17 @@ synthetic/gaps/suite-1/gap_154_shell_terraform_db_migration_import_chain synthetic/gaps/suite-1/gap_155_shell_terraform_cert_renewal_import_chain synthetic/gaps/suite-1/gap_156_shell_terraform_secrets_rotation_import_chain synthetic/gaps/suite-1/gap_158_shell_terraform_monitoring_setup_single_import -synthetic/gaps/suite-1/gap_177_typescript_event_bus_import_chain -synthetic/gaps/suite-1/gap_179_typescript_repository_pattern_chain -synthetic/gaps/suite-1/gap_180_typescript_state_machine_import_chain synthetic/gaps/suite-2/gap2_005_kotlin_python_payment_gateway_null_fix -synthetic/gaps/suite-2/gap2_012_java_config_rate_limit_api_gateway -synthetic/gaps/suite-2/gap2_013_java_test_file_order_validator -synthetic/gaps/suite-2/gap2_016_java_test_file_currency_converter -synthetic/gaps/suite-2/gap2_053_julia_new_fn_signature_particle_simulation -synthetic/gaps/suite-2/gap2_054_julia_new_fn_signature_currency_converter synthetic/gaps/suite-2/gap2_088_kotlin_refactor_import_chain_auth_token -synthetic/gaps/suite-2/gap2_141_python_multifile_new_func_weather_station -synthetic/gaps/suite-2/gap2_144_python_multifile_new_func_telescope_tracking -synthetic/gaps/suite-2/gap2_145_jspy_multifile_new_func_recipe_converter -synthetic/gaps/suite-2/gap2_146_jspy_multifile_new_func_quiz_grader -synthetic/gaps/suite-2/gap2_147_jspy_multifile_new_func_fitness_tracker -synthetic/gaps/suite-2/gap2_154_python_import_chain_tax_engine -synthetic/gaps/suite-2/gap2_157_pyts_config_same_file_feature_flags -synthetic/gaps/suite-2/gap2_160_pyts_config_same_file_pagination_defaults synthetic/gaps/suite-2/gap2_161_ts_signature_cross_module_mqtt_broker -synthetic/gaps/suite-2/gap2_162_ts_signature_cross_module_canvas_renderer -synthetic/gaps/suite-2/gap2_164_ts_signature_cross_module_workflow_engine -synthetic/gaps/suite-2/gap2_165_py_multi_sig_cross_module_flight_booking -synthetic/gaps/suite-2/gap2_166_py_multi_sig_cross_module_warehouse_dispatch -synthetic/gaps/suite-2/gap2_167_py_multi_sig_cross_module_greenhouse_monitor -synthetic/gaps/suite-2/gap2_168_py_multi_sig_cross_module_music_playlist synthetic/gaps/suite-2/gap2_173_perl_multi_file_easy_cgi_form -synthetic/gaps/suite-2/gap2_178_php_signature_import_chain_email_template -synthetic/gaps/suite-2/gap2_179_php_signature_import_chain_tax_calculator -synthetic/gaps/suite-2/gap2_180_php_signature_import_chain_geocoder -synthetic/gaps/suite-2/gap2_181_php_signature_crossmod_vet_appointment -synthetic/gaps/suite-2/gap2_183_php_signature_crossmod_museum_exhibit -synthetic/gaps/suite-2/gap2_184_php_signature_crossmod_dental_billing -synthetic/gaps/suite-2/gap2_185_php_import_chain_aquarium_water_quality -synthetic/gaps/suite-2/gap2_188_php_import_chain_gym_membership -synthetic/gaps/suite-2/gap2_192_php_signature_import_chain_library_lending +# 2026-08-19 admission-gate batch (#211): measured cost of gating the post-passes/singletons. +# Mechanisms per arm A/B in the issue: yaml_003/yaml_012/terraform_070 = greedy admits naming- +# reachable junk while gold is non-naming (ranking, not gate); kubernetes_001 = no selector-> +# workload edge channel exists; csharp 064/067 = gold reachable only via lexical similarity. +config/yaml/yaml_003_logging_config +config/yaml/yaml_012_queue_config +infrastructure/kubernetes/kubernetes_001_selector_edge_pulls_workload +infrastructure/terraform/terraform_070_coalesce_function +synthetic/balanced/suite-2/one-hop/bal2_1hop_064_csharp_dto_mapping_bugfix +synthetic/balanced/suite-2/one-hop/bal2_1hop_067_csharp_entity_config_change From e47b13dbf9d9f529cc69be030754c6a24e0185b2 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 21:26:33 +0200 Subject: [PATCH 45/73] refactor: MCP legacy tools to legacy.py; engine ALPHA default; QA notes --- QA.md | 5 + docs/engineering/parameter-strategy.md | 2 +- src/diffctx/_native/pipeline.py | 12 +- src/diffctx/mcp/legacy.py | 264 +++++++++++++++++++++++++ src/diffctx/mcp/server.py | 252 +---------------------- 5 files changed, 281 insertions(+), 254 deletions(-) create mode 100644 src/diffctx/mcp/legacy.py diff --git a/QA.md b/QA.md index 45172ec36..672344582 100644 --- a/QA.md +++ b/QA.md @@ -34,6 +34,11 @@ a deployed/web surface ships; re-derive then, don't trust this table. without naming the service. - Push `main` to both remotes (mirror sync is periodic; direct push is immediate). +- **Renovate auto-merges its Forgejo PRs** (renovate.json: patch/minor + automerge, squash) — possibly hours after opening them, so an "open" PR + list is a snapshot, not a queue to hand-merge. A pin that must NOT land + needs a `packageRules` constraint (the python `allowedVersions: <3.14` + CI-matrix gate is the precedent), not a closed PR. - **Forgejo's merge API can return 405 with an empty message on a merge that SUCCEEDED.** Never read the HTTP code as the outcome — re-fetch the PR (`state`/`merged`) before retrying or escalating; a blind retry diff --git a/docs/engineering/parameter-strategy.md b/docs/engineering/parameter-strategy.md index b91fac5c8..76849e222 100644 --- a/docs/engineering/parameter-strategy.md +++ b/docs/engineering/parameter-strategy.md @@ -121,7 +121,7 @@ it) to enable the sweep without rebuild. > **Not a stable interface.** The `DIFFCTX_OP_*` overrides — along with the > other internal toggles (`DIFFCTX_OBJECTIVE`, `DIFFCTX_EGO_*`, > `DIFFCTX_NO_COMMIT_SIGNAL`, `DIFFCTX_MAX_FRAGMENTS`, -> `DIFFCTX_FILE_ADMISSION`, `DIFFCTX_FILE_STAR`, `DIFFCTX_PIT_SHAPE`, +> `DIFFCTX_FILE_ADMISSION`, `DIFFCTX_PIT_SHAPE`, > `DIFFCTX_PIT_TRANSFORM`, `DIFFCTX_MAX_EDGES_PER_NODE`, > `DIFFCTX_TRACE_BUILDERS`, and the > `DIFFCTX_PROVENANCE_DUMP=` per-candidate telemetry sink) — are experimental diff --git a/src/diffctx/_native/pipeline.py b/src/diffctx/_native/pipeline.py index 9f853c782..d516df3fb 100644 --- a/src/diffctx/_native/pipeline.py +++ b/src/diffctx/_native/pipeline.py @@ -7,6 +7,7 @@ # drift from the engine it wraps. Python always passes `scoring_mode` and `tau` # explicitly, so a literal here would quietly override a changed engine default # for every Python and MCP caller. +from diffctx._diffctx import DEFAULT_ALPHA as _DEFAULT_ALPHA from diffctx._diffctx import DEFAULT_SCORING as _DEFAULT_SCORING from diffctx._diffctx import DEFAULT_TAU as _DEFAULT_TAU @@ -27,7 +28,7 @@ def _normalize_budget(budget_tokens: int | None) -> int | None: def compute_scored_state( root_dir: Path, diff_range: str, - alpha: float = 0.60, + alpha: float = _DEFAULT_ALPHA, scoring_mode: str = _DEFAULT_SCORING, timeout: int = _PIPELINE_TIMEOUT, ) -> Any: @@ -69,7 +70,7 @@ def build_locate( root_dir: Path, diff_range: str, budget_tokens: int | None = None, - alpha: float = 0.60, + alpha: float = _DEFAULT_ALPHA, tau: float = _DEFAULT_TAU, scoring_mode: str = _DEFAULT_SCORING, timeout: int = _PIPELINE_TIMEOUT, @@ -105,7 +106,7 @@ def build_diff_context( root_dir: Path, diff_range: str, budget_tokens: int | None = None, - alpha: float = 0.60, + alpha: float = _DEFAULT_ALPHA, tau: float = _DEFAULT_TAU, no_content: bool = False, ignore_file: Path | None = None, @@ -161,12 +162,7 @@ def build_diff_context( alpha=alpha, tau=tau, no_content=no_content, - # All three are guaranteed to be their inert default here: the guards - # above raise on any other value until the Rust backend implements them. - ignore_file=None, - no_default_ignores=False, full=full, - whitelist_file=None, scoring_mode=scoring_mode, timeout=timeout, ) diff --git a/src/diffctx/mcp/legacy.py b/src/diffctx/mcp/legacy.py new file mode 100644 index 000000000..405286afa --- /dev/null +++ b/src/diffctx/mcp/legacy.py @@ -0,0 +1,264 @@ +"""Pre-v3 MCP tool surface (`get_tree_map`, `get_file_context`), opt-in via +`DIFFCTX_MCP_LEGACY_TOOLS=1`. Kept out of `server.py` so the default surface +reads as what it is: one tool, `diffctx_context`.""" + +from __future__ import annotations + +from pathlib import Path + +import pathspec +from mcp.server.fastmcp import FastMCP + +from .security import validate_dir_path, validate_repo_path +from .server import ( + _DEFAULT_MAX_FILE_BYTES, + _DEFAULT_MAX_TOKENS, + _UNTRUSTED_NOTICE, + _copy_or_degrade, + _over_token_budget_notice, + _read_only, + _run_with_deadline, +) + +_TREE_MAP_DESCRIPTION = ( + "Get a structured map of a codebase — directory tree with file contents " + "in YAML or Markdown, optimized for LLM comprehension. " + "Respects .gitignore, skips binaries/build artifacts.\n\n" + "PREFER this over reading files one-by-one when you need:\n" + "- Project structure overview\n" + "- Multiple file contents from a subdirectory\n" + "- Full codebase context for analysis\n\n" + "Set clipboard=true to copy to clipboard without flooding context.\n" + "Use no_content=true for structure-only view." + _UNTRUSTED_NOTICE +) + + +async def get_tree_map( + repo_path: str, + subdirectory: str = "", + output_format: str = "yaml", + no_content: bool = False, + max_depth: int | None = None, + max_file_bytes: int = _DEFAULT_MAX_FILE_BYTES, + clipboard: bool = False, + max_tokens: int = _DEFAULT_MAX_TOKENS, +) -> str: + from diffctx.ignore import get_ignore_specs, get_whitelist_spec + from diffctx.tokens import count_tokens + from diffctx.tree import TreeBuildContext, build_tree + from diffctx.writer import tree_to_string + + validated_path = validate_repo_path(repo_path) + target = validated_path / subdirectory if subdirectory else validated_path + if subdirectory and not _is_contained(target, validated_path): + raise ValueError(f"subdirectory escapes repo_path: {subdirectory}") + if not target.is_dir(): + raise ValueError(f"Not a directory: {subdirectory or repo_path}") + + def _build() -> str: + ctx = TreeBuildContext( + base_dir=target, + combined_spec=get_ignore_specs(target, None, False, None), + output_file=None, + max_depth=max_depth, + no_content=no_content, + max_file_bytes=max_file_bytes, + whitelist_spec=get_whitelist_spec(None, target), + ) + tree = {"name": target.name or str(target), "type": "directory", "children": build_tree(target, ctx)} + return tree_to_string(tree, output_format) + + content: str = await _run_with_deadline("get_tree_map", _build) + token_info = count_tokens(content) + + if clipboard: + degraded_notice = await _copy_or_degrade(content) + if degraded_notice is None: + return f"Copied to clipboard ({token_info.count:,} tokens, {token_info.encoding})" + content = degraded_notice + content + token_info = count_tokens(content) + + if token_info.count > max_tokens: + return _over_token_budget_notice( + "get_tree_map", + token_info.count, + max_tokens, + "use subdirectory, no_content=true, or max_depth", + ) + + return f"\n{content}" + + +_FILE_CONTEXT_DESCRIPTION = ( + "Read files by glob pattern, formatted for LLM consumption. " + "Works on ANY directory (no git required).\n\n" + "PREFER this over reading files individually when you need 2+ files. " + "Use clipboard=true to copy to clipboard without flooding context.\n\n" + "Examples:\n" + '- patterns=["src/**/*.py"] — all Python files\n' + '- patterns=["eval/*.py", "tests/conftest.py"] — specific sets\n' + '- patterns=["*.md"] with dry_run=true — preview what matches\n\n' + "Honours .gitignore and .diffctx/ignore: excluded files are never returned " + "and are not reported as truncated, so a glob cannot read what the repo " + "withholds from the other tools." + _UNTRUSTED_NOTICE +) + + +def _is_contained(child: Path, root: Path) -> bool: + try: + return child.resolve().is_relative_to(root.resolve()) + except (OSError, ValueError): + return False + + +def _admissible_match(match: str, root: Path, spec: pathspec.PathSpec[pathspec.Pattern]) -> Path | None: + """The resolved path if this glob hit may be shown, `None` otherwise. + + Resolved rather than as-globbed because containment is established on the + resolved path and `root` is resolved too, so only that form is guaranteed to + be expressible relative to it. The reporters call `relative_to` with no + fallback, and an unresolved match — reachable when a pattern is absolute and + arrives via a symlink — is lexically outside the root even though it points + inside, turning an accepted file into an opaque ValueError. + """ + p = Path(match) + if not p.is_file() or not _is_contained(p, root): + return None + resolved = p.resolve() + try: + rel = resolved.relative_to(root.resolve()).as_posix() + except ValueError: + return None + return None if spec.match_file(rel) else resolved + + +def _collect_matched_files(validated_path: Path, patterns: list[str], max_files: int) -> tuple[list[Path], int]: + """Files matching `patterns`, minus anything the repo declared off-limits. + + The ignore specs are applied for the same reason `get_tree_map` applies + them: `.diffctx/ignore` is a security contract, and this tool accepts + `**/*`. Without the specs the two MCP tools disagreed about the same repo — + a key or an env file that diff mode and the tree map both withhold was + readable through an explicit glob, which makes the contract advisory rather + than a contract. + + Excluded files are dropped silently and NOT counted: `total_matched` drives + the truncation notice, and reporting "3 more files" for files the repo + refuses to expose would leak their existence. + """ + import glob as globmod + + from diffctx.ignore import get_ignore_specs + + spec = get_ignore_specs(validated_path, None, False, None) + + matched: list[Path] = [] + seen: set[Path] = set() + total_matched = 0 + for pattern in patterns: + for match in sorted(globmod.glob(str(validated_path / pattern), recursive=True)): + resolved = _admissible_match(match, validated_path, spec) + if resolved is None or resolved in seen: + continue + seen.add(resolved) + total_matched += 1 + if len(matched) < max_files: + matched.append(resolved) + return matched, total_matched + + +def _truncation_notice(shown: int, total_matched: int, max_files: int) -> str | None: + if total_matched <= shown: + return None + return f"TRUNCATED: showing {shown} of {total_matched} matched files (max_files={max_files}). Narrow patterns or raise max_files to see the rest." + + +def _build_dry_run_report(matched: list[Path], total_matched: int, validated_path: Path, max_files: int) -> str: + total_bytes = sum(p.stat().st_size for p in matched if p.exists()) + lines = [f"Would match {total_matched} files (~{total_bytes:,} bytes for the {len(matched)} shown below):"] + notice = _truncation_notice(len(matched), total_matched, max_files) + if notice: + lines.append(notice) + for p in matched: + rel = p.relative_to(validated_path) + lines.append(f" {rel} ({p.stat().st_size:,}b)") + return "\n".join(lines) + + +def _build_file_content_report( + matched: list[Path], total_matched: int, validated_path: Path, max_file_bytes: int, max_files: int +) -> tuple[str, int, int]: + header = f"# {len(matched)} files matched" + notice = _truncation_notice(len(matched), total_matched, max_files) + if notice: + header += f" ({total_matched} total)\n{notice}" + parts = [header + "\n"] + total_lines = 0 + included_count = 0 + for p in matched: + rel = p.relative_to(validated_path) + try: + size = p.stat().st_size + if size > max_file_bytes: + parts.append(f"## {rel}\n*Skipped: {size:,} bytes exceeds limit*\n") + continue + content = p.read_text(encoding="utf-8", errors="replace") + total_lines += content.count("\n") + 1 + included_count += 1 + suffix = p.suffix.lstrip(".") + parts.append(f"## {rel}\n```{suffix}\n{content}\n```\n") + except OSError as e: + # `{e}` on an OSError carries the absolute filename; the path is + # already stated as `rel` above it, so only the reason is added. + parts.append(f"## {rel}\n*Error: {e.strerror or type(e).__name__}*\n") + return "\n".join(parts), included_count, total_lines + + +async def get_file_context( + repo_path: str, + patterns: list[str], + max_files: int = 50, + max_file_bytes: int = _DEFAULT_MAX_FILE_BYTES, + clipboard: bool = False, + dry_run: bool = False, + max_tokens: int = _DEFAULT_MAX_TOKENS, +) -> str: + validated_path = validate_dir_path(repo_path) + + def _read() -> tuple[str, int, int]: + matched, total_matched = _collect_matched_files(validated_path, patterns, max_files) + if not matched: + return f"No files matched patterns: {patterns}", 0, 0 + if dry_run: + return _build_dry_run_report(matched, total_matched, validated_path, max_files), 0, 0 + return _build_file_content_report(matched, total_matched, validated_path, max_file_bytes, max_files) + + raw_result: tuple[str, int, int] = await _run_with_deadline("get_file_context", _read) + content, n_files, n_lines = raw_result + + if dry_run: + return content + + if clipboard and n_files > 0: + degraded_notice = await _copy_or_degrade(content) + if degraded_notice is None: + return f"Copied {n_files} files ({n_lines:,} lines) to clipboard" + content = degraded_notice + content + + from diffctx.tokens import count_tokens + + token_count = count_tokens(content).count + if token_count > max_tokens: + return _over_token_budget_notice( + "get_file_context", + token_count, + max_tokens, + "tighten patterns, lower max_files, or use dry_run=true first", + ) + + return content + + +def register(server: FastMCP) -> None: + server.tool(description=_TREE_MAP_DESCRIPTION, annotations=_read_only("Get tree map"))(get_tree_map) + server.tool(description=_FILE_CONTEXT_DESCRIPTION, annotations=_read_only("Get file context"))(get_file_context) diff --git a/src/diffctx/mcp/server.py b/src/diffctx/mcp/server.py index c9b94bfe2..d170605ab 100644 --- a/src/diffctx/mcp/server.py +++ b/src/diffctx/mcp/server.py @@ -10,7 +10,6 @@ import anyio import anyio.to_thread -import pathspec from mcp.server.fastmcp import FastMCP from mcp.types import ToolAnnotations @@ -19,7 +18,7 @@ from diffctx.version import __version__ from .formatting import format_diff_context_as_markdown -from .security import validate_dir_path, validate_repo_path +from .security import validate_repo_path logger = logging.getLogger(__name__) @@ -255,257 +254,20 @@ async def diffctx_context( return _capped_by_max_tokens(content, max_tokens, "lower budget_tokens, narrow diff_ref, or use clipboard=true") -_TREE_MAP_DESCRIPTION = ( - "Get a structured map of a codebase — directory tree with file contents " - "in YAML or Markdown, optimized for LLM comprehension. " - "Respects .gitignore, skips binaries/build artifacts.\n\n" - "PREFER this over reading files one-by-one when you need:\n" - "- Project structure overview\n" - "- Multiple file contents from a subdirectory\n" - "- Full codebase context for analysis\n\n" - "Set clipboard=true to copy to clipboard without flooding context.\n" - "Use no_content=true for structure-only view." + _UNTRUSTED_NOTICE -) - - -async def get_tree_map( - repo_path: str, - subdirectory: str = "", - output_format: str = "yaml", - no_content: bool = False, - max_depth: int | None = None, - max_file_bytes: int = _DEFAULT_MAX_FILE_BYTES, - clipboard: bool = False, - max_tokens: int = _DEFAULT_MAX_TOKENS, -) -> str: - from diffctx.ignore import get_ignore_specs, get_whitelist_spec - from diffctx.tokens import count_tokens - from diffctx.tree import TreeBuildContext, build_tree - from diffctx.writer import tree_to_string - - validated_path = validate_repo_path(repo_path) - target = validated_path / subdirectory if subdirectory else validated_path - if subdirectory and not _is_contained(target, validated_path): - raise ValueError(f"subdirectory escapes repo_path: {subdirectory}") - if not target.is_dir(): - raise ValueError(f"Not a directory: {subdirectory or repo_path}") - - def _build() -> str: - ctx = TreeBuildContext( - base_dir=target, - combined_spec=get_ignore_specs(target, None, False, None), - output_file=None, - max_depth=max_depth, - no_content=no_content, - max_file_bytes=max_file_bytes, - whitelist_spec=get_whitelist_spec(None, target), - ) - tree = {"name": target.name or str(target), "type": "directory", "children": build_tree(target, ctx)} - return tree_to_string(tree, output_format) - - content: str = await _run_with_deadline("get_tree_map", _build) - token_info = count_tokens(content) - - if clipboard: - degraded_notice = await _copy_or_degrade(content) - if degraded_notice is None: - return f"Copied to clipboard ({token_info.count:,} tokens, {token_info.encoding})" - content = degraded_notice + content - token_info = count_tokens(content) - - if token_info.count > max_tokens: - return _over_token_budget_notice( - "get_tree_map", - token_info.count, - max_tokens, - "use subdirectory, no_content=true, or max_depth", - ) - - return f"\n{content}" - - -_FILE_CONTEXT_DESCRIPTION = ( - "Read files by glob pattern, formatted for LLM consumption. " - "Works on ANY directory (no git required).\n\n" - "PREFER this over reading files individually when you need 2+ files. " - "Use clipboard=true to copy to clipboard without flooding context.\n\n" - "Examples:\n" - '- patterns=["src/**/*.py"] — all Python files\n' - '- patterns=["eval/*.py", "tests/conftest.py"] — specific sets\n' - '- patterns=["*.md"] with dry_run=true — preview what matches\n\n' - "Honours .gitignore and .diffctx/ignore: excluded files are never returned " - "and are not reported as truncated, so a glob cannot read what the repo " - "withholds from the other tools." + _UNTRUSTED_NOTICE -) - - -def _is_contained(child: Path, root: Path) -> bool: - try: - return child.resolve().is_relative_to(root.resolve()) - except (OSError, ValueError): - return False - - -def _admissible_match(match: str, root: Path, spec: pathspec.PathSpec[pathspec.Pattern]) -> Path | None: - """The resolved path if this glob hit may be shown, `None` otherwise. - - Resolved rather than as-globbed because containment is established on the - resolved path and `root` is resolved too, so only that form is guaranteed to - be expressible relative to it. The reporters call `relative_to` with no - fallback, and an unresolved match — reachable when a pattern is absolute and - arrives via a symlink — is lexically outside the root even though it points - inside, turning an accepted file into an opaque ValueError. - """ - p = Path(match) - if not p.is_file() or not _is_contained(p, root): - return None - resolved = p.resolve() - try: - rel = resolved.relative_to(root.resolve()).as_posix() - except ValueError: - return None - return None if spec.match_file(rel) else resolved - - -def _collect_matched_files(validated_path: Path, patterns: list[str], max_files: int) -> tuple[list[Path], int]: - """Files matching `patterns`, minus anything the repo declared off-limits. - - The ignore specs are applied for the same reason `get_tree_map` applies - them: `.diffctx/ignore` is a security contract, and this tool accepts - `**/*`. Without the specs the two MCP tools disagreed about the same repo — - a key or an env file that diff mode and the tree map both withhold was - readable through an explicit glob, which makes the contract advisory rather - than a contract. - - Excluded files are dropped silently and NOT counted: `total_matched` drives - the truncation notice, and reporting "3 more files" for files the repo - refuses to expose would leak their existence. - """ - import glob as globmod - - from diffctx.ignore import get_ignore_specs - - spec = get_ignore_specs(validated_path, None, False, None) - - matched: list[Path] = [] - seen: set[Path] = set() - total_matched = 0 - for pattern in patterns: - for match in sorted(globmod.glob(str(validated_path / pattern), recursive=True)): - resolved = _admissible_match(match, validated_path, spec) - if resolved is None or resolved in seen: - continue - seen.add(resolved) - total_matched += 1 - if len(matched) < max_files: - matched.append(resolved) - return matched, total_matched - - -def _truncation_notice(shown: int, total_matched: int, max_files: int) -> str | None: - if total_matched <= shown: - return None - return f"TRUNCATED: showing {shown} of {total_matched} matched files (max_files={max_files}). Narrow patterns or raise max_files to see the rest." - - -def _build_dry_run_report(matched: list[Path], total_matched: int, validated_path: Path, max_files: int) -> str: - total_bytes = sum(p.stat().st_size for p in matched if p.exists()) - lines = [f"Would match {total_matched} files (~{total_bytes:,} bytes for the {len(matched)} shown below):"] - notice = _truncation_notice(len(matched), total_matched, max_files) - if notice: - lines.append(notice) - for p in matched: - rel = p.relative_to(validated_path) - lines.append(f" {rel} ({p.stat().st_size:,}b)") - return "\n".join(lines) - - -def _build_file_content_report( - matched: list[Path], total_matched: int, validated_path: Path, max_file_bytes: int, max_files: int -) -> tuple[str, int, int]: - header = f"# {len(matched)} files matched" - notice = _truncation_notice(len(matched), total_matched, max_files) - if notice: - header += f" ({total_matched} total)\n{notice}" - parts = [header + "\n"] - total_lines = 0 - included_count = 0 - for p in matched: - rel = p.relative_to(validated_path) - try: - size = p.stat().st_size - if size > max_file_bytes: - parts.append(f"## {rel}\n*Skipped: {size:,} bytes exceeds limit*\n") - continue - content = p.read_text(encoding="utf-8", errors="replace") - total_lines += content.count("\n") + 1 - included_count += 1 - suffix = p.suffix.lstrip(".") - parts.append(f"## {rel}\n```{suffix}\n{content}\n```\n") - except OSError as e: - # `{e}` on an OSError carries the absolute filename; the path is - # already stated as `rel` above it, so only the reason is added. - parts.append(f"## {rel}\n*Error: {e.strerror or type(e).__name__}*\n") - return "\n".join(parts), included_count, total_lines - - -async def get_file_context( - repo_path: str, - patterns: list[str], - max_files: int = 50, - max_file_bytes: int = _DEFAULT_MAX_FILE_BYTES, - clipboard: bool = False, - dry_run: bool = False, - max_tokens: int = _DEFAULT_MAX_TOKENS, -) -> str: - validated_path = validate_dir_path(repo_path) - - def _read() -> tuple[str, int, int]: - matched, total_matched = _collect_matched_files(validated_path, patterns, max_files) - if not matched: - return f"No files matched patterns: {patterns}", 0, 0 - if dry_run: - return _build_dry_run_report(matched, total_matched, validated_path, max_files), 0, 0 - return _build_file_content_report(matched, total_matched, validated_path, max_file_bytes, max_files) - - raw_result: tuple[str, int, int] = await _run_with_deadline("get_file_context", _read) - content, n_files, n_lines = raw_result - - if dry_run: - return content - - if clipboard and n_files > 0: - degraded_notice = await _copy_or_degrade(content) - if degraded_notice is None: - return f"Copied {n_files} files ({n_lines:,} lines) to clipboard" - content = degraded_notice + content - - from diffctx.tokens import count_tokens - - token_count = count_tokens(content).count - if token_count > max_tokens: - return _over_token_budget_notice( - "get_file_context", - token_count, - max_tokens, - "tighten patterns, lower max_files, or use dry_run=true first", - ) - - return content - - # Tree-map and glob-read predate `diffctx_context` and are strictly wider than a # diff question needs. Their definitions cost every session that never calls # them, and the host's own file tools already cover reading a known path — so -# they are opt-in. `DIFFCTX_MCP_LEGACY_TOOLS=1` restores the pre-v3 surface for -# anyone whose workflow depends on it. +# they are opt-in and live in `legacy.py`, imported only when enabled. +# `DIFFCTX_MCP_LEGACY_TOOLS=1` restores the pre-v3 surface for anyone whose +# workflow depends on it. def _legacy_tools_enabled() -> bool: return os.environ.get("DIFFCTX_MCP_LEGACY_TOOLS", "").strip().lower() in {"1", "true", "yes", "on"} def register_legacy_tools(server: FastMCP = mcp) -> None: - server.tool(description=_TREE_MAP_DESCRIPTION, annotations=_read_only("Get tree map"))(get_tree_map) - server.tool(description=_FILE_CONTEXT_DESCRIPTION, annotations=_read_only("Get file context"))(get_file_context) + from .legacy import register + + register(server) if _legacy_tools_enabled(): From 889ed24f2c88186750d12c8de2f5dfa69c329f9a Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 22:01:31 +0200 Subject: [PATCH 46/73] refactor: unify harness selection path, split change-set resolve (#225) --- crates/diffctx-native/src/edges/base.rs | 5 + .../src/edges/semantic/ansible.rs | 3 +- .../src/edges/semantic/clojure.rs | 3 +- .../diffctx-native/src/edges/semantic/css.rs | 3 +- .../diffctx-native/src/edges/semantic/dart.rs | 5 +- .../diffctx-native/src/edges/semantic/dbt.rs | 2 +- .../src/edges/semantic/dotnet.rs | 8 +- .../src/edges/semantic/elixir.rs | 3 +- .../src/edges/semantic/erlang.rs | 3 +- .../diffctx-native/src/edges/semantic/go.rs | 3 +- .../src/edges/semantic/graphql.rs | 3 +- .../src/edges/semantic/haskell.rs | 6 +- .../src/edges/semantic/javascript.rs | 6 +- .../src/edges/semantic/julia.rs | 2 +- .../diffctx-native/src/edges/semantic/jvm.rs | 3 +- .../src/edges/semantic/latex.rs | 3 +- .../diffctx-native/src/edges/semantic/lua.rs | 2 +- .../diffctx-native/src/edges/semantic/nim.rs | 3 +- .../diffctx-native/src/edges/semantic/nix.rs | 2 +- .../src/edges/semantic/ocaml.rs | 3 +- .../diffctx-native/src/edges/semantic/perl.rs | 3 +- .../diffctx-native/src/edges/semantic/php.rs | 3 +- .../src/edges/semantic/prisma.rs | 2 +- .../src/edges/semantic/protobuf.rs | 2 +- .../src/edges/semantic/python.rs | 3 +- .../src/edges/semantic/r_lang.rs | 3 +- .../diffctx-native/src/edges/semantic/ruby.rs | 3 +- .../src/edges/semantic/rust_lang.rs | 3 +- .../src/edges/semantic/shell.rs | 3 +- .../diffctx-native/src/edges/semantic/sql.rs | 2 +- .../src/edges/semantic/swift.rs | 2 +- .../src/edges/semantic/terraform.rs | 6 +- .../diffctx-native/src/edges/semantic/zig.rs | 2 +- crates/diffctx-native/src/memory_pipeline.rs | 33 +- crates/diffctx-native/src/pipeline.rs | 291 ++++++++++++------ 35 files changed, 250 insertions(+), 182 deletions(-) diff --git a/crates/diffctx-native/src/edges/base.rs b/crates/diffctx-native/src/edges/base.rs index 94627300e..5de2328c2 100644 --- a/crates/diffctx-native/src/edges/base.rs +++ b/crates/diffctx-native/src/edges/base.rs @@ -438,6 +438,11 @@ pub fn file_ext(path: &Path) -> String { .unwrap_or_default() } +pub fn has_ext(path: &Path, exts: &[&str]) -> bool { + let ext = file_ext(path); + exts.iter().any(|e| *e == ext) +} + #[cfg(test)] mod tests { use super::*; diff --git a/crates/diffctx-native/src/edges/semantic/ansible.rs b/crates/diffctx-native/src/edges/semantic/ansible.rs index 3e76696e4..d507bf339 100644 --- a/crates/diffctx-native/src/edges/semantic/ansible.rs +++ b/crates/diffctx-native/src/edges/semantic/ansible.rs @@ -36,8 +36,7 @@ static VARS_FILES_LIST_RE: Lazy = Lazy::new(|| Regex::new(r#"(?m)^\s*-\s+["']([^"']{1,300}\.ya?ml)["']"#).unwrap()); fn is_ansible_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ANSIBLE_EXTS.contains(ext.as_str()) + ANSIBLE_EXTS.contains(base::file_ext(path).as_str()) } fn get_role_name(path: &Path) -> Option { diff --git a/crates/diffctx-native/src/edges/semantic/clojure.rs b/crates/diffctx-native/src/edges/semantic/clojure.rs index aea07e6dc..5824c2680 100644 --- a/crates/diffctx-native/src/edges/semantic/clojure.rs +++ b/crates/diffctx-native/src/edges/semantic/clojure.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_clojure_file(path: &Path) -> bool { - let ext = base::file_ext(path); - matches!(ext.as_str(), ".clj" | ".cljs" | ".cljc" | ".edn") + base::has_ext(path, &[".clj", ".cljs", ".cljc", ".edn"]) } static NS_RE: Lazy = Lazy::new(|| Regex::new(r"\(ns\s+([\w.\-]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/css.rs b/crates/diffctx-native/src/edges/semantic/css.rs index 5611725f9..b88574cad 100644 --- a/crates/diffctx-native/src/edges/semantic/css.rs +++ b/crates/diffctx-native/src/edges/semantic/css.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; fn is_css_file(path: &Path) -> bool { - let ext = base::file_ext(path); - matches!(ext.as_str(), ".css" | ".scss" | ".less" | ".sass") + base::has_ext(path, &[".css", ".scss", ".less", ".sass"]) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/dart.rs b/crates/diffctx-native/src/edges/semantic/dart.rs index 2b2a47ae7..373f62c63 100644 --- a/crates/diffctx-native/src/edges/semantic/dart.rs +++ b/crates/diffctx-native/src/edges/semantic/dart.rs @@ -12,11 +12,8 @@ use super::super::base::{ self, EdgeBuilder, FragmentIndex, add_edge, discover_files_by_refs, link_by_name, }; -static DART_EXTENSIONS: Lazy> = Lazy::new(|| [".dart"].iter().copied().collect()); - fn is_dart_file(path: &Path) -> bool { - let ext = base::file_ext(path); - DART_EXTENSIONS.contains(ext.as_str()) + base::has_ext(path, &[".dart"]) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/dbt.rs b/crates/diffctx-native/src/edges/semantic/dbt.rs index bba5aeab5..abac87f72 100644 --- a/crates/diffctx-native/src/edges/semantic/dbt.rs +++ b/crates/diffctx-native/src/edges/semantic/dbt.rs @@ -15,7 +15,7 @@ fn is_dbt_file(content: &str) -> bool { } fn is_sql_file(path: &Path) -> bool { - base::file_ext(path) == ".sql" + base::has_ext(path, &[".sql"]) } static REF_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/dotnet.rs b/crates/diffctx-native/src/edges/semantic/dotnet.rs index 8d6ae2813..f89518b92 100644 --- a/crates/diffctx-native/src/edges/semantic/dotnet.rs +++ b/crates/diffctx-native/src/edges/semantic/dotnet.rs @@ -27,17 +27,15 @@ static EXTENDED_DOTNET_EXTENSIONS: Lazy> = Lazy::new(|| { }); fn is_dotnet_file(path: &Path) -> bool { - let ext = base::file_ext(path); - EXTENDED_DOTNET_EXTENSIONS.contains(ext.as_str()) + EXTENDED_DOTNET_EXTENSIONS.contains(base::file_ext(path).as_str()) } fn is_cs_file(path: &Path) -> bool { - base::file_ext(path) == ".cs" + base::has_ext(path, &[".cs"]) } fn is_fs_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".fs" || ext == ".fsi" || ext == ".fsx" + base::has_ext(path, &[".fs", ".fsi", ".fsx"]) } static CS_USING_RE: Lazy = Lazy::new(|| { diff --git a/crates/diffctx-native/src/edges/semantic/elixir.rs b/crates/diffctx-native/src/edges/semantic/elixir.rs index 79e9d70c8..a36aa7fdb 100644 --- a/crates/diffctx-native/src/edges/semantic/elixir.rs +++ b/crates/diffctx-native/src/edges/semantic/elixir.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_elixir_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".ex" || ext == ".exs" + base::has_ext(path, &[".ex", ".exs"]) } static ALIAS_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*alias\s+([\w.]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/erlang.rs b/crates/diffctx-native/src/edges/semantic/erlang.rs index 1e58407a5..97717c35d 100644 --- a/crates/diffctx-native/src/edges/semantic/erlang.rs +++ b/crates/diffctx-native/src/edges/semantic/erlang.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_erlang_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".erl" || ext == ".hrl" + base::has_ext(path, &[".erl", ".hrl"]) } static MODULE_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^-module\((\w+)\)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/go.rs b/crates/diffctx-native/src/edges/semantic/go.rs index 44c228710..352f5e1c7 100644 --- a/crates/diffctx-native/src/edges/semantic/go.rs +++ b/crates/diffctx-native/src/edges/semantic/go.rs @@ -16,8 +16,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids}; fn is_go_file(path: &Path) -> bool { - let ext = base::file_ext(path); - GO_EXTENSIONS.contains(ext.as_str()) + GO_EXTENSIONS.contains(base::file_ext(path).as_str()) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/graphql.rs b/crates/diffctx-native/src/edges/semantic/graphql.rs index 219dd05b8..b3a1bf28c 100644 --- a/crates/diffctx-native/src/edges/semantic/graphql.rs +++ b/crates/diffctx-native/src/edges/semantic/graphql.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_graphql_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".graphql" || ext == ".gql" + base::has_ext(path, &[".graphql", ".gql"]) } static TYPE_DEF_RE: Lazy = Lazy::new(|| { diff --git a/crates/diffctx-native/src/edges/semantic/haskell.rs b/crates/diffctx-native/src/edges/semantic/haskell.rs index da1b38752..898c508ae 100644 --- a/crates/diffctx-native/src/edges/semantic/haskell.rs +++ b/crates/diffctx-native/src/edges/semantic/haskell.rs @@ -12,12 +12,8 @@ use super::super::base::{ self, EdgeBuilder, FragmentIndex, add_edge, discover_files_by_refs, link_by_name, }; -static HASKELL_EXTENSIONS: Lazy> = - Lazy::new(|| [".hs", ".lhs"].iter().copied().collect()); - fn is_haskell_file(path: &Path) -> bool { - let ext = base::file_ext(path); - HASKELL_EXTENSIONS.contains(ext.as_str()) + base::has_ext(path, &[".hs", ".lhs"]) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/javascript.rs b/crates/diffctx-native/src/edges/semantic/javascript.rs index c18e665a0..c51742689 100644 --- a/crates/diffctx-native/src/edges/semantic/javascript.rs +++ b/crates/diffctx-native/src/edges/semantic/javascript.rs @@ -18,13 +18,11 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder}; fn is_js_file(path: &Path) -> bool { - let ext = base::file_ext(path); - JS_TS_EXTENSIONS.contains(ext.as_str()) + JS_TS_EXTENSIONS.contains(base::file_ext(path).as_str()) } fn is_ts_file(path: &Path) -> bool { - let ext = base::file_ext(path); - TYPESCRIPT_EXTENSIONS.contains(ext.as_str()) + TYPESCRIPT_EXTENSIONS.contains(base::file_ext(path).as_str()) } static IMPORT_SOURCE_RE: Lazy = Lazy::new(|| { diff --git a/crates/diffctx-native/src/edges/semantic/julia.rs b/crates/diffctx-native/src/edges/semantic/julia.rs index 3b9e15431..bd8af5efe 100644 --- a/crates/diffctx-native/src/edges/semantic/julia.rs +++ b/crates/diffctx-native/src/edges/semantic/julia.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_julia_file(path: &Path) -> bool { - base::file_ext(path) == ".jl" + base::has_ext(path, &[".jl"]) } static USING_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*using\s+([\w.,\s]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/jvm.rs b/crates/diffctx-native/src/edges/semantic/jvm.rs index c201c547c..8e893b0e0 100644 --- a/crates/diffctx-native/src/edges/semantic/jvm.rs +++ b/crates/diffctx-native/src/edges/semantic/jvm.rs @@ -20,8 +20,7 @@ use super::super::base::{self, EdgeBuilder, add_edge}; const MAX_FILES_PER_NAME: usize = 8; fn is_jvm_file(path: &Path) -> bool { - let ext = base::file_ext(path); - JVM_EXTENSIONS.contains(ext.as_str()) + JVM_EXTENSIONS.contains(base::file_ext(path).as_str()) } fn is_java(path: &Path) -> bool { diff --git a/crates/diffctx-native/src/edges/semantic/latex.rs b/crates/diffctx-native/src/edges/semantic/latex.rs index 95cb95cb9..88b3d03ff 100644 --- a/crates/diffctx-native/src/edges/semantic/latex.rs +++ b/crates/diffctx-native/src/edges/semantic/latex.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; fn is_latex_file(path: &Path) -> bool { - let ext = base::file_ext(path); - matches!(ext.as_str(), ".tex" | ".sty" | ".cls" | ".bib") + base::has_ext(path, &[".tex", ".sty", ".cls", ".bib"]) } static INPUT_RE: Lazy = Lazy::new(|| Regex::new(r"\\(?:input|include)\{([^}]+)\}").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/lua.rs b/crates/diffctx-native/src/edges/semantic/lua.rs index 9bd9254b2..c824a7a14 100644 --- a/crates/diffctx-native/src/edges/semantic/lua.rs +++ b/crates/diffctx-native/src/edges/semantic/lua.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_lua_file(path: &Path) -> bool { - base::file_ext(path) == ".lua" + base::has_ext(path, &[".lua"]) } static REQUIRE_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/nim.rs b/crates/diffctx-native/src/edges/semantic/nim.rs index 0f1a12ea7..c0e0f529b 100644 --- a/crates/diffctx-native/src/edges/semantic/nim.rs +++ b/crates/diffctx-native/src/edges/semantic/nim.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_nim_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".nim" || ext == ".nims" + base::has_ext(path, &[".nim", ".nims"]) } static IMPORT_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*import\s+([\w/,\s]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/nix.rs b/crates/diffctx-native/src/edges/semantic/nix.rs index c4b92d846..0d68e1f8a 100644 --- a/crates/diffctx-native/src/edges/semantic/nix.rs +++ b/crates/diffctx-native/src/edges/semantic/nix.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; fn is_nix_file(path: &Path) -> bool { - base::file_ext(path) == ".nix" + base::has_ext(path, &[".nix"]) } static IMPORT_RE: Lazy = Lazy::new(|| Regex::new(r"import\s+([\./][\w./-]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/ocaml.rs b/crates/diffctx-native/src/edges/semantic/ocaml.rs index 893b38e91..f52318a85 100644 --- a/crates/diffctx-native/src/edges/semantic/ocaml.rs +++ b/crates/diffctx-native/src/edges/semantic/ocaml.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_ocaml_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".ml" || ext == ".mli" + base::has_ext(path, &[".ml", ".mli"]) } static OPEN_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*open\s+([A-Z]\w*)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/perl.rs b/crates/diffctx-native/src/edges/semantic/perl.rs index 7c0e93586..484132589 100644 --- a/crates/diffctx-native/src/edges/semantic/perl.rs +++ b/crates/diffctx-native/src/edges/semantic/perl.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_perl_file(path: &Path) -> bool { - let ext = base::file_ext(path); - ext == ".pl" || ext == ".pm" + base::has_ext(path, &[".pl", ".pm"]) } static USE_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*use\s+([\w:]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/php.rs b/crates/diffctx-native/src/edges/semantic/php.rs index 462e38c74..410569d36 100644 --- a/crates/diffctx-native/src/edges/semantic/php.rs +++ b/crates/diffctx-native/src/edges/semantic/php.rs @@ -12,8 +12,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_php_file(path: &Path) -> bool { - let ext = base::file_ext(path); - PHP_EXTENSIONS.contains(ext.as_str()) + PHP_EXTENSIONS.contains(base::file_ext(path).as_str()) } static USE_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*use\s+([\w\\]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/prisma.rs b/crates/diffctx-native/src/edges/semantic/prisma.rs index 776df7648..43c707bda 100644 --- a/crates/diffctx-native/src/edges/semantic/prisma.rs +++ b/crates/diffctx-native/src/edges/semantic/prisma.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_prisma_file(path: &Path) -> bool { - base::file_ext(path) == ".prisma" + base::has_ext(path, &[".prisma"]) } fn is_prisma_consumer(path: &Path) -> bool { diff --git a/crates/diffctx-native/src/edges/semantic/protobuf.rs b/crates/diffctx-native/src/edges/semantic/protobuf.rs index 335071714..844104ece 100644 --- a/crates/diffctx-native/src/edges/semantic/protobuf.rs +++ b/crates/diffctx-native/src/edges/semantic/protobuf.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_proto_file(path: &Path) -> bool { - base::file_ext(path) == ".proto" + base::has_ext(path, &[".proto"]) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/python.rs b/crates/diffctx-native/src/edges/semantic/python.rs index 7a8298bb8..7c2976715 100644 --- a/crates/diffctx-native/src/edges/semantic/python.rs +++ b/crates/diffctx-native/src/edges/semantic/python.rs @@ -18,8 +18,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, path_to_module}; fn is_python_file(path: &Path) -> bool { - let ext = base::file_ext(path); - PYTHON_EXTENSIONS.contains(ext.as_str()) + PYTHON_EXTENSIONS.contains(base::file_ext(path).as_str()) } static IMPORT_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*import\s+([\w.]+)").unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/r_lang.rs b/crates/diffctx-native/src/edges/semantic/r_lang.rs index cf7bafc63..185729fe4 100644 --- a/crates/diffctx-native/src/edges/semantic/r_lang.rs +++ b/crates/diffctx-native/src/edges/semantic/r_lang.rs @@ -11,8 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_r_file(path: &Path) -> bool { - let ext = base::file_ext(path); - matches!(ext.as_str(), ".r" | ".rmd") + base::has_ext(path, &[".r", ".rmd"]) } static SOURCE_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/ruby.rs b/crates/diffctx-native/src/edges/semantic/ruby.rs index e6f8a9483..d61f958a2 100644 --- a/crates/diffctx-native/src/edges/semantic/ruby.rs +++ b/crates/diffctx-native/src/edges/semantic/ruby.rs @@ -12,8 +12,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_ruby_file(path: &Path) -> bool { - let ext = base::file_ext(path); - RUBY_EXTENSIONS.contains(ext.as_str()) + RUBY_EXTENSIONS.contains(base::file_ext(path).as_str()) } static REQUIRE_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/rust_lang.rs b/crates/diffctx-native/src/edges/semantic/rust_lang.rs index 1ae2a31d2..14b0c0fbe 100644 --- a/crates/diffctx-native/src/edges/semantic/rust_lang.rs +++ b/crates/diffctx-native/src/edges/semantic/rust_lang.rs @@ -16,8 +16,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids}; fn is_rust_file(path: &Path) -> bool { - let ext = base::file_ext(path); - RUST_EXTENSIONS.contains(ext.as_str()) + RUST_EXTENSIONS.contains(base::file_ext(path).as_str()) } static USE_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/shell.rs b/crates/diffctx-native/src/edges/semantic/shell.rs index d01693431..ddd1f5521 100644 --- a/crates/diffctx-native/src/edges/semantic/shell.rs +++ b/crates/diffctx-native/src/edges/semantic/shell.rs @@ -12,8 +12,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, FragmentIndex, discover_files_by_refs, link_by_name}; fn is_shell_file(path: &Path) -> bool { - let ext = base::file_ext(path); - SHELL_EXTENSIONS.contains(ext.as_str()) + SHELL_EXTENSIONS.contains(base::file_ext(path).as_str()) } static SOURCE_RE: Lazy = diff --git a/crates/diffctx-native/src/edges/semantic/sql.rs b/crates/diffctx-native/src/edges/semantic/sql.rs index 8478437e9..0d6dc4a79 100644 --- a/crates/diffctx-native/src/edges/semantic/sql.rs +++ b/crates/diffctx-native/src/edges/semantic/sql.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_sql_file(path: &Path) -> bool { - base::file_ext(path) == ".sql" + base::has_ext(path, &[".sql"]) } static CREATE_RE: Lazy = Lazy::new(|| { diff --git a/crates/diffctx-native/src/edges/semantic/swift.rs b/crates/diffctx-native/src/edges/semantic/swift.rs index 6067bcdc7..39a1dfa50 100644 --- a/crates/diffctx-native/src/edges/semantic/swift.rs +++ b/crates/diffctx-native/src/edges/semantic/swift.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_swift_file(path: &Path) -> bool { - base::file_ext(path) == ".swift" + base::has_ext(path, &[".swift"]) } static IMPORT_RE: Lazy = Lazy::new(|| { diff --git a/crates/diffctx-native/src/edges/semantic/terraform.rs b/crates/diffctx-native/src/edges/semantic/terraform.rs index b06f3d452..10a1d8409 100644 --- a/crates/diffctx-native/src/edges/semantic/terraform.rs +++ b/crates/diffctx-native/src/edges/semantic/terraform.rs @@ -10,12 +10,8 @@ use crate::types::{Fragment, FragmentId}; use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids}; -static TF_EXTENSIONS: Lazy> = - Lazy::new(|| [".tf", ".tfvars", ".hcl"].iter().copied().collect()); - fn is_terraform_file(path: &Path) -> bool { - let ext = base::file_ext(path); - TF_EXTENSIONS.contains(ext.as_str()) + base::has_ext(path, &[".tf", ".tfvars", ".hcl"]) } static VARIABLE_RE: Lazy = Lazy::new(|| Regex::new(r#"(?m)^variable\s+"([^"]+)""#).unwrap()); diff --git a/crates/diffctx-native/src/edges/semantic/zig.rs b/crates/diffctx-native/src/edges/semantic/zig.rs index 815c64542..4e659c8f3 100644 --- a/crates/diffctx-native/src/edges/semantic/zig.rs +++ b/crates/diffctx-native/src/edges/semantic/zig.rs @@ -11,7 +11,7 @@ use super::super::EdgeDict; use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; fn is_zig_file(path: &Path) -> bool { - base::file_ext(path) == ".zig" + base::has_ext(path, &[".zig"]) } static IMPORT_RE: Lazy = diff --git a/crates/diffctx-native/src/memory_pipeline.rs b/crates/diffctx-native/src/memory_pipeline.rs index 4d5cf1de1..f37e48734 100644 --- a/crates/diffctx-native/src/memory_pipeline.rs +++ b/crates/diffctx-native/src/memory_pipeline.rs @@ -133,38 +133,15 @@ pub fn build_diff_context_in_memory( let needs = crate::utility::needs::needs_from_diff(&all_fragments, &core_ids, &diff_text); - let file_importance = - crate::utility::compute_file_importance(&scoring_result.filtered_fragments); - let selection = crate::select::lazy_greedy_select( - scoring_result.filtered_fragments.clone(), + let (mut selected, _, _) = crate::pipeline::select_and_postpass( + &scoring_result, + &all_fragments, &core_ids, - &scoring_result.rel_scores, &needs, + &core_excerpts, + config.objective, effective_budget, tau, - Some(&file_importance), - Some(&core_excerpts), - scoring_result.admissible_files.as_ref(), - scoring_result.declared_admissible_files.as_ref(), - ); - - let mut selected = selection.selected; - - crate::postpass::coherence_post_pass( - &mut selected, - &scoring_result.filtered_fragments, - &scoring_result.graph, - effective_budget, - scoring_result.admissible_files.as_ref(), - ); - - crate::postpass::rescue_nontrivial_context( - &mut selected, - &all_fragments, - &scoring_result.rel_scores, - &core_ids, - effective_budget, - scoring_result.admissible_files.as_ref(), ); let used: u32 = selected.iter().map(|f| f.token_count).sum(); diff --git a/crates/diffctx-native/src/pipeline.rs b/crates/diffctx-native/src/pipeline.rs index 79bccc0a7..7fe500695 100644 --- a/crates/diffctx-native/src/pipeline.rs +++ b/crates/diffctx-native/src/pipeline.rs @@ -207,35 +207,49 @@ fn count_text_lines(path: &Path) -> Option { /// Heavy phase: clone/parse/fragment/discover/tokenize/score. Independent /// of `tau`/`core_budget_fraction`. Designed to be computed ONCE per /// instance and reused across an arbitrary number of selection cells. -pub fn compute_scored_state( - root_dir: &Path, - diff_range: Option<&str>, - alpha: f64, - scoring_mode: ScoringMode, - timeout: u64, -) -> Result { - let t_entry = Instant::now(); - git::set_git_timeout(timeout); - let deadline = crate::deadline::Deadline::from_timeout_secs(timeout); - let root_dir = resolve_repo_root(root_dir)?; - if alpha <= 0.0 || alpha >= 1.0 { - anyhow::bail!("alpha must be in (0, 1), got {}", alpha); - } +/// Everything `compute_scored_state` decides BEFORE any parsing: the hunk +/// set after the disclosure policy ran, the changed-file list after every +/// exclusion, and the display/count lists those policies owe the output. +/// Extracted so the four policy stances (#85, #188, #214: gitignore = list +/// paths, `.diffctx/ignore` = count only, secrets = count only, lockfiles = +/// paths sans churn) are readable as one unit. +struct ChangeSetData { + hunks: Vec, + diff_text: String, + changed_files: Vec, + deleted_display: Vec, + renamed_display: Vec<(String, String)>, + lockfile_display: Vec, + ignored_display: Vec, + policy_excluded: usize, + preferred_revs: Vec, + commit_message: Option, + head_rev: Option, + pre_phase_ms: f64, +} - let resolved = git::resolve_duration_range(&root_dir, diff_range)?; - let diff_range = resolved.range.as_deref(); +enum ChangeSet { + /// Nothing analyzable remains; carries exactly what the empty output + /// still owes the reader (each early-exit discloses what IT withheld). + Empty { + lockfile_changes: Vec, + ignored_changes: Vec, + policy_excluded_count: usize, + }, + Ready(Box), +} - let mut hunks = git::parse_diff(&root_dir, diff_range)?; +fn resolve_change_set( + root_dir: &Path, + diff_range: Option<&str>, + is_working_tree_diff: bool, + t_entry: Instant, +) -> Result { + let mut hunks = git::parse_diff(root_dir, diff_range)?; - // Untracked files only matter when the diff includes the live working - // tree. `None` and the literal "HEAD" both mean that (the CLI resolves - // bare `--diff` to the string "HEAD" before reaching here) - a historical - // range like `HEAD~5..HEAD~3` does not include working-tree state. A - // duration window ends at "now", so it includes it too. - let is_working_tree_diff = resolved.from_duration || matches!(diff_range, None | Some("HEAD")); let mut untracked_files: Vec = Vec::new(); if is_working_tree_diff { - if let Ok(files) = git::get_untracked_files(&root_dir) { + if let Ok(files) = git::get_untracked_files(root_dir) { for f in &files { if let Some(line_count) = count_text_lines(f) { if line_count > 0 { @@ -262,7 +276,7 @@ pub fn compute_scored_state( hunks.retain(|h| { let p = Path::new(&*h.path); if is_secret_path(p) { - if let Some(rel) = rel_path_string(&root_dir, p) { + if let Some(rel) = rel_path_string(root_dir, p) { secret_excluded_paths.insert(rel); } false @@ -272,12 +286,14 @@ pub fn compute_scored_state( }); if hunks.is_empty() { - let mut state = empty_scored_state_with_changes(root_dir, diff_range); - state.policy_excluded_count = secret_excluded_paths.len(); - return Ok(state); + return Ok(ChangeSet::Empty { + lockfile_changes: Vec::new(), + ignored_changes: Vec::new(), + policy_excluded_count: secret_excluded_paths.len(), + }); } - let ignored_rel_paths = resolve_ignored_paths(&root_dir, &hunks); + let ignored_rel_paths = resolve_ignored_paths(root_dir, &hunks); // gitignore-excluded changed files are listed by path; `.diffctx/ignore` // is a declared confidentiality policy, so its exclusions surface as a // count only — re-publishing the very paths the user asked to withhold @@ -289,7 +305,7 @@ pub fn compute_scored_state( let mut policy_excluded_paths: FxHashSet = FxHashSet::default(); for h in &hunks { let p = Path::new(&*h.path); - let Some(rel) = rel_path_string(&root_dir, p) else { + let Some(rel) = rel_path_string(root_dir, p) else { continue; }; match ignored_rel_paths.get(&rel) { @@ -303,52 +319,56 @@ pub fn compute_scored_state( let policy_excluded = policy_excluded_paths.len() + secret_excluded_paths.len(); ignored_display.sort(); ignored_display.dedup(); - hunks.retain(|h| !is_ignored_path(&root_dir, Path::new(&*h.path), &ignored_rel_paths)); + hunks.retain(|h| !is_ignored_path(root_dir, Path::new(&*h.path), &ignored_rel_paths)); let mut lockfile_display: Vec = hunks .iter() .filter(|h| is_lockfile_path(Path::new(&*h.path))) - .filter_map(|h| rel_path_string(&root_dir, Path::new(&*h.path))) + .filter_map(|h| rel_path_string(root_dir, Path::new(&*h.path))) .collect(); lockfile_display.sort(); lockfile_display.dedup(); hunks.retain(|h| !is_lockfile_path(Path::new(&*h.path))); if hunks.is_empty() { - let mut state = empty_scored_state_with_changes(root_dir, diff_range); - state.lockfile_changes = lockfile_display; - state.ignored_changes = ignored_display; - state.policy_excluded_count = policy_excluded; - return Ok(state); + return Ok(ChangeSet::Empty { + lockfile_changes: lockfile_display, + ignored_changes: ignored_display, + policy_excluded_count: policy_excluded, + }); } - let diff_text = git::get_diff_text(&root_dir, diff_range)?; + let diff_text = git::get_diff_text(root_dir, diff_range)?; - let mut changed_files = git::get_changed_files(&root_dir, diff_range)?; + let mut changed_files = git::get_changed_files(root_dir, diff_range)?; changed_files.extend(untracked_files); if changed_files.is_empty() { - return Ok(empty_scored_state_with_changes(root_dir, diff_range)); + return Ok(ChangeSet::Empty { + lockfile_changes: Vec::new(), + ignored_changes: Vec::new(), + policy_excluded_count: 0, + }); } - let deleted_files = git::get_deleted_files(&root_dir, diff_range)?; + let deleted_files = git::get_deleted_files(root_dir, diff_range)?; // Rename source paths are gone from disk and cannot be fragmented; the // destinations exist on HEAD and stay candidates via the changed set below, // so seeds and discovery still find them. - let renamed_old = git::get_renamed_paths(&root_dir, diff_range)?; + let renamed_old = git::get_renamed_paths(root_dir, diff_range)?; // Display lists for the output header: deletions and renames produce no // fragments, but silently omitting them misrepresents the diff (a // deletion-only commit used to render as a bare two-line skeleton). let mut deleted_display: Vec = deleted_files .iter() .map(|p| { - p.strip_prefix(&root_dir) + p.strip_prefix(root_dir) .unwrap_or(p) .to_string_lossy() .replace('\\', "/") }) .collect(); deleted_display.sort(); - let renamed_display = git::get_rename_pairs(&root_dir, diff_range).unwrap_or_default(); + let renamed_display = git::get_rename_pairs(root_dir, diff_range).unwrap_or_default(); let excluded: FxHashSet = deleted_files.into_iter().chain(renamed_old).collect(); let changed_files: Vec = changed_files .into_iter() @@ -357,7 +377,7 @@ pub fn compute_scored_state( !excluded.contains(&resolved) && !is_secret_path(f) && !is_lockfile_path(f) - && !is_ignored_path(&root_dir, f, &ignored_rel_paths) + && !is_ignored_path(root_dir, f, &ignored_rel_paths) }) .collect(); @@ -367,7 +387,7 @@ pub fn compute_scored_state( let preferred_revs = build_preferred_revs(base_rev.as_deref(), head_rev.as_deref()); let commit_message = head_rev .as_deref() - .and_then(|h| git::get_commit_message(&root_dir, h).ok()) + .and_then(|h| git::get_commit_message(root_dir, h).ok()) .and_then(|m| { m.lines() .map(str::trim) @@ -375,8 +395,77 @@ pub fn compute_scored_state( .map(str::to_string) }); + let pre_phase_ms = t_entry.elapsed().as_secs_f64() * 1000.0; + Ok(ChangeSet::Ready(Box::new(ChangeSetData { + hunks, + diff_text, + changed_files, + deleted_display, + renamed_display, + lockfile_display, + ignored_display, + policy_excluded, + preferred_revs, + commit_message, + head_rev, + pre_phase_ms, + }))) +} + +pub fn compute_scored_state( + root_dir: &Path, + diff_range: Option<&str>, + alpha: f64, + scoring_mode: ScoringMode, + timeout: u64, +) -> Result { + let t_entry = Instant::now(); + git::set_git_timeout(timeout); + let deadline = crate::deadline::Deadline::from_timeout_secs(timeout); + let root_dir = resolve_repo_root(root_dir)?; + if alpha <= 0.0 || alpha >= 1.0 { + anyhow::bail!("alpha must be in (0, 1), got {}", alpha); + } + + let resolved = git::resolve_duration_range(&root_dir, diff_range)?; + let diff_range = resolved.range.as_deref(); + // Untracked files only matter when the diff includes the live working + // tree. `None` and the literal "HEAD" both mean that (the CLI resolves + // bare `--diff` to the string "HEAD" before reaching here) - a historical + // range like `HEAD~5..HEAD~3` does not include working-tree state. A + // duration window ends at "now", so it includes it too. + let is_working_tree_diff = resolved.from_duration || matches!(diff_range, None | Some("HEAD")); + + let data = match resolve_change_set(&root_dir, diff_range, is_working_tree_diff, t_entry)? { + ChangeSet::Empty { + lockfile_changes, + ignored_changes, + policy_excluded_count, + } => { + let mut state = empty_scored_state_with_changes(root_dir, diff_range); + state.lockfile_changes = lockfile_changes; + state.ignored_changes = ignored_changes; + state.policy_excluded_count = policy_excluded_count; + return Ok(state); + } + ChangeSet::Ready(data) => data, + }; + let ChangeSetData { + hunks, + diff_text, + changed_files, + deleted_display, + renamed_display, + lockfile_display, + ignored_display, + policy_excluded, + preferred_revs, + commit_message, + head_rev, + pre_phase_ms, + } = *data; + let t0 = Instant::now(); - let pre_phase_ms = t0.duration_since(t_entry).as_secs_f64() * 1000.0; let mut seen_frag_ids: FxHashSet = FxHashSet::default(); let mut batch_reader = CatFileBatch::new(&root_dir)?; @@ -557,58 +646,54 @@ pub struct SelectionOutcome { pub select_ms: f64, } -/// Selection + the 3 post-passes, shared verbatim by the pack renderer -/// (`select_with_params`) and the locate renderer — extracting it is pure -/// code motion so both modes select identically by construction. -pub fn run_selection( - state: &ScoredState, - budget_tokens: Option, +/// Selection + the two admission-gated post-passes — the git-free part of +/// the chain, shared by the product pipeline (`run_selection`) and the +/// in-memory corpus harness so the harness scores the shipped system by +/// construction. It used to be re-spelled by hand in `memory_pipeline.rs`, +/// which is how the harness once measured a system nobody runs (#149). +#[allow(clippy::too_many_arguments)] +pub fn select_and_postpass( + scoring_result: &ScoringResult, + all_fragments: &[Fragment], + core_ids: &FxHashSet, + needs: &[InformationNeed], + core_excerpts: &FxHashMap, + objective: crate::mode::ObjectiveMode, + effective_budget: u32, tau: f64, -) -> SelectionOutcome { - let t_start = Instant::now(); - let effective_budget = budget_tokens.unwrap_or_else(|| { - let core_tokens: u32 = state - .all_fragments - .iter() - .filter(|f| state.core_ids.contains(&f.id)) - .map(|f| f.token_count.min(BUDGET.core_token_cap_per_fragment)) - .sum(); - let auto = (core_tokens as f64 * BUDGET.auto_multiplier) as u32; - auto.clamp(BUDGET.auto_min, BUDGET.auto_max) - }); - - let selection_result = match state.config.objective { +) -> (Vec, usize, f64) { + let selection_result = match objective { crate::mode::ObjectiveMode::BoltzmannModular => { let beta = crate::utility::calibrate_beta( - &state.scoring_result.filtered_fragments, - &state.core_ids, - &state.scoring_result.rel_scores, + &scoring_result.filtered_fragments, + core_ids, + &scoring_result.rel_scores, effective_budget, crate::config::selection::boltzmann().calibration_tolerance, ); tracing::debug!("diffctx: boltzmann beta calibrated to {:.6e}", beta); crate::utility::boltzmann_select( - &state.scoring_result.filtered_fragments, - &state.core_ids, - &state.scoring_result.rel_scores, + &scoring_result.filtered_fragments, + core_ids, + &scoring_result.rel_scores, effective_budget, beta, ) } crate::mode::ObjectiveMode::Submodular => { let file_importance = - crate::utility::compute_file_importance(&state.scoring_result.filtered_fragments); + crate::utility::compute_file_importance(&scoring_result.filtered_fragments); crate::select::lazy_greedy_select( - state.scoring_result.filtered_fragments.clone(), - &state.core_ids, - &state.scoring_result.rel_scores, - &state.needs, + scoring_result.filtered_fragments.clone(), + core_ids, + &scoring_result.rel_scores, + needs, effective_budget, tau, Some(&file_importance), - Some(&state.core_excerpts), - state.scoring_result.admissible_files.as_ref(), - state.scoring_result.declared_admissible_files.as_ref(), + Some(core_excerpts), + scoring_result.admissible_files.as_ref(), + scoring_result.declared_admissible_files.as_ref(), ) } }; @@ -619,19 +704,53 @@ pub fn run_selection( postpass::coherence_post_pass( &mut selected, - &state.scoring_result.filtered_fragments, - &state.scoring_result.graph, + &scoring_result.filtered_fragments, + &scoring_result.graph, effective_budget, - state.scoring_result.admissible_files.as_ref(), + scoring_result.admissible_files.as_ref(), ); postpass::rescue_nontrivial_context( &mut selected, + all_fragments, + &scoring_result.rel_scores, + core_ids, + effective_budget, + scoring_result.admissible_files.as_ref(), + ); + + (selected, selection_iters, stopping_certificate) +} + +/// Selection + the 3 post-passes, shared verbatim by the pack renderer +/// (`select_with_params`) and the locate renderer — extracting it is pure +/// code motion so both modes select identically by construction. +pub fn run_selection( + state: &ScoredState, + budget_tokens: Option, + tau: f64, +) -> SelectionOutcome { + let t_start = Instant::now(); + let effective_budget = budget_tokens.unwrap_or_else(|| { + let core_tokens: u32 = state + .all_fragments + .iter() + .filter(|f| state.core_ids.contains(&f.id)) + .map(|f| f.token_count.min(BUDGET.core_token_cap_per_fragment)) + .sum(); + let auto = (core_tokens as f64 * BUDGET.auto_multiplier) as u32; + auto.clamp(BUDGET.auto_min, BUDGET.auto_max) + }); + + let (mut selected, selection_iters, stopping_certificate) = select_and_postpass( + &state.scoring_result, &state.all_fragments, - &state.scoring_result.rel_scores, &state.core_ids, + &state.needs, + &state.core_excerpts, + state.config.objective, effective_budget, - state.scoring_result.admissible_files.as_ref(), + tau, ); let used: u32 = selected.iter().map(|f| f.token_count).sum(); From 496aca520987c00f87cb40853f67521798fc407a Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 22:23:27 +0200 Subject: [PATCH 47/73] test: temp_project fixture returns instead of yield (S9100) --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index a96e98c86..2427ee014 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -43,7 +43,7 @@ def temp_project(tmp_path): config_dir = temp_dir / ".diffctx" config_dir.mkdir() (config_dir / "ignore").write_text("output/\n.git/\n", encoding="utf-8") - yield temp_dir + return temp_dir @pytest.fixture From d45631cc51f85896c839a8c23d1c32cc19be6bc5 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 18 Aug 2026 22:36:04 +0200 Subject: [PATCH 48/73] QA.md: self-eat breadth post-#211 gates (0.4x, was 4-5x) --- QA.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/QA.md b/QA.md index 672344582..9e7fae8c8 100644 --- a/QA.md +++ b/QA.md @@ -135,13 +135,12 @@ a deployed/web surface ships; re-derive then, don't trust this table. `apply_fragment` recording the *excerpt's* identifiers rather than the whole core's, so needs the trimmed body used to cover read as uncovered and the greedy goes looking for them elsewhere. -- Post-admission-flip self-eat still emits ~4-5x the changed-file count - as context (measured 2026-08-07: 13 visible changed files -> 69 output - files): this repo's changed modules (`config/*`, `edges/base`) are - imported nearly everywhere, so the naming-reachable set is legitimately - wide. Designed behavior, not the #65 proximity class — don't re-file - Forgejo #2 from a self-eat read; the open question there is context - share, not admission. +- Self-eat context breadth collapsed after the #211 post-pass/singleton + gates (measured 2026-08-19: 61 visible changed files -> 85 output files, + i.e. ~0.4 context files per changed file; the 2026-08-07 pre-gate figure + was ~4-5x). A wide-context self-eat read is no longer designed behavior — + treat a return to multi-x breadth as a regression of the #211 gates, not + as the old known shape. - `env_overrides.rs` carries name-consistency tests: any new `read_env_*("DIFFCTX_*")` must appear in the `parameter-strategy.md` Tier-3 table (or the `TIER1_EXTRAS_READ_BUT_NOT_TABLED` allowlist) From ae1386cafde63a752856e5de08152292adc27706 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Thu, 20 Aug 2026 22:53:06 +0200 Subject: [PATCH 49/73] refactor: pub(crate) sweep unlocks dead-code lint; kill drifted copies --- .pre-commit-config.yaml | 8 +- .secrets.baseline | 10418 +--------------- CITATION.cff | 2 +- CLAUDE.md | 30 +- README.md | 32 +- crates/diffctx-native/Cargo.toml | 4 + crates/diffctx-native/src/analytics.rs | 8 +- crates/diffctx-native/src/edges/base.rs | 27 +- .../src/edges/history/cochange.rs | 4 - crates/diffctx-native/src/edges/mod.rs | 1 - .../src/edges/similarity/lexical.rs | 4 - crates/diffctx-native/src/graph.rs | 16 +- crates/diffctx-native/src/lib.rs | 92 +- crates/diffctx-native/src/project_graph.rs | 76 +- crates/diffctx-native/src/pybridge.rs | 7 +- crates/diffctx-native/src/select.rs | 15 +- crates/diffctx-native/src/utility/mod.rs | 3 +- .../src/utility/{scoring.rs => objective.rs} | 0 docs/engineering/leverage.md | 9 +- src/diffctx/_diffctx.pyi | 14 +- src/diffctx/_native/pipeline.py | 4 +- src/diffctx/_native/project_graph.py | 17 +- src/diffctx/cli.py | 14 +- src/diffctx/mcp/README.md | 127 - src/diffctx/mcp/formatting.py | 9 - src/diffctx/mcp/server.py | 16 +- tests/test_version_consistency.py | 5 + uv.lock | 2758 ---- 28 files changed, 198 insertions(+), 13522 deletions(-) rename crates/diffctx-native/src/utility/{scoring.rs => objective.rs} (100%) delete mode 100644 src/diffctx/mcp/README.md delete mode 100644 src/diffctx/mcp/formatting.py delete mode 100644 uv.lock diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6ca7889f5..bac73d00c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -135,8 +135,12 @@ repos: - id: detect-secrets args: ["--baseline", ".secrets.baseline"] # packaging/ and bucket/ hold generated release manifests whose SHA-256 - # digests of public artifacts read as high-entropy strings. - exclude: ^(packaging|bucket)/ + # digests of public artifacts read as high-entropy strings; datasets/ + # is a read-only benchmark corpus of third-party diffs whose commit + # hashes did the same — 1354 of the baseline's 1360 entries came from + # there, so approving a real secret-scan change meant scrolling past + # 10k lines of noise. + exclude: ^(packaging|bucket|datasets)/ - repo: https://github.com/gitleaks/gitleaks rev: v8.29.1 diff --git a/.secrets.baseline b/.secrets.baseline index c26c8a459..42f4f63d1 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -128,6 +128,7 @@ { "path": "detect_secrets.filters.regex.should_exclude_file", "pattern": [ + "^(packaging|bucket|datasets)/", "tests/cases/diff/.*\\.yaml$" ] } @@ -139,10422 +140,9 @@ "filename": ".pre-commit-config.yaml", "hashed_secret": "861d9d607b1513c2096a6c1495043e2cc31a8f41", "is_verified": false, - "line_number": 167 - } - ], - "bucket/diffctx.json": [ - { - "type": "Hex High Entropy String", - "filename": "bucket/diffctx.json", - "hashed_secret": "f98d7a17c878d85896178e785c520fe510213e1b", - "is_verified": false, - "line_number": 9 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__1ce2228/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__1ce2228/annotation.yaml", - "hashed_secret": "4b30b266ca152ec7a8c751a2f6d9476e6ca93005", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__1ce2228/annotation.yaml", - "hashed_secret": "72fa8d50ef7acdc9b5d5a917f9675249e02a3f39", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__223fe49/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__223fe49/annotation.yaml", - "hashed_secret": "6357d7a718b2fb50e17cc07043ea361517a3a328", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__223fe49/annotation.yaml", - "hashed_secret": "93adbc0da3b6e5004271de98203d24e47a9302c6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__2a0f0e0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__2a0f0e0/annotation.yaml", - "hashed_secret": "3d89985766ae0b863239ef8fc026713259d14be8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__2a0f0e0/annotation.yaml", - "hashed_secret": "d4af2fe4a7a7961168efad766fad64f71e8e6fca", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__32ee668/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__32ee668/annotation.yaml", - "hashed_secret": "806867c287751ab7877177146c1140f791854a13", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__32ee668/annotation.yaml", - "hashed_secret": "f86fd43a797e664e64114645dcfec5cea72138ea", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__33557cf/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__33557cf/annotation.yaml", - "hashed_secret": "47bb4cf290c9d3e68ef36cd92bc41a8cc77da3b2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__33557cf/annotation.yaml", - "hashed_secret": "75e9311744bd59feba564beb0077aae3095710c5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__43b81a9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__43b81a9/annotation.yaml", - "hashed_secret": "d137c70d1cc015ea326e7e2ceed573e1bd17a595", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__43b81a9/annotation.yaml", - "hashed_secret": "f7c5d58dba51b9884a93fb4c53979030fac8346a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__4a634b9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__4a634b9/annotation.yaml", - "hashed_secret": "44f10d7d95091b7eeb79504a63c4f2a532a714d0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__4a634b9/annotation.yaml", - "hashed_secret": "c5d6f711f439daf8e823970de477c48586edcd89", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__52ea667/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__52ea667/annotation.yaml", - "hashed_secret": "a462f2d7f80964949df5d361538c17f9806390a6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__52ea667/annotation.yaml", - "hashed_secret": "1bb128491816c73cf8b9ad07ade71f2623f89f2b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__5b2e38c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__5b2e38c/annotation.yaml", - "hashed_secret": "7314cca567cf5f608abfffa2f0c69a6b920810e9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__5b2e38c/annotation.yaml", - "hashed_secret": "1d94fa1a1434affac10375b59c9e65fb715f96d5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__65468ce/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__65468ce/annotation.yaml", - "hashed_secret": "f264e495dfeee7514ac70ce38b5a1ea715ead542", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__65468ce/annotation.yaml", - "hashed_secret": "8d26cb902808c18c7e85a138d4dbe2b7a96262a1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__86ea7a5/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__86ea7a5/annotation.yaml", - "hashed_secret": "6abab1ee91461e81d62afdbd02a56cd24215d6f3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__86ea7a5/annotation.yaml", - "hashed_secret": "fe09be1143bd4dcf4cd9882206abfd72e2073fc8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__8854c58/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__8854c58/annotation.yaml", - "hashed_secret": "8afdf4959aef862e2de3564fde246dbc5b84835a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__8854c58/annotation.yaml", - "hashed_secret": "93159dc8c5daa2b6d1bb4c6181c1ac33d3424425", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__8883b98/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__8883b98/annotation.yaml", - "hashed_secret": "55a5f209e8a8cedfe422820bfa12405fe2580fc0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__8883b98/annotation.yaml", - "hashed_secret": "2d241e77f934cbe7ae5125de8c4b0ef0eaf49a63", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__926090b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__926090b/annotation.yaml", - "hashed_secret": "ce39f7f8b903326363257589e271ef11c71b3e15", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__926090b/annotation.yaml", - "hashed_secret": "6ca0829b4db4e38a749c2fd8ab0f157644d1b746", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__a751caa/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/annotation.yaml", - "hashed_secret": "fe09be1143bd4dcf4cd9882206abfd72e2073fc8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/annotation.yaml", - "hashed_secret": "17c0985dbe59fcb0774fdd0582f381c28fe9906e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__a751caa/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/patch.diff", - "hashed_secret": "8fd2cd457665bfba302df7f42b223aef27acb8e9", - "is_verified": false, - "line_number": 93 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/patch.diff", - "hashed_secret": "988f99f67a4da9e51a686e01af49a060e312f09e", - "is_verified": false, - "line_number": 101 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/patch.diff", - "hashed_secret": "a1c218fc97ecfc8b60d4dca5f6559c50b57b63a5", - "is_verified": false, - "line_number": 109 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__a751caa/patch.diff", - "hashed_secret": "a45a360e6ff9bceaf3fcfef370a6d6e1d4ba9271", - "is_verified": false, - "line_number": 2147 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__ae22b8b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__ae22b8b/annotation.yaml", - "hashed_secret": "b79dad98c2d898074a4574fbea79285864869a8e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__ae22b8b/annotation.yaml", - "hashed_secret": "2c212b0320ec5bf7bd51117a5ce119d6661b6cd7", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__b40cc0b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__b40cc0b/annotation.yaml", - "hashed_secret": "1fae67330b154f097a4c16ce6500eff96b33935e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__b40cc0b/annotation.yaml", - "hashed_secret": "577c48a40c4cff55d1634de2f6e45f4fa46a002a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__b8fd63a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__b8fd63a/annotation.yaml", - "hashed_secret": "d325c6e7c808048be141a32fc94556746c72b4c9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__b8fd63a/annotation.yaml", - "hashed_secret": "0cd345a597dc333078f1951789f125768986edf4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__c0c2230/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__c0c2230/annotation.yaml", - "hashed_secret": "de4ccc7aa5318b24b5cfcf3863c37ce0d3c01b36", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__c0c2230/annotation.yaml", - "hashed_secret": "c1d710af9ffb112e95a39cbe2e960016b96da12f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__d57ef96/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__d57ef96/annotation.yaml", - "hashed_secret": "8cf70db099a21a355b1159e9369867f2306d1d1d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__d57ef96/annotation.yaml", - "hashed_secret": "82a6f0b3883eb74d79cb0d1e2ec120aadb52499e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__e4d20da/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__e4d20da/annotation.yaml", - "hashed_secret": "e909dbba15eb27e98ce4945ebc284dd0819a3fc2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__e4d20da/annotation.yaml", - "hashed_secret": "3eadbd9eaebd79e20273276012318bad16228f9a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__f5c1f08/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f5c1f08/annotation.yaml", - "hashed_secret": "480b3424c8413d98f5b9702878c7916fde15b0db", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f5c1f08/annotation.yaml", - "hashed_secret": "4159dbdc5edef16cfb0469ae3d43a1d46071f62a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__f7bd408/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f7bd408/annotation.yaml", - "hashed_secret": "a22b8783f807fc742b3e37dabea2ebb402fb1753", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f7bd408/annotation.yaml", - "hashed_secret": "6a85381001426c793fe22f08252c4b9406f6d93f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__f905beb/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f905beb/annotation.yaml", - "hashed_secret": "646859c99c4b420b251f8981180ed1825ffa4812", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__f905beb/annotation.yaml", - "hashed_secret": "243135463d2ac4e20e2f3831d77bbf4454a8e55e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/aspnetcore__fc8deca/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__fc8deca/annotation.yaml", - "hashed_secret": "b25f8bb1149c98e2ea93e00b7b5dc53f553a714b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/aspnetcore__fc8deca/annotation.yaml", - "hashed_secret": "36550766ef55b3c86d0ee55705a97e65277c4ef1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__152db6c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/annotation.yaml", - "hashed_secret": "3e9ce0772395d6089016cbb08c4bd44bae3c1ca2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/annotation.yaml", - "hashed_secret": "c4d39660a1551c94ec2cfaded307b106b75d7708", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__152db6c/candidates.yaml": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/candidates.yaml", - "hashed_secret": "6bfcf2b5a4505dd146eef100781bf470c20d48c3", - "is_verified": false, - "line_number": 64 - } - ], - "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "f16a1c1f59f0bfbf01a283d33278a49e200e3493", - "is_verified": false, - "line_number": 4818 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "cea21b95af1d0cf17ac9030386ae8354cfc2e478", - "is_verified": false, - "line_number": 4819 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "7a01d50a3a6e28c397004547d497ef42c97fafa3", - "is_verified": false, - "line_number": 4820 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "6f1c88e17f6c15550426538e41274150c0509680", - "is_verified": false, - "line_number": 4821 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "d99ccf08e55920e3cf021a6800fc07ba8ef7f5ce", - "is_verified": false, - "line_number": 4822 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "322165dc51f943862574969501d9efc1910a86bc", - "is_verified": false, - "line_number": 4823 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "1b185b7d1c0dc2d516af055bed1b462df28e8b46", - "is_verified": false, - "line_number": 4824 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "073264c5e9a0479dbc8a3e353489f06fdaa975bb", - "is_verified": false, - "line_number": 4825 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "0c990d69ea45624ed773c90a97ea8a8aa9a6ed43", - "is_verified": false, - "line_number": 4826 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "f03276a814b5ab874ce00c7e6b99c89607726bda", - "is_verified": false, - "line_number": 4827 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "81132a55eb37c0f5ccaedb24e8745ded3637b923", - "is_verified": false, - "line_number": 4828 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "e7e3b6b3a14f54cc090c10102828f5a8b78a3062", - "is_verified": false, - "line_number": 4829 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "aa0e9b5b052cf423e2ffb4c135a3841007de82f3", - "is_verified": false, - "line_number": 4830 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "bd2b6b2dd7937abbac74653d2b9a3d65e9982712", - "is_verified": false, - "line_number": 4831 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "48a337277a6b89253d844985ecbb8df348012599", - "is_verified": false, - "line_number": 4832 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "e351e801ef234096d4113f3f0459f5482433fef6", - "is_verified": false, - "line_number": 4833 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "b3f37eb129f4e6a0d6961aca7b05680015090ac8", - "is_verified": false, - "line_number": 4834 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "b33c16f44197e156153bd9051acc2d9967dc362e", - "is_verified": false, - "line_number": 4835 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__152db6c/patch.diff", - "hashed_secret": "17c880dcbb0e0814b190c46ecd7c8e59f4ebc81b", - "is_verified": false, - "line_number": 4836 - } - ], - "datasets/dcbench/v1/instances/envoy__27916fa/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__27916fa/annotation.yaml", - "hashed_secret": "457ea1bb53a7544233cdc6691b2a7c77a63baee2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__27916fa/annotation.yaml", - "hashed_secret": "26d0d46b4227e9589f9db3fc9153099f8c7abcd0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__27916fa/candidates.yaml": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__27916fa/candidates.yaml", - "hashed_secret": "aac2c9aae8923c79145c1e76350fa0f356f99766", - "is_verified": false, - "line_number": 67 - } - ], - "datasets/dcbench/v1/instances/envoy__2a5ad79/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__2a5ad79/annotation.yaml", - "hashed_secret": "49bfa1010be477b8522f9f2f0ed04c792b14a142", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__2a5ad79/annotation.yaml", - "hashed_secret": "878e73d60b2aea5c9068e8d474cd6b7114724e4e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__2ca496c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__2ca496c/annotation.yaml", - "hashed_secret": "b31b8d04185f18a062123a7a0de3a388c1ba3c13", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__2ca496c/annotation.yaml", - "hashed_secret": "88e0ecf6a3d7397381f4e24156515dcc3dafef77", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__2ca496c/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__2ca496c/patch.diff", - "hashed_secret": "f08e20a0eea05fa4268e1e1a3bea0825e84eb9ce", - "is_verified": false, - "line_number": 243 - } - ], - "datasets/dcbench/v1/instances/envoy__33a4dee/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__33a4dee/annotation.yaml", - "hashed_secret": "5e7b91b214a16145be313fa4beb57f7a4fce3a61", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__33a4dee/annotation.yaml", - "hashed_secret": "f3177fdd0961cc79a98edcb0d98d0c101ea4c26f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__37b63bd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/annotation.yaml", - "hashed_secret": "df635013638fa9b93df9283a0e9c98550c8e68b1", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/annotation.yaml", - "hashed_secret": "789a7774d4ab9600197fcca2c95ed9afa1043885", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "b83275ea02e66395cfc5dd416aea2f4571107c31", - "is_verified": false, - "line_number": 87 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c6d4cdc1ee684c34a5774cf7c41ab5c5baa0e5be", - "is_verified": false, - "line_number": 96 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "9833f81b115d99ad5d92dd197bde788c4224cb4e", - "is_verified": false, - "line_number": 135 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "849570996f176edf3a0275550fcc73231fb135b1", - "is_verified": false, - "line_number": 181 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "2dfacc0411bfa2f0a486fbc3fcc28a09228f8a11", - "is_verified": false, - "line_number": 321 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "ef58f99b81dc9a9a1040ee954cf2be7fd972a0ec", - "is_verified": false, - "line_number": 360 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "b88bab88d649c4288c72708f97dad74a9160d438", - "is_verified": false, - "line_number": 408 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "df7596ee131e8f6881c1183cc293409c29d665e7", - "is_verified": false, - "line_number": 447 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "3486fe2f8f9299bab67a4eac02de40203bba3476", - "is_verified": false, - "line_number": 554 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "4b20747f9f3c1e474f5add05e14b92df940a5130", - "is_verified": false, - "line_number": 599 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "2a948babb48f9b645c35810e68f62983eb1d779f", - "is_verified": false, - "line_number": 716 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "98344c551d329383db3ac2e8ce42a66c354af369", - "is_verified": false, - "line_number": 754 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "d2e033fe193c9a2aa937c12c6b496692a3bfd0f3", - "is_verified": false, - "line_number": 793 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "b479e0d856887ade1763402e82327b82a6c94531", - "is_verified": false, - "line_number": 841 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "26df84d2358a3890169e2a45bdc2289a6a17c18c", - "is_verified": false, - "line_number": 912 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "735994e942d68e145e87d5086634f496df8eecb7", - "is_verified": false, - "line_number": 967 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "937bc22d50662d64b8144f8728f14500887aac91", - "is_verified": false, - "line_number": 1006 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "cb470d371783f789843ee40423cebb2556210097", - "is_verified": false, - "line_number": 1052 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "d63b846af4b489cf73b0e1ca2d9ba4e9228e4327", - "is_verified": false, - "line_number": 1097 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "f657eced17f1bf864c26151b428c369cba9b6893", - "is_verified": false, - "line_number": 1170 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "7622026df2230df64fc957b1de93a7a2ffa53523", - "is_verified": false, - "line_number": 1257 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "e124926a8b64afd20b624eaf367483e9e63e2204", - "is_verified": false, - "line_number": 1315 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "4a548e39cbb69b6bb596c02eec035d8d1007ddc9", - "is_verified": false, - "line_number": 1367 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "3a0add4085d2a404afcba5f7f0f7d5a92f89c05f", - "is_verified": false, - "line_number": 1406 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "74a5a525a04f01941507b83ff8460d2d82689b4e", - "is_verified": false, - "line_number": 1458 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "b26a763d0bdff5d451bd47b5afb719e780495b26", - "is_verified": false, - "line_number": 1544 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "ac2656eb78225f79994be5894f4d2cc299c3730b", - "is_verified": false, - "line_number": 1626 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c0cbbc55b0ed5f7c842eae3d5af85bae92b176a3", - "is_verified": false, - "line_number": 1681 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "336b93cff350c180ba146b795b5691ab06b10744", - "is_verified": false, - "line_number": 1740 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "d2d72b4fb09223fcc4b7a7ec676c287b31adbabf", - "is_verified": false, - "line_number": 1801 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "7595306f5da32ddff19f11930cfd7e021bca6a62", - "is_verified": false, - "line_number": 1847 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "8f48b5146d88920187ca1c8d1d52cd0b008f12de", - "is_verified": false, - "line_number": 1893 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "a538a4bbfb4e93f71aa47f63be73e27ad9bf1386", - "is_verified": false, - "line_number": 1939 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "ee328ffb332e82910d7d888d1db4670900e455f5", - "is_verified": false, - "line_number": 2009 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "a2c95830841bfb3ce7f6df48deeadd2e5bb16631", - "is_verified": false, - "line_number": 2047 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "822e00a0f89ac349cbf702531f4f033260828e21", - "is_verified": false, - "line_number": 2087 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "0fdd9df07d0f5a4b49a81d92bbb086763150fbc0", - "is_verified": false, - "line_number": 2179 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "faa0ddbbe89ccdee24b39e7fb6cd924d84b9f95c", - "is_verified": false, - "line_number": 2250 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "729601340d94890d89e69f03762589a8cbf89cec", - "is_verified": false, - "line_number": 2321 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "ea581e0c5da35c1c464cd32062801ed7632d833c", - "is_verified": false, - "line_number": 2392 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "a9df4b3b5d643994b2d1015d8de874ffe74eebd6", - "is_verified": false, - "line_number": 2463 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "15b35fb3118b66a879fd0b785ea79a11a3b69040", - "is_verified": false, - "line_number": 2534 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "fbe26dbbaa1b01b1932e5a13b04b7ffb88ef2d21", - "is_verified": false, - "line_number": 2605 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "cf45dbb800154fd3ee6025a606eec2d87171f1ba", - "is_verified": false, - "line_number": 2676 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "e0f930ce4dc6ee91bd9c13f93bdd411a875847ad", - "is_verified": false, - "line_number": 2811 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c010dcc93cdc02fef1dae55077be682aa0cbe6c7", - "is_verified": false, - "line_number": 2820 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "457b24d26a9cd360a12b56f87c6f1daf3d30a895", - "is_verified": false, - "line_number": 2846 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "eac7344fb138e2bc70ec74dd15a52fe0c253887a", - "is_verified": false, - "line_number": 2861 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "4af1b31ab033275a37cc32187a52e4c46cf762db", - "is_verified": false, - "line_number": 2884 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "746e1a1e8d1c94b33791f3856d54aad452638649", - "is_verified": false, - "line_number": 2898 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "202aa8fdb80169d94642dcfdf5b26be2caf0c0aa", - "is_verified": false, - "line_number": 2904 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "29cc4d113d2b819fd175fde15139a9047b4714ae", - "is_verified": false, - "line_number": 2919 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "9e8cd3c481aad84975ba839534d725049febf3bb", - "is_verified": false, - "line_number": 2925 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "2d70a27f9bdfdb0ebea3fa79f7962fa957bd11fa", - "is_verified": false, - "line_number": 2935 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "52174d432f72b603ab3aeb65e046d8842f64eba8", - "is_verified": false, - "line_number": 2941 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c0f0c86d7308c904e441e4f0c2e9ede6f9885fff", - "is_verified": false, - "line_number": 2989 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c474b9a5208d123acbaae31790dc7ea1e05384a2", - "is_verified": false, - "line_number": 2999 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "f7b05533da9b6d97190bab8152f9105855b01777", - "is_verified": false, - "line_number": 3005 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "8cc69a0306a6b8f4c32428f44505f11eaebb3ebf", - "is_verified": false, - "line_number": 3015 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "6538f9a3e2204f918d5719f17a23367f4d2105c7", - "is_verified": false, - "line_number": 3025 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "b4259ea178dd7cb0249df5d8feb7d13a2d6fd820", - "is_verified": false, - "line_number": 3034 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "0675b70f52618de044d1d1703b6c8849b407c83a", - "is_verified": false, - "line_number": 3043 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "c63addae2503bfe26923f0460158bb2fc674b928", - "is_verified": false, - "line_number": 3055 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "9f7a7461ae8d5e27458e899b4e84416483680a51", - "is_verified": false, - "line_number": 3066 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "fed671d6a24626d6cf16f91b98f2b11ba736d095", - "is_verified": false, - "line_number": 3084 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "2cec7afe8f0f8f21d28f274299142cbbe949023c", - "is_verified": false, - "line_number": 3101 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__37b63bd/patch.diff", - "hashed_secret": "a5f5903bd227b9d811f037da91086231b40422a7", - "is_verified": false, - "line_number": 3107 - } - ], - "datasets/dcbench/v1/instances/envoy__394e3c7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__394e3c7/annotation.yaml", - "hashed_secret": "43ddc469d134d10940358fd3fb00e97114bd48df", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__394e3c7/annotation.yaml", - "hashed_secret": "52f34ed1e3f67d19d2b747e8a49319145be7bc1a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__506746a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__506746a/annotation.yaml", - "hashed_secret": "d05c2788bd995e6ee1182eb5c627a2bdd97963fa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__506746a/annotation.yaml", - "hashed_secret": "5cea039f0ba1f25631121cd3ac37e5c05dd0b64d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__57e0f60/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__57e0f60/annotation.yaml", - "hashed_secret": "2f8572e79f73401b24757246a3268f18a9275cd0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__57e0f60/annotation.yaml", - "hashed_secret": "62a76275e2de220e0f11dc39b8f16aa9716ad65b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__68d760a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__68d760a/annotation.yaml", - "hashed_secret": "081852eb0be8e0ef76bad569d22339f88c96ef70", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__68d760a/annotation.yaml", - "hashed_secret": "157d9df8ef71b15d4575eb29e5ecc594ba32029f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__7155714/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__7155714/annotation.yaml", - "hashed_secret": "d8f4233cd80840183f2e77186ba542a576f8ca3c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__7155714/annotation.yaml", - "hashed_secret": "d21534f54ae1664bccaeb447489c6297f3c53ef9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__7bc6bb9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__7bc6bb9/annotation.yaml", - "hashed_secret": "da3986f3080bd94bda381b38e90811ce3688920b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__7bc6bb9/annotation.yaml", - "hashed_secret": "2820c911dbbf07b054889b930035c93b2e997d06", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__82cd127/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__82cd127/annotation.yaml", - "hashed_secret": "5248552a1f3bec26e2ed282fb4d4797f62c0bb84", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__82cd127/annotation.yaml", - "hashed_secret": "76c775fa7e903c89e2a3f2e9257663edd47692aa", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__a2fe7fb/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a2fe7fb/annotation.yaml", - "hashed_secret": "c81602a0f94068c94f2c897f092f1aa6a0e986ec", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a2fe7fb/annotation.yaml", - "hashed_secret": "26fb3bf0a61ac9c9da43a292221d87cd5b6fc0b5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__a3c41b0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a3c41b0/annotation.yaml", - "hashed_secret": "7a8a13f4bd810e00f7ddcb9e33b784409fa9999b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a3c41b0/annotation.yaml", - "hashed_secret": "ac23e1ceaa21f188886c1a2b0cdaaab43602262a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__a3ea604/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a3ea604/annotation.yaml", - "hashed_secret": "d06f759d02aa6d7a01c1de59b62e6c2d4e41f9dc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__a3ea604/annotation.yaml", - "hashed_secret": "0ea264b6247318660e1b13685aa084dd6c81651a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__aa4fe5e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__aa4fe5e/annotation.yaml", - "hashed_secret": "33a880eee5245943dd03910b33fb3e8c1dd5fdfb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__aa4fe5e/annotation.yaml", - "hashed_secret": "a63a55fbdfea4e44f5a5117097066140d0da3817", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__b0b550f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b0b550f/annotation.yaml", - "hashed_secret": "bf3e570d26899c623e738144b85ee748f775dcfd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b0b550f/annotation.yaml", - "hashed_secret": "3ca1adc28591424444c6b3f1d9afb0838efe3bec", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__b3b748d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b3b748d/annotation.yaml", - "hashed_secret": "c8efb4cbb7151607a029812a6fca40f4d4c86b00", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b3b748d/annotation.yaml", - "hashed_secret": "c3248bd3989654fa3ecf8e76751fbafb1af3b857", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__b4d354e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b4d354e/annotation.yaml", - "hashed_secret": "fea4c95f6e79424180fc84fccbc6372e48c501a4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__b4d354e/annotation.yaml", - "hashed_secret": "4c055cc4d893fd0b45e26333f2c69182053b4ba8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__c97cd05/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__c97cd05/annotation.yaml", - "hashed_secret": "fea862ace13880f5ab0020bdd26f3d46c2f70478", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__c97cd05/annotation.yaml", - "hashed_secret": "cf22cf1a6b5b68f1bd763fa6e3893dcd1fa38d18", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/envoy__f724ec1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__f724ec1/annotation.yaml", - "hashed_secret": "7f5acbde0c8ab0e4d72a541a623de52502582b2c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/envoy__f724ec1/annotation.yaml", - "hashed_secret": "2c784f880df8e8242fbce1f635ea7ed31d5d6a07", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__131c075/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__131c075/annotation.yaml", - "hashed_secret": "44bcd935393da6f64d63fb14c35c571608ea0ad0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__131c075/annotation.yaml", - "hashed_secret": "31f36a050da31e37723d4cc925e4c313e7c91a15", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__1f932af/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__1f932af/annotation.yaml", - "hashed_secret": "a5e013ce3baf05bfbe03976babe554953d13225f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__1f932af/annotation.yaml", - "hashed_secret": "ef4bce311dc92d954b0244e02f7c6921c591475b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__1f932af/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__1f932af/patch.diff", - "hashed_secret": "487578ffef1b02d25d92fc651719f688efe8315f", - "is_verified": false, - "line_number": 946 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__1f932af/patch.diff", - "hashed_secret": "e1380c2f286cad19218a4140326983b70b423c76", - "is_verified": false, - "line_number": 992 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__1f932af/patch.diff", - "hashed_secret": "3a1f50cfc7f8e95b3066a10f522ab614d637fb69", - "is_verified": false, - "line_number": 1032 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__2439e77/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2439e77/annotation.yaml", - "hashed_secret": "f8da2093f6e15db5bbb5c131ba757100bdeedb00", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2439e77/annotation.yaml", - "hashed_secret": "7e50bd02ab4da157fc4e9223db5ff069bce6bd9c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__2a44c75/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2a44c75/annotation.yaml", - "hashed_secret": "433d406e1fe71cbab1e83117c95cef79d547da62", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2a44c75/annotation.yaml", - "hashed_secret": "b0520a9f80aaf7b1d58df94dd35a0e71a1130875", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__2c25273/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2c25273/annotation.yaml", - "hashed_secret": "672c6d190535a1935361ef3f81057224b2d310c2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2c25273/annotation.yaml", - "hashed_secret": "d2ab10b5c716fbdd64f86cdce7d00fc9222a1588", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__2cb089a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2cb089a/annotation.yaml", - "hashed_secret": "ca7112c73a016ab2b7ccd45bce537a4ded3d97a2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__2cb089a/annotation.yaml", - "hashed_secret": "0eac93d4ea01a5401e396c98b0132e566af01706", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__3b445e8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__3b445e8/annotation.yaml", - "hashed_secret": "bf1e40e1376e4ee5c9f08256fc60d0a742912478", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__3b445e8/annotation.yaml", - "hashed_secret": "5b73943e589c879a85db9cc7cc4e2705f0c110f4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__3de9b6c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__3de9b6c/annotation.yaml", - "hashed_secret": "bf159055c9f07dbc0f703811ea1f66e2f7ea78c8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__3de9b6c/annotation.yaml", - "hashed_secret": "363af0e754e352a4cc4fa8faaca0ab25af64d0bc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__4d69766/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__4d69766/annotation.yaml", - "hashed_secret": "b2cf6937913ea5c821cd94e6b89d23a837e3ada0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__4d69766/annotation.yaml", - "hashed_secret": "e2eff28faacac8cda4d683ffa03f9465e9e130d0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__752ea8e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/annotation.yaml", - "hashed_secret": "4fbe517822fb9632daabbf8c140412143a6b9558", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/annotation.yaml", - "hashed_secret": "87377827d66f0b3ffd0d001218d0978df352f793", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff", - "hashed_secret": "2d6143ac9787c99f1dd8e50e3b9a774c22c9f396", - "is_verified": false, - "line_number": 558 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff", - "hashed_secret": "3b878643a037736daeea35d8006aa02750dbbe57", - "is_verified": false, - "line_number": 561 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff", - "hashed_secret": "9b052d851ce7738696277cfeab0461c872338a6c", - "is_verified": false, - "line_number": 562 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff", - "hashed_secret": "7c30fce96828d18b4595ca290536f9b1e27fe209", - "is_verified": false, - "line_number": 564 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__752ea8e/patch.diff", - "hashed_secret": "93cb550db5e6e72586780a013cea04dd24c2ed30", - "is_verified": false, - "line_number": 565 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__87dcc16/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__87dcc16/annotation.yaml", - "hashed_secret": "d6da32968e292199cf971d5f439dd440d2b2eff0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__87dcc16/annotation.yaml", - "hashed_secret": "2f74c1beb705eca978371b9424813d8a0af9a0db", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__8c36775/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__8c36775/annotation.yaml", - "hashed_secret": "b1014bdc363f01d7ea552d6150f0f44fd369a6a5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__8c36775/annotation.yaml", - "hashed_secret": "da960ba47a6e3f75cdca99f2fa042e2099e6ad84", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__8c36775/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__8c36775/patch.diff", - "hashed_secret": "24477f916a9afe0abe1de82dd04d87f247a746b8", - "is_verified": false, - "line_number": 118 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__8c36775/patch.diff", - "hashed_secret": "0b328989240cc01b2fd4b35b814080aa716fea8b", - "is_verified": false, - "line_number": 120 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__8c36775/patch.diff", - "hashed_secret": "1ef1b7ea6c54716caadee50f9d5effb857a66410", - "is_verified": false, - "line_number": 364 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__ac04ad6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__ac04ad6/annotation.yaml", - "hashed_secret": "3983ec23dc3a7e3b044eb3559deb5e02c983e5b4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__ac04ad6/annotation.yaml", - "hashed_secret": "abb9d39471058100feeba1f53bf610a14965c7a8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/annotation.yaml", - "hashed_secret": "859c0d1073537df71bbbac847a005e33568d866b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/annotation.yaml", - "hashed_secret": "1d37918d4b0dba23df70810851264bddb8d3d7a8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/patch.diff", - "hashed_secret": "56b95bd093cede4f20a8551b8a287782a68c4be4", - "is_verified": false, - "line_number": 247 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/patch.diff", - "hashed_secret": "1634b5e2b418db2d424bc4c0453176acf5474cdc", - "is_verified": false, - "line_number": 248 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__b54d1c5/patch.diff", - "hashed_secret": "76203ed96a558e46a266a9e58cd85a04d57cce0f", - "is_verified": false, - "line_number": 261 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__d7c8fda/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__d7c8fda/annotation.yaml", - "hashed_secret": "a1c33d5a2d19e0fdcdbee667f48de380fc032a0e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__d7c8fda/annotation.yaml", - "hashed_secret": "ad504496e941aa294d8530fc50fae9fbee8fb792", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__e3b1c7c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e3b1c7c/annotation.yaml", - "hashed_secret": "981f8123b7b7f0033ed481a294b4919a09e8e65e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e3b1c7c/annotation.yaml", - "hashed_secret": "ca402795e094dc4f97ff7e170aa09cb9ddedaef9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__e942689/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e942689/annotation.yaml", - "hashed_secret": "aef5ba0987ce17e3ad623b65502296d7b616df83", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e942689/annotation.yaml", - "hashed_secret": "a7d52d391b358de44bc3714b6d509ab42257c7e8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__e942689/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e942689/patch.diff", - "hashed_secret": "1e97f56095ea875b1898f4303e7e7bfce982a439", - "is_verified": false, - "line_number": 186 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__e942689/patch.diff", - "hashed_secret": "3a1f50cfc7f8e95b3066a10f522ab614d637fb69", - "is_verified": false, - "line_number": 208 - } - ], - "datasets/dcbench/v1/instances/firefox-ios__f8d47d5/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__f8d47d5/annotation.yaml", - "hashed_secret": "b82772946b28ca5d1ca5863f4f771b316fcdf7aa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/firefox-ios__f8d47d5/annotation.yaml", - "hashed_secret": "27104e784d5061ccc073e114b0ce30a0723f0b95", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__05b2de6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__05b2de6/annotation.yaml", - "hashed_secret": "e02aa4174f93617a68ae3c2ac3fe700f47861b7e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__05b2de6/annotation.yaml", - "hashed_secret": "2a60b1fa6354519e32afba7d1a484dce4a3bde34", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__073c8b2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__073c8b2/annotation.yaml", - "hashed_secret": "7198fec35ae62e04188d123ec220c739d5265b50", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__073c8b2/annotation.yaml", - "hashed_secret": "aaa4cb8a95d25ff29b67841710d1176de34704e8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__07559fd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__07559fd/annotation.yaml", - "hashed_secret": "ca907657272c533353ccbb34dfc805bcb92a1b29", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__07559fd/annotation.yaml", - "hashed_secret": "855eb0148f9177b813a18c2acb1cc359eafe8613", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__0f59d73/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__0f59d73/annotation.yaml", - "hashed_secret": "d84c25f537ad8c1756e48540ada4f17de963c857", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__0f59d73/annotation.yaml", - "hashed_secret": "7c8642e95d85491aea51620ea7b067de096e618d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__0f6c42c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__0f6c42c/annotation.yaml", - "hashed_secret": "8caf6a76267e3f0db78b4bb4a7df4b085fd3f6bd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__0f6c42c/annotation.yaml", - "hashed_secret": "360514604b0ee5344613b6f34755d42c53f11e02", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__387a4f4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__387a4f4/annotation.yaml", - "hashed_secret": "d1438ed18e40d9a4abfa0692aefe414723f6811b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__387a4f4/annotation.yaml", - "hashed_secret": "18a4d6ca37b4826def1136c2f40c2fa25670a7ad", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__4aa76dd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__4aa76dd/annotation.yaml", - "hashed_secret": "764de56fc61dcef04ea7ebd201b98a7bc2a159df", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__4aa76dd/annotation.yaml", - "hashed_secret": "bc4e7c8397469126f7982981ff4c2ace53b0cfed", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__4aa76dd/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__4aa76dd/patch.diff", - "hashed_secret": "00097e239bacc4d0bc0306d92e956c76d2208e4c", - "is_verified": false, - "line_number": 330 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__4b9b2a4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__4b9b2a4/annotation.yaml", - "hashed_secret": "448e5024fb22c0f16d32fa2b4705f117a646d6ae", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__4b9b2a4/annotation.yaml", - "hashed_secret": "2105220315b7d0b1dcce89519b625cf7f84e971c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__525edec/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__525edec/annotation.yaml", - "hashed_secret": "480d670cf19196cecf810606b2508d5d8bee9b52", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__525edec/annotation.yaml", - "hashed_secret": "3d0964b69d54d781efb37bff0e5944ee473bfe3f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__5e8f16b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__5e8f16b/annotation.yaml", - "hashed_secret": "82213c124a6704ccc64f9fe06b4d71aef59817bc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__5e8f16b/annotation.yaml", - "hashed_secret": "cb08db8c774ff0239f8980f6a1cd2c1fe419cc8a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__7350eb1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__7350eb1/annotation.yaml", - "hashed_secret": "a1ad9f1f4e654215686bc909700c98299591eaf5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__7350eb1/annotation.yaml", - "hashed_secret": "ee7501fb65c27237917e997ff88b3715d5c3b3bd", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__80b2c3c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__80b2c3c/annotation.yaml", - "hashed_secret": "db33400d340b085634bc7abd86f43e99605e51df", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__80b2c3c/annotation.yaml", - "hashed_secret": "5066e2bc79a3871090dfa08c5b2ff37d3ef45fad", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__80b2c3c/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__80b2c3c/patch.diff", - "hashed_secret": "e84551836130ef6b4c63fe6d6b6890cf160a4a2a", - "is_verified": false, - "line_number": 6880 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__83a8b77/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__83a8b77/annotation.yaml", - "hashed_secret": "609f3a500d1ab06d5b3f8170d4f44d2f120a82e9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__83a8b77/annotation.yaml", - "hashed_secret": "32dca922dde7686d312197412025812a72e31b55", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__85609c1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__85609c1/annotation.yaml", - "hashed_secret": "a0cd2a943dd716a0d2db7b5fdf5ac4967f39f3f2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__85609c1/annotation.yaml", - "hashed_secret": "adeed7d699b8ce629e2a6c30fc8166ef9ce60d01", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__85609c1/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__85609c1/patch.diff", - "hashed_secret": "c388f74981fe6a74a5ce6cd259e3c1fff899b515", - "is_verified": false, - "line_number": 652 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__911701a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__911701a/annotation.yaml", - "hashed_secret": "4ac0c593f1dd6300cfd569997408e2461760aa1c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__911701a/annotation.yaml", - "hashed_secret": "6e38fe30b73bb1dfae54a2514116e951b718f01f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__a00a23c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a00a23c/annotation.yaml", - "hashed_secret": "b4169bcb2b5557fbafb9c1f2ec201047dab3e599", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a00a23c/annotation.yaml", - "hashed_secret": "99aee71c9018adb5bed89e30c717c751120c9cd8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/annotation.yaml", - "hashed_secret": "7d35ab209dc9a3a811adf48a9bb2d28938accc48", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/annotation.yaml", - "hashed_secret": "03aa7d88f1fc713ce49f5b9586cc6132e6c10753", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/patch.diff", - "hashed_secret": "e0996a37c13d44c3b06074939d43fa3759bd32c1", - "is_verified": false, - "line_number": 7582 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/patch.diff", - "hashed_secret": "f32b67c7e26342af42efabc674d441dca0a281c5", - "is_verified": false, - "line_number": 7801 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__a5aa40c/patch.diff", - "hashed_secret": "352f7829a2384b001cc12b0c2613c756454a1f6a", - "is_verified": false, - "line_number": 7873 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__d745ff0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__d745ff0/annotation.yaml", - "hashed_secret": "27b85134c532019929d6fed7b9204ed19c2be702", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__d745ff0/annotation.yaml", - "hashed_secret": "d05d288d21824095516dcc63aaad6ddaf3ef6a6b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__d8bb8d4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__d8bb8d4/annotation.yaml", - "hashed_secret": "e9336ad361a8f0697427f078dd5dbdea374d4ac4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__d8bb8d4/annotation.yaml", - "hashed_secret": "87eea3e8d8c52a546816ed7c066779714bc0c3c7", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__df3d936/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__df3d936/annotation.yaml", - "hashed_secret": "b0b41714cdb9d6f5f0363fc9aae689fe99b9c237", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__df3d936/annotation.yaml", - "hashed_secret": "ff2653a1dfa46438ac2b9ae564629ff99701c438", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/annotation.yaml", - "hashed_secret": "1d54abdb05e66847e2e72ef64e8469c03296c553", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/annotation.yaml", - "hashed_secret": "cdf32fbfe4340b3387c886b002244e713f9231c1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/patch.diff", - "hashed_secret": "b73595197bd7bce40133054a633efc41560975b6", - "is_verified": false, - "line_number": 1417 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e46d4bf/patch.diff", - "hashed_secret": "a6292616c61a4ec51b82667bf9c5ac129fb51a64", - "is_verified": false, - "line_number": 1540 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__e7ee84a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e7ee84a/annotation.yaml", - "hashed_secret": "f40c775fee041d6800d4e08360a1dd07356dc145", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__e7ee84a/annotation.yaml", - "hashed_secret": "1375534872fa41a50f6a71639e61203bd2873c6e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__f5cde3a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__f5cde3a/annotation.yaml", - "hashed_secret": "ca95731adcdbc95dd28fcc41bb3d0b06f9d215db", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__f5cde3a/annotation.yaml", - "hashed_secret": "a4d04de2829bd59b06154e4c1decc5862c48d662", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__f93f8f5/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__f93f8f5/annotation.yaml", - "hashed_secret": "ec8ab01440dfa2714f0ed11e1cc022b7b18cbc0a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__f93f8f5/annotation.yaml", - "hashed_secret": "0798e664900a51ac742c3f37441886934e5161a7", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitlab-foss__fff7754/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__fff7754/annotation.yaml", - "hashed_secret": "e15b9aae6da6a9390d0db1c99399c7c15c6415bc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitlab-foss__fff7754/annotation.yaml", - "hashed_secret": "e3f9676f531d48cbd4f143b683e3d7fd9de8c849", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__0150cf8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__0150cf8/annotation.yaml", - "hashed_secret": "cd5e11e4b5b25b94aa0c7898c0e700547105c503", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__0150cf8/annotation.yaml", - "hashed_secret": "0a301404f09fde82123559defc7ff0f78a742283", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__0150cf8/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__0150cf8/patch.diff", - "hashed_secret": "35318e81a5e01832fae91c39cb74767d024ea3e9", - "is_verified": false, - "line_number": 1577 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__0150cf8/patch.diff", - "hashed_secret": "db5873256056bb74783762044ad6a9414e78b3dc", - "is_verified": false, - "line_number": 1579 - } - ], - "datasets/dcbench/v1/instances/gitpod__02b4952/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__02b4952/annotation.yaml", - "hashed_secret": "3c0073458cb6012a52e7e4e68190f504abe12604", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__02b4952/annotation.yaml", - "hashed_secret": "339bae742177c3837968a3bce063167a476c18eb", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__04f590d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__04f590d/annotation.yaml", - "hashed_secret": "f437c8864b945ff0cf0038d0461c8cd3778bc7b5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__04f590d/annotation.yaml", - "hashed_secret": "e3c276a8533c0cb2620a568cc9f6312aea52aafd", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__17e83b9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__17e83b9/annotation.yaml", - "hashed_secret": "a484b25328ecab2fe289e274e66280d3f353e5a4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__17e83b9/annotation.yaml", - "hashed_secret": "a47c53fde8935669a12dfd05e77d0ceafda35b4d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__17e83b9/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__17e83b9/patch.diff", - "hashed_secret": "ea06090a0b9590add823ade2334090fa216acb2b", - "is_verified": false, - "line_number": 3786 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__17e83b9/patch.diff", - "hashed_secret": "a3cfe5e39424f3173142bad15fce4ba11cbb7a1b", - "is_verified": false, - "line_number": 14465 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__17e83b9/patch.diff", - "hashed_secret": "c5fd3201494e82cf94e6a681cdc535b306134e1a", - "is_verified": false, - "line_number": 14466 - } - ], - "datasets/dcbench/v1/instances/gitpod__1bc46bd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/annotation.yaml", - "hashed_secret": "c7615c6b6d081362c5ec91fc4b0a7f4c872f445d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/annotation.yaml", - "hashed_secret": "5c1eb948982bdfde2e83c9fb2afac2d5a6d66603", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "3c0ab0cbfffb730e03a0700cb839f6f7c26990e8", - "is_verified": false, - "line_number": 2775 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "407c5648fc68299c7a49d079e9aa96a3e5fd3607", - "is_verified": false, - "line_number": 3382 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "962e01ff6a135d92494aac7d57464e637cd88249", - "is_verified": false, - "line_number": 3384 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "93c15f82ef8cd9792efe46ed3244078380bd9f0c", - "is_verified": false, - "line_number": 3385 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "0d6a06ee95cdddf05d0663106ad457278bc32f5c", - "is_verified": false, - "line_number": 3532 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "085d10b7f986f1102883775bde4ddc6e910da027", - "is_verified": false, - "line_number": 3551 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "b07c0449871bab3bfb0029bece26411586e9b640", - "is_verified": false, - "line_number": 3573 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "85fb3bf54a43a0f9875827e40cb683bdd07fcf6b", - "is_verified": false, - "line_number": 3603 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "7c751f63ca7dfdd57fc9105cc5bb6285ca05ed79", - "is_verified": false, - "line_number": 3612 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "ce9312473fb43d267ef45010caf619b834310099", - "is_verified": false, - "line_number": 3628 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "f1e023f216ddd5569b9f3141af935e9f82a3a508", - "is_verified": false, - "line_number": 3643 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "e176064c54db179a586c4ea324924dbb386568e2", - "is_verified": false, - "line_number": 3687 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "e51c691089fcf21884b2d5ce02cea6c8f4bffe40", - "is_verified": false, - "line_number": 3688 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "86cc3f3a287a68d002603525c783e9e10f0e4ff0", - "is_verified": false, - "line_number": 3689 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__1bc46bd/patch.diff", - "hashed_secret": "f460c882a18c1304d88854e902e11b85d71e7e1b", - "is_verified": false, - "line_number": 4013 - } - ], - "datasets/dcbench/v1/instances/gitpod__1f06a53/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__1f06a53/annotation.yaml", - "hashed_secret": "03e0897a7bc2781ef76024166a855a24484534b5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__1f06a53/annotation.yaml", - "hashed_secret": "836c78de970d81c8fe49f1b22bc58af1f242493b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__21f546d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__21f546d/annotation.yaml", - "hashed_secret": "bd30c83b8c8f36599dbecaafdb5c1e8a7e97d8ac", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__21f546d/annotation.yaml", - "hashed_secret": "0bbe68562e373328d26be41711498c1355b13f87", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__26f7f5d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__26f7f5d/annotation.yaml", - "hashed_secret": "f07d36d4368e0445f0f6ba77b614dde4decd39fa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__26f7f5d/annotation.yaml", - "hashed_secret": "bff81e6dfc6c364c9b214e8b512669e5159d0e65", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__301f1b7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__301f1b7/annotation.yaml", - "hashed_secret": "1f1cb79abb902de8522320facebf466d72ba6a97", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__301f1b7/annotation.yaml", - "hashed_secret": "02efbe8de572243a2c83e60d7a18c4847d07ef6c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__329e565/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__329e565/annotation.yaml", - "hashed_secret": "6f83d2132d44a7e254b713fe5b9409c96da88a50", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__329e565/annotation.yaml", - "hashed_secret": "a4213e7cd0e94eb4070953e0f389e52423cb2596", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__329e565/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__329e565/patch.diff", - "hashed_secret": "e273cd25dbd259ef56fd21eee093689ae73f8de5", - "is_verified": false, - "line_number": 2802 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__329e565/patch.diff", - "hashed_secret": "7c1ab36da1c8f7e7143a976b1fca09114eec7d6c", - "is_verified": false, - "line_number": 2803 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__329e565/patch.diff", - "hashed_secret": "d79bfab9c34d81aa80c77a56b28c45682744a86f", - "is_verified": false, - "line_number": 2807 - } - ], - "datasets/dcbench/v1/instances/gitpod__3777268/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/annotation.yaml", - "hashed_secret": "7830cd6147c4a55c32337ee51d514312c12b9090", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/annotation.yaml", - "hashed_secret": "24305f4658fca6f5310ee6673dcb4694e3bbd8b0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__3777268/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/patch.diff", - "hashed_secret": "6df0130410a34d6355f17c422f7b2f7ae9feae66", - "is_verified": false, - "line_number": 340 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/patch.diff", - "hashed_secret": "f5eec28923713d157adfea71f96f788e5cfee059", - "is_verified": false, - "line_number": 471 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/patch.diff", - "hashed_secret": "90e9dba6c8536a2cbb4562f84804e4213f88a8f7", - "is_verified": false, - "line_number": 645 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__3777268/patch.diff", - "hashed_secret": "47c5fd6cb854a9933d641f62e301658e5e1b7560", - "is_verified": false, - "line_number": 649 - } - ], - "datasets/dcbench/v1/instances/gitpod__41f47c8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/annotation.yaml", - "hashed_secret": "039b11f2d6d9caab467488a75c4817420b149b57", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/annotation.yaml", - "hashed_secret": "2982b85fa8fe8e1ea16db10ceee7c086c409ca7c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "0f674908b6342fcf2a9842d04699cb008d57d399", - "is_verified": false, - "line_number": 443 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "f611e0ec1899290a14106c45b947af9f54877e17", - "is_verified": false, - "line_number": 2158 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "640c643f55d8cd6a05bc534838135c04bbbe0874", - "is_verified": false, - "line_number": 3125 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "796321a4c47b4186e5c39a9ee3dcb11b5b832de2", - "is_verified": false, - "line_number": 3164 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "955a9eb768c4d7027bfe6b96652cd8113bc7f08f", - "is_verified": false, - "line_number": 3258 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "983e5b9c8bfba64cf11a625066fda86bf67c99b8", - "is_verified": false, - "line_number": 3297 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "54952e7dd7ff0f0df0843d4c10ae26ee74201cfa", - "is_verified": false, - "line_number": 3984 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "7e482cb908dd176778f8ed1528a7c3a30d51568f", - "is_verified": false, - "line_number": 3989 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "175e4a9a5264813a7c7ba427ff699085674d4c7a", - "is_verified": false, - "line_number": 3990 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__41f47c8/patch.diff", - "hashed_secret": "50018d8c783f2eddec52e3649edad21fc496c1e1", - "is_verified": false, - "line_number": 3991 - } - ], - "datasets/dcbench/v1/instances/gitpod__478a75e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__478a75e/annotation.yaml", - "hashed_secret": "f2343da7277903cb4b1332dc36336a51034fb2bc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__478a75e/annotation.yaml", - "hashed_secret": "257a8210338e4119150fef3c4a51b677d31f9392", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__4a7a7ab/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/annotation.yaml", - "hashed_secret": "679e2a28781e6a52c6cb8ecfeb9ef00e49600b69", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/annotation.yaml", - "hashed_secret": "d5bfd3589c764bf424dcccef4fce9cbfad4e863d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "67fd4691c9655b7ac35f62da7ba36ab783de75f2", - "is_verified": false, - "line_number": 5586 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "ab96deea6e2f3e6e3f3282e80d263e763af3abb7", - "is_verified": false, - "line_number": 5586 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "4242f7bd3cabc50be147229d3ac2afe0f96b8ea3", - "is_verified": false, - "line_number": 5587 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "45e232d91bc8d979a6ea6e5bab8e7a7b7fa66942", - "is_verified": false, - "line_number": 5588 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "462637363f6915a2e171de666ab09ac24e93a156", - "is_verified": false, - "line_number": 5588 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "52f9b56b6aaeb884fddf8c71b6cac49e41d73027", - "is_verified": false, - "line_number": 5614 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "89490b4a81cb32d7de1e54491ccbc8b835977eb0", - "is_verified": false, - "line_number": 5614 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "3c0961881fd990aa4ccc142db7a662805afe4ae8", - "is_verified": false, - "line_number": 5615 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "628a23df57cb7c5da72f58b71a2ed8b402fda9a3", - "is_verified": false, - "line_number": 5615 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "f8feae18e079f8f585750e305169503d85691e88", - "is_verified": false, - "line_number": 5616 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "b5911aab158662bb85e60235741e0c17e79d25b7", - "is_verified": false, - "line_number": 5650 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "d630b9674bff0578d24430c3db18f7da13297671", - "is_verified": false, - "line_number": 5650 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "308f77fc522083bab8db9afeeccec333dc21aea2", - "is_verified": false, - "line_number": 5651 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "ad661bcac02bfd4011ce0ac8b39dfc37dde238a4", - "is_verified": false, - "line_number": 5651 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "e9cf19a6f749db52dc6e9ca212f5900a9cbc1c42", - "is_verified": false, - "line_number": 5652 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "364fd5ec20c30eb4ead8a2e4adcfa26610c2f160", - "is_verified": false, - "line_number": 5677 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "f1a877d5de512cb9548ef8addeb5505edf285262", - "is_verified": false, - "line_number": 5677 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "7b025646a48bbf2252916aca6edb5cfb71ad52d2", - "is_verified": false, - "line_number": 5678 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "b7d56505e0e346004a06cfede5adb2f59fbf64cb", - "is_verified": false, - "line_number": 5678 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "945c1776763e2c198b3154a1976fba79b54c848d", - "is_verified": false, - "line_number": 5679 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "e4075380756e1b26632640ed614cac2575425afe", - "is_verified": false, - "line_number": 5704 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "f37599b8c36cccb4c790b7a6e36921c0ce966e56", - "is_verified": false, - "line_number": 5704 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "e6e5efa67008ffd350749aa850c6a114be3ac248", - "is_verified": false, - "line_number": 5705 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "f43a2d0fdc8d25dbcc232dc394d89ee9878799db", - "is_verified": false, - "line_number": 5705 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "fb4be77e0b643ad84ecc8895c7ac4451e8e34c77", - "is_verified": false, - "line_number": 5706 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "47e055b65e49064c55a56b70bc02b55ac3a45c6e", - "is_verified": false, - "line_number": 5801 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "c20e7a8dba961d55fe72164b6a01a1625e8bbdad", - "is_verified": false, - "line_number": 5801 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "2086882f0a562a113a636e34cb9cbd00f8ac12a1", - "is_verified": false, - "line_number": 5802 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "547424b4a7c9403627de6eeda5ccf951cf7a6c73", - "is_verified": false, - "line_number": 5802 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "525b9bd3ebc5b75cb161cbfeb81eedf419d038a4", - "is_verified": false, - "line_number": 5803 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__4a7a7ab/patch.diff", - "hashed_secret": "d79bfab9c34d81aa80c77a56b28c45682744a86f", - "is_verified": false, - "line_number": 9553 - } - ], - "datasets/dcbench/v1/instances/gitpod__52848de/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__52848de/annotation.yaml", - "hashed_secret": "d92918069f464fcc8b7bbc00d24c934726248160", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__52848de/annotation.yaml", - "hashed_secret": "e6d127c0e9962a6bdfaa06579a5055672f053708", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__55b486e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__55b486e/annotation.yaml", - "hashed_secret": "40f4add1cc8984009add6d38a968217064e909b0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__55b486e/annotation.yaml", - "hashed_secret": "28bdf249771892b31bee316f1133be0a77cb4027", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__55b486e/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__55b486e/patch.diff", - "hashed_secret": "38abee7dd2184be0be50b7668421d62165ca3cb3", - "is_verified": false, - "line_number": 2426 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__55b486e/patch.diff", - "hashed_secret": "accc71d6a6164e768adce782692b5729ef5bb65e", - "is_verified": false, - "line_number": 2619 - } - ], - "datasets/dcbench/v1/instances/gitpod__6b2187a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__6b2187a/annotation.yaml", - "hashed_secret": "33d9dda514baa86771bea420a4e625c995f24643", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__6b2187a/annotation.yaml", - "hashed_secret": "c83e3ddbebd140f33c46bb0ff9804b513f2f3277", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__6b2187a/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__6b2187a/patch.diff", - "hashed_secret": "17c5926bae2ff6e9384fac78372f6bb35da233f6", - "is_verified": false, - "line_number": 2695 - } - ], - "datasets/dcbench/v1/instances/gitpod__6d93dd8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__6d93dd8/annotation.yaml", - "hashed_secret": "c01f1bbc85effd4dc8c32cdfc04878d8f49feae7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__6d93dd8/annotation.yaml", - "hashed_secret": "a5a6304dfc827bb109bc3a3dd2b563002bfed272", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__7094f19/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7094f19/annotation.yaml", - "hashed_secret": "bedc53875f92007ed45ac1b0e80f1e618374124f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7094f19/annotation.yaml", - "hashed_secret": "5099d9e353d7dd8b7fb58f7722b0e6eaa51ddbb0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__7172d82/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7172d82/annotation.yaml", - "hashed_secret": "a5a6304dfc827bb109bc3a3dd2b563002bfed272", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7172d82/annotation.yaml", - "hashed_secret": "1c0f3301dc8b00b3b5e03cfd7ccf480210bec607", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__756c5b0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__756c5b0/annotation.yaml", - "hashed_secret": "0330abb00d756544962184d3fbb19d6d3509eec5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__756c5b0/annotation.yaml", - "hashed_secret": "164a3fcbed7a558f43a1fc3c778209c6e5f103b2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__79b75ab/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__79b75ab/annotation.yaml", - "hashed_secret": "6ad263863139f5afa4c17832c037954176237bf7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__79b75ab/annotation.yaml", - "hashed_secret": "727f12673689dee3b01ac0ee72ff0fe109c366de", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__79b75ab/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__79b75ab/patch.diff", - "hashed_secret": "d18b645ce53437bcd19ba9d12bda6ac244c375a8", - "is_verified": false, - "line_number": 1267 - } - ], - "datasets/dcbench/v1/instances/gitpod__7f43d48/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7f43d48/annotation.yaml", - "hashed_secret": "bbfd2aa2de7cd50858603d65c7569262eb6d6e08", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__7f43d48/annotation.yaml", - "hashed_secret": "0f2facc48f84e6edd83359bfab591d96ba25e394", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__82d786e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/annotation.yaml", - "hashed_secret": "dd7290ab3d58a4f3a277db01ac7dd8de871f01f9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/annotation.yaml", - "hashed_secret": "712f6f017ea81566e43802716035d17ebd9a0235", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff", - "hashed_secret": "52c8d0758ec5e3422b4d406f4f0d8c7c6c9038c2", - "is_verified": false, - "line_number": 9321 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff", - "hashed_secret": "53f694091cc479f0fa463d81ff977163c116f814", - "is_verified": false, - "line_number": 9321 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff", - "hashed_secret": "a5cd27eb8f3297d0856fb1e8685bd537b6c0a585", - "is_verified": false, - "line_number": 9321 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff", - "hashed_secret": "9702308351eba4c04fa14be77e8021a57c9163d4", - "is_verified": false, - "line_number": 9526 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__82d786e/patch.diff", - "hashed_secret": "a3919f89c6d38c1ee6b7b972f7ce884adc7c11e0", - "is_verified": false, - "line_number": 9526 - } - ], - "datasets/dcbench/v1/instances/gitpod__836c620/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__836c620/annotation.yaml", - "hashed_secret": "4ce96d950d2594c22b2f6c42cb7d6103323331f7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__836c620/annotation.yaml", - "hashed_secret": "e033308e6f2d88de9be61b36ce44b38b7b1e07f0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__8f643e7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__8f643e7/annotation.yaml", - "hashed_secret": "9b7b35c2c4e40c1b6eb667fe811fa13223c6d749", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__8f643e7/annotation.yaml", - "hashed_secret": "b443ca18a03aca4a8134b770b0f4402c0ee5b6ac", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__99cc66b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__99cc66b/annotation.yaml", - "hashed_secret": "4a05c77b1f8afd0d3a9697b7024e80b41d485071", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__99cc66b/annotation.yaml", - "hashed_secret": "3d1cf2512072c7690b1e3bd23a18a30706e5d921", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__a0e4fa6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a0e4fa6/annotation.yaml", - "hashed_secret": "64d71b6e460e75ad2d9c6113184a8473efa63b3c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a0e4fa6/annotation.yaml", - "hashed_secret": "0fdb43d45fdd72b99768cf78795e6073215c3be1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__a0e4fa6/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__a0e4fa6/patch.diff", - "hashed_secret": "e273cd25dbd259ef56fd21eee093689ae73f8de5", - "is_verified": false, - "line_number": 8693 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a0e4fa6/patch.diff", - "hashed_secret": "b4bc2175e4642d9d878906167feaa21f808a5440", - "is_verified": false, - "line_number": 9836 - } - ], - "datasets/dcbench/v1/instances/gitpod__a303660/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a303660/annotation.yaml", - "hashed_secret": "95261c725fe9d65c127dae9db495dd51b61b2337", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a303660/annotation.yaml", - "hashed_secret": "ea4cf47d8fa5e4ee23b83c000c2db1a7ec96c06a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__a303660/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a303660/patch.diff", - "hashed_secret": "fd3744fbf7e7cee90f16a3b5d97ce340f3fa92a9", - "is_verified": false, - "line_number": 7447 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a303660/patch.diff", - "hashed_secret": "cd7a71a6868bf27d6cf63abfb0529fcbf5e3bce1", - "is_verified": false, - "line_number": 7630 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__a303660/patch.diff", - "hashed_secret": "e362505ba9cac7cfc048f04ec8ecee2c08c4e188", - "is_verified": false, - "line_number": 7666 - } - ], - "datasets/dcbench/v1/instances/gitpod__ad4b7a8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__ad4b7a8/annotation.yaml", - "hashed_secret": "45988c68c9460e7b0373d039356eca4226aca0e5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__ad4b7a8/annotation.yaml", - "hashed_secret": "718f0b1ba14d5d26b8ec0c18ed234cbae383c8ea", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__cdc11be/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__cdc11be/annotation.yaml", - "hashed_secret": "e4c8a502396fc4e2e3ee32f66b9f769491f3856c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__cdc11be/annotation.yaml", - "hashed_secret": "5f5c720536fc2de3dd4c2e501eb026ed99d713ca", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__cdc11be/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__cdc11be/patch.diff", - "hashed_secret": "37c485f7a98bfaae53f5e25a90208ba6650a8ea1", - "is_verified": false, - "line_number": 351 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__cdc11be/patch.diff", - "hashed_secret": "abcfe4d4b96579017c9940309ec5e050af0a7404", - "is_verified": false, - "line_number": 362 - } - ], - "datasets/dcbench/v1/instances/gitpod__d54bd04/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__d54bd04/annotation.yaml", - "hashed_secret": "18d5da683fac6a62fde70191c7cc8b37500d8b4f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__d54bd04/annotation.yaml", - "hashed_secret": "2fce6160a1adca669b5a47e719c6ddb5251e6fd4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__d54bd04/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__d54bd04/patch.diff", - "hashed_secret": "38abee7dd2184be0be50b7668421d62165ca3cb3", - "is_verified": false, - "line_number": 6535 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__d54bd04/patch.diff", - "hashed_secret": "461b04f67e270a8f0daa061e721f329fcd6231b9", - "is_verified": false, - "line_number": 6637 - } - ], - "datasets/dcbench/v1/instances/gitpod__da4cafd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__da4cafd/annotation.yaml", - "hashed_secret": "89664970e85e083389820078d80de169ea2a2fe3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__da4cafd/annotation.yaml", - "hashed_secret": "3479b15f79d0b8f664b69834e7912cfc7c1b1119", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__da4cafd/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__da4cafd/patch.diff", - "hashed_secret": "1652b92370930350845ad479f936f28cc232231c", - "is_verified": false, - "line_number": 1599 - } - ], - "datasets/dcbench/v1/instances/gitpod__dd50c2a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__dd50c2a/annotation.yaml", - "hashed_secret": "04bcad60f1eab345ed4ff60b103d92df5b0bc842", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__dd50c2a/annotation.yaml", - "hashed_secret": "d91266b795f7f55675ac15f19d778d6d83536ed2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__e9aae6e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__e9aae6e/annotation.yaml", - "hashed_secret": "6360ea55f4cdc324499a5a1a7c243b595367175d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__e9aae6e/annotation.yaml", - "hashed_secret": "617f98f03e09044be92e8b67d7c582296cfb4ddf", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__ec6b911/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__ec6b911/annotation.yaml", - "hashed_secret": "facd0cf6ae40261e88ffecb434b9d6cf20b36aec", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__ec6b911/annotation.yaml", - "hashed_secret": "46ba162abe94bddf6fb6487076112ccb11462031", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__ec6b911/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__ec6b911/patch.diff", - "hashed_secret": "d79bfab9c34d81aa80c77a56b28c45682744a86f", - "is_verified": false, - "line_number": 3516 - } - ], - "datasets/dcbench/v1/instances/gitpod__f580e6b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/annotation.yaml", - "hashed_secret": "2eb92e9ddf315acb6ec50503e84eb338ec7ca77b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/annotation.yaml", - "hashed_secret": "00a2fc3fe5048c310f9675d543bdf96c601fa84b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff", - "hashed_secret": "120340c3d011e9621b9bb88b5884221b25251b88", - "is_verified": false, - "line_number": 626 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff", - "hashed_secret": "7a0a0bed59061e5afde096d3177c25e00c0ef5f6", - "is_verified": false, - "line_number": 626 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff", - "hashed_secret": "bc926b840542fd343f66b944ede6cff201d3ef9c", - "is_verified": false, - "line_number": 1610 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff", - "hashed_secret": "8843d7f92416211de9ebb963ff4ce28125932878", - "is_verified": false, - "line_number": 1715 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/gitpod__f580e6b/patch.diff", - "hashed_secret": "aeeb8b627e3d43cddd58969c43a72966268e4e40", - "is_verified": false, - "line_number": 1722 - } - ], - "datasets/dcbench/v1/instances/home-assistant__212cecd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__212cecd/annotation.yaml", - "hashed_secret": "767caed7b754b71a5b525f1e3d0a66d8c8bac690", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__212cecd/annotation.yaml", - "hashed_secret": "0cd265449c0137fa6f34df653ab81f59e14712a2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__21e51b8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__21e51b8/annotation.yaml", - "hashed_secret": "3f41e29e2806572ee52b988f8720698ff29226f8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__21e51b8/annotation.yaml", - "hashed_secret": "bd1eb709064baf6be6050d82fae71a64edd967ac", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__2384efa/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2384efa/annotation.yaml", - "hashed_secret": "1d808153cc96ae332b0c17294394da3d23649dad", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2384efa/annotation.yaml", - "hashed_secret": "6e6031551534d5c2d9a1d97123b1e86f2016e8c9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__2707686/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2707686/annotation.yaml", - "hashed_secret": "f61afd758c83db4b554f9f367bac2ec5a0d17d16", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2707686/annotation.yaml", - "hashed_secret": "45984a0f4c869361ce028cd21c3478e11c1f5539", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__2ed386f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2ed386f/annotation.yaml", - "hashed_secret": "4c274479b188529da866c81a2326333c93033e24", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__2ed386f/annotation.yaml", - "hashed_secret": "6e5df547892b4d5f0dee2a9ce72055f62bf2a850", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__35397b8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__35397b8/annotation.yaml", - "hashed_secret": "ad5e7197d78e66d88ac7376a130cab0046742727", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__35397b8/annotation.yaml", - "hashed_secret": "6288d2e016e6e15d1ea9356769a3d39b67d7c6e8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__3b25b4c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__3b25b4c/annotation.yaml", - "hashed_secret": "f6873f0ecd4e5d4f803799b2c72ff7035bdf1241", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__3b25b4c/annotation.yaml", - "hashed_secret": "0ce2c860cc09a2b0eea3198275c3c2b9d32342b4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__3ba52a4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__3ba52a4/annotation.yaml", - "hashed_secret": "4cbfc6720836a3ca6845cf85246a72fe43b73ef2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__3ba52a4/annotation.yaml", - "hashed_secret": "8fca6e095545b577279b35307c0c98064f938f64", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__6d55c07/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__6d55c07/annotation.yaml", - "hashed_secret": "a6e0dce4eb497bf867616e67797bd622cc659d27", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__6d55c07/annotation.yaml", - "hashed_secret": "58d400fa45b70a7a690b8e692670475358802fee", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__6d55c07/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__6d55c07/patch.diff", - "hashed_secret": "63606738fabe66dad3338113ac9a8ee856a6a88d", - "is_verified": false, - "line_number": 667 - } - ], - "datasets/dcbench/v1/instances/home-assistant__8f465cf/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__8f465cf/annotation.yaml", - "hashed_secret": "17b5615a2c6990bc91c13caa05d533516befcdf1", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__8f465cf/annotation.yaml", - "hashed_secret": "1d1e9ea16d709421eadb602ce9335c21a7c7ff6f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__9dd1a59/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__9dd1a59/annotation.yaml", - "hashed_secret": "bc10195621128896af79ed71b832b6d503405188", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__9dd1a59/annotation.yaml", - "hashed_secret": "cbe55a04a21fa2dffe486b9d0455a12cf9cbda04", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__b7b147c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7b147c/annotation.yaml", - "hashed_secret": "02b0cdf462e69b9be61ba317d117b6af299a52c0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7b147c/annotation.yaml", - "hashed_secret": "96329fead5a160498f51f200d72af96d7422e6b0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__b7f1171/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7f1171/annotation.yaml", - "hashed_secret": "705c40bdff70fbc73207fc1ac1432e6f3656d884", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7f1171/annotation.yaml", - "hashed_secret": "9429e77f88afa795962181e5a5927b75df29a638", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__b7f1171/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7f1171/patch.diff", - "hashed_secret": "52af1d574937aa1f37a83570aa7dab5a3f2a5295", - "is_verified": false, - "line_number": 47 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7f1171/patch.diff", - "hashed_secret": "8337ff838bcb8ce58fbe584a2e8b264b6a5b55f6", - "is_verified": false, - "line_number": 49 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__b7f1171/patch.diff", - "hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f", - "is_verified": false, - "line_number": 87 - } - ], - "datasets/dcbench/v1/instances/home-assistant__bc6060f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__bc6060f/annotation.yaml", - "hashed_secret": "b6a02f9812723140f3ff93b3f9b080007ec064fb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__bc6060f/annotation.yaml", - "hashed_secret": "5e27c6608c35ab1b2848b72619f3a6aec90f2a1c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__c50d064/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__c50d064/annotation.yaml", - "hashed_secret": "b4192deb9ad2b7033e80d1c116e5e56eafc7fff4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__c50d064/annotation.yaml", - "hashed_secret": "4b9c25afa61aa6e7edcb845db8071c0c38e2f36f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__c829331/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__c829331/annotation.yaml", - "hashed_secret": "bcc31e4cc99291938efedbe9a227670ab2dc3e28", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__c829331/annotation.yaml", - "hashed_secret": "712447d08b654389cb3f0d52c8142650698e39cc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__c829331/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__c829331/patch.diff", - "hashed_secret": "86c15762a17714dcb159472c56cafc354cdc41ba", - "is_verified": false, - "line_number": 92 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__c829331/patch.diff", - "hashed_secret": "5eb942810a75ebc850972a89285d570d484c89c4", - "is_verified": false, - "line_number": 1254 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__c829331/patch.diff", - "hashed_secret": "4570626911a50a8af13b824082d8963001dd6613", - "is_verified": false, - "line_number": 1272 - } - ], - "datasets/dcbench/v1/instances/home-assistant__cb021f0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__cb021f0/annotation.yaml", - "hashed_secret": "8b35469008b3adc6f424059c1d63d333ddbe273a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__cb021f0/annotation.yaml", - "hashed_secret": "c34dc6a2bacd5aaff86997a00cd26b1485f64ce3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__cb35849/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__cb35849/annotation.yaml", - "hashed_secret": "5d3c677fbc0e9cddb46359cb2431858784aeaa46", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__cb35849/annotation.yaml", - "hashed_secret": "cf69e6c63f9443d20ef29e15598db59ccc967f87", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__d1275c1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d1275c1/annotation.yaml", - "hashed_secret": "e6cd7e666d1738a7e515fca789c54398095380dc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d1275c1/annotation.yaml", - "hashed_secret": "b29499f9731345ed83b33b86336b6e237b85b268", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__d325f67/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d325f67/annotation.yaml", - "hashed_secret": "a124f2d8f11f19d19c247426fa6b55743e9435f8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d325f67/annotation.yaml", - "hashed_secret": "ebda97aad73f8217b97d8688b20a0a1196b9c3e1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__d40eeee/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d40eeee/annotation.yaml", - "hashed_secret": "ef14459f62ebf09799f6a901487842cf4af18a08", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__d40eeee/annotation.yaml", - "hashed_secret": "3a5a0e43cc2bb86985734c10e5508276457aba16", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__e056c7d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__e056c7d/annotation.yaml", - "hashed_secret": "654abeccedfdfacda59dbd422d5c9da8c31e8a82", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__e056c7d/annotation.yaml", - "hashed_secret": "2efbe522a61c253a315044bf29db8cb5876268e4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/annotation.yaml", - "hashed_secret": "646284b72bf131921915dd4290ba67cb5262c2d9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/annotation.yaml", - "hashed_secret": "b570537759de6aa0caaabc7045faa92bd1006567", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/patch.diff", - "hashed_secret": "07d16365ab3105e44d94d2087f15555b4a36aa5f", - "is_verified": false, - "line_number": 551 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__ee2fb6e/patch.diff", - "hashed_secret": "789cbe0407840b1c2041cb33452ff60f19bf58cc", - "is_verified": false, - "line_number": 718 - } - ], - "datasets/dcbench/v1/instances/home-assistant__fd21674/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__fd21674/annotation.yaml", - "hashed_secret": "748a36501cfd49eea1620126b4e663b985861ab8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__fd21674/annotation.yaml", - "hashed_secret": "75701da00cac53409c642521e83eb837208a5fb1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/home-assistant__fd21674/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__fd21674/patch.diff", - "hashed_secret": "f4d53f4909fd53428ca447fec4221a255bb2fd5e", - "is_verified": false, - "line_number": 916 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/home-assistant__fd21674/patch.diff", - "hashed_secret": "b18d81d9d26109ca2c635f3e91d80eaf6539825f", - "is_verified": false, - "line_number": 1059 - } - ], - "datasets/dcbench/v1/instances/home-assistant__ff3a801/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__ff3a801/annotation.yaml", - "hashed_secret": "24b046a09a28f9fae1e2627484b24528a046e6d0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/home-assistant__ff3a801/annotation.yaml", - "hashed_secret": "e7d397fb7737b324dec78e50639b05e5718a757f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__078f462/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__078f462/annotation.yaml", - "hashed_secret": "23ad981607704c2861c8e24141927f582a9504d8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__078f462/annotation.yaml", - "hashed_secret": "bfb61e7447bf8147bc02d43e7a0a4a3fc52f0b30", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__09a1abd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__09a1abd/annotation.yaml", - "hashed_secret": "b529c79b36e6f5668658f3c70846a9b0012e0fd2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__09a1abd/annotation.yaml", - "hashed_secret": "e22376adf603831b0e218df5414111751be0faf9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__1acfb8e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__1acfb8e/annotation.yaml", - "hashed_secret": "0cd25810b6d0ad0ff921d346a22be5720505ef97", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__1acfb8e/annotation.yaml", - "hashed_secret": "c0cb5c517b37861ae69fd8ff4c83559471b8b4e4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__1d4f88b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__1d4f88b/annotation.yaml", - "hashed_secret": "f478e6e66f28c4b05f81b403e61e3e097beb6f93", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__1d4f88b/annotation.yaml", - "hashed_secret": "adeedf3ef9825e1eb06452532c5d73d2e5a86487", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__29601b8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__29601b8/annotation.yaml", - "hashed_secret": "a908995f190354dbdcbf62af0278c28037315909", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__29601b8/annotation.yaml", - "hashed_secret": "22f387ec2977d24e73139c881f64c3ff17906b10", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__29fad38/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__29fad38/annotation.yaml", - "hashed_secret": "67d11b461f48586904ddb1e5e876eac2e4c67b03", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__29fad38/annotation.yaml", - "hashed_secret": "5c6c9de204b5917a889cc848e9302e4653db993b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__3902f56/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__3902f56/annotation.yaml", - "hashed_secret": "dc50814cbdfe58dea5e404154cee699bd8d5ad48", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__3902f56/annotation.yaml", - "hashed_secret": "a7168481e9d13548491dcca1183bb9887b845f53", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__45dfb46/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__45dfb46/annotation.yaml", - "hashed_secret": "fad53ef0760a41a3566b2dd38123494d89c68926", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__45dfb46/annotation.yaml", - "hashed_secret": "0fe45b0967ab684e93cf2b66f8794bd97ae3b595", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__4bdaf6c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__4bdaf6c/annotation.yaml", - "hashed_secret": "e98c8b1333b161d42de9a6454239fb3ad2aaba19", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__4bdaf6c/annotation.yaml", - "hashed_secret": "f57818897b8ac523a4b7da2d729184a527384078", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__4e592f6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__4e592f6/annotation.yaml", - "hashed_secret": "5e530dfc2bff5b69f9d335a1a1937e767123078d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__4e592f6/annotation.yaml", - "hashed_secret": "26bf0d5fc58ad78275481ea51ba7345530ccfc46", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__5505c01/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__5505c01/annotation.yaml", - "hashed_secret": "a544e725dd72be62bd756f340b6efb01b2ea3ce6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__5505c01/annotation.yaml", - "hashed_secret": "cd9175f1a634b23381deb6994aa88863657de4d6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__566dc7f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__566dc7f/annotation.yaml", - "hashed_secret": "f111d9222817fc34b4ac80c0b3ef2cb3fffdbe95", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__566dc7f/annotation.yaml", - "hashed_secret": "227ec27b7d38fdff11ed52e49fbf791135860f2d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__81c0b9c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__81c0b9c/annotation.yaml", - "hashed_secret": "e0261e8253737ecab344053aec72a58ddd380049", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__81c0b9c/annotation.yaml", - "hashed_secret": "fd1926c6c060faf025bcb78bee895595efb5d235", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__8ad3397/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__8ad3397/annotation.yaml", - "hashed_secret": "1a29e3a1f974378c33afc08d635bdd30fbfb416f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__8ad3397/annotation.yaml", - "hashed_secret": "ece0e0d51ce34d62306233dec6bec5ef0be3a2f3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__99dbd85/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__99dbd85/annotation.yaml", - "hashed_secret": "5efa7a8e7f5a51fb77860fb8e046afce3d6775b7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__99dbd85/annotation.yaml", - "hashed_secret": "d02bf813b255362c9c53294503f43ddd4bb45dff", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__b7c4f21/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__b7c4f21/annotation.yaml", - "hashed_secret": "cd9175f1a634b23381deb6994aa88863657de4d6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__b7c4f21/annotation.yaml", - "hashed_secret": "ce8e7dd4b435062384bb9665cae4aa83e672a287", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__be5d632/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__be5d632/annotation.yaml", - "hashed_secret": "c0cb5c517b37861ae69fd8ff4c83559471b8b4e4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__be5d632/annotation.yaml", - "hashed_secret": "ded622048fd892e4589b95fc1b7e6dbb6c2c365d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__d43dc1a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__d43dc1a/annotation.yaml", - "hashed_secret": "690b5bd2fc59ff95483f7a62ebd8b63dbde4a238", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__d43dc1a/annotation.yaml", - "hashed_secret": "36706f162c80b7f828adc36b52092e995c582f75", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__db9fcfe/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__db9fcfe/annotation.yaml", - "hashed_secret": "15705dc8c92ee10a0acfe2d0876f3b2881571ca9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__db9fcfe/annotation.yaml", - "hashed_secret": "5d64ae3c84203f6794f6fe2492a2981f570cb1c9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__eaee6b6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__eaee6b6/annotation.yaml", - "hashed_secret": "e33e4d68015c1335adc87917cf0a0422eea2fd93", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__eaee6b6/annotation.yaml", - "hashed_secret": "bcb93bbe2cd3fc6b7ce14a8636c5777cc4eb7474", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__ec84379/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__ec84379/annotation.yaml", - "hashed_secret": "2887fd37fab1802b797b3cceddaad0ca62c26c91", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__ec84379/annotation.yaml", - "hashed_secret": "a5a69ff001fdc13b8069fe4f7a5fe8f270c63c36", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__ee8c265/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__ee8c265/annotation.yaml", - "hashed_secret": "737780f1d5431ef91ff2e8efb2d204579e498ffc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__ee8c265/annotation.yaml", - "hashed_secret": "2397298751e1b2d4dc360ac338e7a781d20751dc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/kubernetes__f8e8e55/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__f8e8e55/annotation.yaml", - "hashed_secret": "9df78910127538b0cbf67066480845e2a8e4e357", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/kubernetes__f8e8e55/annotation.yaml", - "hashed_secret": "9532730860d147a161971ec339ff1f4eb4999f80", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__01ea42c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__01ea42c/annotation.yaml", - "hashed_secret": "3085f94e4bc9ab2d2762b4879c491563c61e1d5c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__01ea42c/annotation.yaml", - "hashed_secret": "52ce329982d0207e7ccf5db3ec241843192ad8ac", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__19b25f3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__19b25f3/annotation.yaml", - "hashed_secret": "bc77d04cded4288cfa3b5ec394809c92b4544810", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__19b25f3/annotation.yaml", - "hashed_secret": "aff74e21ac2b5534a213cadcf5cb94a7bd8cc39f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__2234b84/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2234b84/annotation.yaml", - "hashed_secret": "0a09b3a7b72e4e097973c81b26380de6d118950e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2234b84/annotation.yaml", - "hashed_secret": "b4946cfff111c9d958691d382f6f816c644707bf", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__2a7d0ed/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2a7d0ed/annotation.yaml", - "hashed_secret": "efef60a4cc6840deba923404f689173351eff4ac", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2a7d0ed/annotation.yaml", - "hashed_secret": "58ce3f2dd1ff7bb39ff2e7d415ace10afea49639", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__2f85bbe/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2f85bbe/annotation.yaml", - "hashed_secret": "2ede749bb3d9eb1fbe87fa6a779746e544c51b5b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__2f85bbe/annotation.yaml", - "hashed_secret": "335aba4a551638d63e320fe6cf3c68b6ebeb9358", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__34d808b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__34d808b/annotation.yaml", - "hashed_secret": "b31db579bdc0e83b2011315effcf72ba021130e6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__34d808b/annotation.yaml", - "hashed_secret": "16ee8639af986d3d6eaf3901a0972a3cc23503f3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__523e679/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__523e679/annotation.yaml", - "hashed_secret": "6ec27a7ef57170fe6bd4be9998c4d9d52d25b92c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__523e679/annotation.yaml", - "hashed_secret": "081cddf4742da8a02780c4a4536d271250103d21", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__5c92b40/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__5c92b40/annotation.yaml", - "hashed_secret": "6f87504666f5ea1d60489c0807983a6bf907b27a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__5c92b40/annotation.yaml", - "hashed_secret": "846ced64489f90c3e204a30c7abd3e7b97feb50b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__65b40e6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__65b40e6/annotation.yaml", - "hashed_secret": "7f9ef4a42e67ea085f173e7a322e62bd0782a549", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__65b40e6/annotation.yaml", - "hashed_secret": "9af8fd6ed4fd46535286e3eb1a6250f3cb03e6f3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__6bf2a6f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__6bf2a6f/annotation.yaml", - "hashed_secret": "82fe934f9aaa1714cf811fd21734e15f77a7d268", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__6bf2a6f/annotation.yaml", - "hashed_secret": "fa095060a5d16969d2d3524e406c5cf539b99708", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__7028922/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__7028922/annotation.yaml", - "hashed_secret": "0b4378de08be188a5baf89e9b9c5469fab26dba2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__7028922/annotation.yaml", - "hashed_secret": "58db351f41620529400f313ba1fca4ea59bf237f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__71ac4db/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__71ac4db/annotation.yaml", - "hashed_secret": "ae12c8380a16db9917c9f37e8f1ef6f87f5d349f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__71ac4db/annotation.yaml", - "hashed_secret": "a2fe8662225adfd79d01c7ba98955612e23c8ad2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__737f58e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__737f58e/annotation.yaml", - "hashed_secret": "e0ed1add3e4b85f4ddc6187543f46b18907676e5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__737f58e/annotation.yaml", - "hashed_secret": "56ab9c52c7918c6d792233864b8a050a1d0b01eb", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__98f8224/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__98f8224/annotation.yaml", - "hashed_secret": "d86724095756bde0e4e6a925b3fc29494fa1df89", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__98f8224/annotation.yaml", - "hashed_secret": "70ac7a03e27cf0ac22ee893ac865c459580689d4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__ae82636/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ae82636/annotation.yaml", - "hashed_secret": "c07684c353e90e80f8274f5742f4da61e79cc0ea", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ae82636/annotation.yaml", - "hashed_secret": "eca5f1fbeaa204c8cb82550f4204bd32bb698b61", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__b280d57/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__b280d57/annotation.yaml", - "hashed_secret": "d89d91548541037d6b07ddabb610e3f71254b7ce", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__b280d57/annotation.yaml", - "hashed_secret": "03c6e9a72ae0ea7e558e7b861622928e5b7dfb61", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__c822a26/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__c822a26/annotation.yaml", - "hashed_secret": "a7e50a817f2e6ebe30b2987dc0bfd1ace30a6100", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__c822a26/annotation.yaml", - "hashed_secret": "d59e5d464abd5ad7ab73ff855a42a0e7e74d3cea", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__ce718e3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ce718e3/annotation.yaml", - "hashed_secret": "1ab768a029b885fe9db67f8b0b6cb411a83f45d4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ce718e3/annotation.yaml", - "hashed_secret": "39869c9c2956c013290f7f6fdbc8461b3256e120", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__d0af4cd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__d0af4cd/annotation.yaml", - "hashed_secret": "24714558c43fe7029d360802161bbe47c1f7c0da", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__d0af4cd/annotation.yaml", - "hashed_secret": "cd52cd41006e334d6d6253ffce311a1097e5d0e9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__de5cf09/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__de5cf09/annotation.yaml", - "hashed_secret": "474906da78ffef122b185ad1ce9ade98084e6461", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__de5cf09/annotation.yaml", - "hashed_secret": "b6f216e2414f456b235b2a137bd44ba0b303f79a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__e80d191/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__e80d191/annotation.yaml", - "hashed_secret": "df6c0149f8b525fd57a2e5c26b6ef7eeb8f1320f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__e80d191/annotation.yaml", - "hashed_secret": "dc50d0742b6b130699241e4ef87c958442a5f6c1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__ead5683/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ead5683/annotation.yaml", - "hashed_secret": "a6ec335fd7eca35fe3f9aca70ab2a6ef2befa585", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__ead5683/annotation.yaml", - "hashed_secret": "6f87504666f5ea1d60489c0807983a6bf907b27a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__fcd1d97/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__fcd1d97/annotation.yaml", - "hashed_secret": "94ae2c75a20c1d549d19119e0beaf557437d3023", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__fcd1d97/annotation.yaml", - "hashed_secret": "90926707714db54f3985861eacbd1aa6b45036d5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/neovim__fd51fb3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__fd51fb3/annotation.yaml", - "hashed_secret": "b18c7e01f053dd4c10a611f733478cc391e9317a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/neovim__fd51fb3/annotation.yaml", - "hashed_secret": "f00cfa4fd8a2e3910fe79b50cb5c1465c70ef1e9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__2bb8c72/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__2bb8c72/annotation.yaml", - "hashed_secret": "8b89a8837454a7425099f4aa848f0214a72f42c3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__2bb8c72/annotation.yaml", - "hashed_secret": "3b009297bd3ceee84a66bf1d8a4b0e7bce0adcaf", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__336c6d2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__336c6d2/annotation.yaml", - "hashed_secret": "c3bfe297014201bac1f9971daecf723f8a19a71f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__336c6d2/annotation.yaml", - "hashed_secret": "5db9174a108e1de87283ead4b402e446dd5b8f35", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__4bbcbc5/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__4bbcbc5/annotation.yaml", - "hashed_secret": "cd24331a9e91c9b30de84d8ae2ea0864b59281ef", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__4bbcbc5/annotation.yaml", - "hashed_secret": "58548e8596780f0a11a45d84f727c4e6d5187c3f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__5b4adf6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__5b4adf6/annotation.yaml", - "hashed_secret": "27cb8cb4f87352ab516d2d0e2a3642bdcb60bf23", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__5b4adf6/annotation.yaml", - "hashed_secret": "9c0e7d5e633a336f4cb030597da23bf222c1f5f1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__754422a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/annotation.yaml", - "hashed_secret": "f4cc9a7edd6edf53d86678b020689a32fe1285a3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/annotation.yaml", - "hashed_secret": "df97a9266e1117a947a782a053ebd01999a735f6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "5d38e92aeafa91e0b0d9dca469391b9cdfe9dcfd", - "is_verified": false, - "line_number": 5733 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "e6a704f77ebd85ea7f3becc033d802b8917348b2", - "is_verified": false, - "line_number": 5741 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "85dab81a9d1c39110510f118cc9cf8f1bdabaa0a", - "is_verified": false, - "line_number": 5766 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "fe7534f5928776711337580b48d4e977f9a5fb74", - "is_verified": false, - "line_number": 5774 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "4b35ff5b44d440d1ca230edd3335485c48bb201f", - "is_verified": false, - "line_number": 5781 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "675fb1ca3e49cd044ce153a61b15bb808d793423", - "is_verified": false, - "line_number": 5789 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "b5fd36cb152dbdcab99e19c16bbe2d9acb80e382", - "is_verified": false, - "line_number": 5797 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "32bda3623a1306cc315190bbb532ead8d9a745d3", - "is_verified": false, - "line_number": 5806 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "0f4835136b5a8b12f63c171e31a0f2a793768fbb", - "is_verified": false, - "line_number": 5819 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "30dff6e111c0a18b53cc71da853bac87f73a816c", - "is_verified": false, - "line_number": 5886 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "c5962ed6f5789d3680c05023e03374ddf3c5a567", - "is_verified": false, - "line_number": 5910 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "79493155bf971702ff00e70c7bd59d1e56c9e40c", - "is_verified": false, - "line_number": 5918 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "2d166cdb8235457ffd9245bf880e8f2d3de0e8d5", - "is_verified": false, - "line_number": 5936 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "c132450e9e0b1e447c8f427ec4a965e16d8382e2", - "is_verified": false, - "line_number": 5944 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "762da446f010b10b3304d4865db3501bc43123eb", - "is_verified": false, - "line_number": 5952 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "1021fa66b9b0c10279353543e8f78701faeca2eb", - "is_verified": false, - "line_number": 5960 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "cfce8fa4c4f7d579808072c1994be0cb20f28514", - "is_verified": false, - "line_number": 5992 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "1a9c505c27a3d51d07d5cd60f1cd51dccb1ce4e6", - "is_verified": false, - "line_number": 6001 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "4ba9f69d01f3275a11f8f1c84a0d61070b5a016c", - "is_verified": false, - "line_number": 6010 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "6e55062a81b0852b021a7e52133b646343a4ae37", - "is_verified": false, - "line_number": 6019 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "b1483bd664007c47d79af14e2a2d11270a68f7dc", - "is_verified": false, - "line_number": 6035 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "f0961e92dc86a02bbc15831f6c1dbbf957931585", - "is_verified": false, - "line_number": 6043 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "858d40ae6c586ebd83416bf96fb2974e1aeec910", - "is_verified": false, - "line_number": 6057 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "9bce265c23d0e46e45bb412575959108a456525e", - "is_verified": false, - "line_number": 6073 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "54a6f26d25f7d5136cf96d59dc30cff7e75feff3", - "is_verified": false, - "line_number": 6089 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "36d23f46717f2f899318ea7eb675b3eab8d4c890", - "is_verified": false, - "line_number": 6098 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "df7caaadaf2de8d6de6f5f7099946cb2cd7bc76a", - "is_verified": false, - "line_number": 6107 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "75ba448e52e97bd198e03132f3e5a232763beefe", - "is_verified": false, - "line_number": 6116 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "8239574b4263502316ae4af75858c8537b8f9dc2", - "is_verified": false, - "line_number": 6132 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "67b4869779f5407b8fa6b08546a6c9a484a93151", - "is_verified": false, - "line_number": 6140 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "50c59d10a709f1912a17c8ef199c8594f3a8f7c5", - "is_verified": false, - "line_number": 6148 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__754422a/patch.diff", - "hashed_secret": "681e4ee7fbfdfa8eb442c4e0db6745d99092be29", - "is_verified": false, - "line_number": 6157 - } - ], - "datasets/dcbench/v1/instances/nextcloud__78fd649/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__78fd649/annotation.yaml", - "hashed_secret": "71172e79a6ed011c11ba2ee70b6aeb5e31a3d977", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__78fd649/annotation.yaml", - "hashed_secret": "9372844aac9dd894841094d863f3f0d1be788936", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__79184f3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__79184f3/annotation.yaml", - "hashed_secret": "433b18d38f7887768536db211c8f7d621af98410", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__79184f3/annotation.yaml", - "hashed_secret": "ca160e0f76f53c93a2c14c2b17be3f0495a4a8a7", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__805fe3e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__805fe3e/annotation.yaml", - "hashed_secret": "35b621bd6303f29749828c0c645ecdb3c94f10d9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__805fe3e/annotation.yaml", - "hashed_secret": "7bc4c38e7545159859bf767b72b33a68f50e7f67", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__81752fc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__81752fc/annotation.yaml", - "hashed_secret": "4c870a18a54e7901f0d5d9183754733acd2a5592", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__81752fc/annotation.yaml", - "hashed_secret": "a5b49e2947f0eaf62449df603223752d26e93ab9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__9680004/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__9680004/annotation.yaml", - "hashed_secret": "813287f80a47421cc4e9349ed1cb7781623edba2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__9680004/annotation.yaml", - "hashed_secret": "f262d1a9eb8b346535e2608568c6f7e219046c71", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__b035766/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__b035766/annotation.yaml", - "hashed_secret": "7fc2397cc698a38911dea336a212c3c7c40b42d4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__b035766/annotation.yaml", - "hashed_secret": "0b5135e58785713d246182399eaabefa5899c79d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__b035766/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/nextcloud__b035766/patch.diff", - "hashed_secret": "3c3b274d119ff5a5ec6c1e215c1cb794d9973ac1", - "is_verified": false, - "line_number": 955 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__b035766/patch.diff", - "hashed_secret": "1d6de1577b08dabff19fdc769dca6c261ec91119", - "is_verified": false, - "line_number": 986 - } - ], - "datasets/dcbench/v1/instances/nextcloud__b0df06d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__b0df06d/annotation.yaml", - "hashed_secret": "41dc250fdf7cf41e8f80a38ff0c681db9f689cb0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__b0df06d/annotation.yaml", - "hashed_secret": "7e9833c705d36baa675bc7ac65f83b46d491a09c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__d5c23db/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__d5c23db/annotation.yaml", - "hashed_secret": "625461fae70f040a8daf79f2a49b0024bc61e2ba", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__d5c23db/annotation.yaml", - "hashed_secret": "aeabf0eca05e856dd6bf784f739d6bee16e69bd6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__d717dd9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__d717dd9/annotation.yaml", - "hashed_secret": "0683a0b50dac24b43b1563dfe738bcd8a150bdd4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__d717dd9/annotation.yaml", - "hashed_secret": "92afe0de8502888eba27af9655d7d96eca5b11f0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__e7859f0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__e7859f0/annotation.yaml", - "hashed_secret": "ecf1763b472edde04e143a74140e569ccb31fea5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__e7859f0/annotation.yaml", - "hashed_secret": "15795f8302f196746558f3b3a8535969e351dc98", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__f033ef7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__f033ef7/annotation.yaml", - "hashed_secret": "b48f343b7bb8129c755c7f48de53ec71eb1d5207", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__f033ef7/annotation.yaml", - "hashed_secret": "fc8b2c140921100a0fe0bd7603a66b2ef93a2ff3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/nextcloud__f94fb33/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__f94fb33/annotation.yaml", - "hashed_secret": "85cda0f89e6f76860495e20ed93db5664f04ed46", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/nextcloud__f94fb33/annotation.yaml", - "hashed_secret": "fc741153618f148424454181d9755e1f8f6a0eab", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__0e84b52/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__0e84b52/annotation.yaml", - "hashed_secret": "dd563febc3a5bc5c5af97413448260ef8588f4cc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__0e84b52/annotation.yaml", - "hashed_secret": "8aa2578d0c2918ad41810d2486db6bb6975927cc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__0e84b52/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/plausible__0e84b52/patch.diff", - "hashed_secret": "e24fe0dea7f9abe8cbb192702578715079689a3e", - "is_verified": false, - "line_number": 482 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__0e84b52/patch.diff", - "hashed_secret": "084c3b8ec514d548557fc77f89a9c3d6b816f50a", - "is_verified": false, - "line_number": 690 - } - ], - "datasets/dcbench/v1/instances/plausible__176234f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__176234f/annotation.yaml", - "hashed_secret": "a249bb8a9dfcf76d1e54b65e1a662fa31f3b0bfd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__176234f/annotation.yaml", - "hashed_secret": "b9020241c17d86b39e6918cd1425a5e6b4ac4ae0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__359438a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__359438a/annotation.yaml", - "hashed_secret": "5aa96d3037a7c817bbee987bc99fb6b57992ea73", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__359438a/annotation.yaml", - "hashed_secret": "0921c76fd8de51fd2d30ae84b6c2fb05aff060a4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__39656f7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__39656f7/annotation.yaml", - "hashed_secret": "3a50803b9e7493893574c764147dfef94b7a0039", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__39656f7/annotation.yaml", - "hashed_secret": "cea795b138943122f73a7653e1361d0891475349", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__5358197/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__5358197/annotation.yaml", - "hashed_secret": "98f81ec9efd306fa804278efc7b2ea4593310246", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__5358197/annotation.yaml", - "hashed_secret": "494395f2179795176b96aa36c93abacf94e1c094", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__592d2b2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__592d2b2/annotation.yaml", - "hashed_secret": "90042527abe152bddd6fa7af9b40cdab2f2d005a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__592d2b2/annotation.yaml", - "hashed_secret": "e77aaf7c525d586a435343eb803470a5e4744a41", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__7eb7d9a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__7eb7d9a/annotation.yaml", - "hashed_secret": "df5d7ea10f53cfc4e857b3d6f6f8bfa3284dd34a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__7eb7d9a/annotation.yaml", - "hashed_secret": "48b42914f235af8fbb02a503ab26089e3605234c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__810e48d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__810e48d/annotation.yaml", - "hashed_secret": "4a611f818dd37e22a041780b8a31710094e445eb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__810e48d/annotation.yaml", - "hashed_secret": "5a58a9d1450ba4f94ec77d835717efee0521b139", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__8a0ec56/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__8a0ec56/annotation.yaml", - "hashed_secret": "34a7d59e79f6d895d09cd9fa813e71c61b3572be", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__8a0ec56/annotation.yaml", - "hashed_secret": "6a2fa7d250beb01d422dd48dabab0283d0a3af8c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__8e546b8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__8e546b8/annotation.yaml", - "hashed_secret": "fff6b07b1f36872f73b6f3cb9c2eef3799a9c395", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__8e546b8/annotation.yaml", - "hashed_secret": "33ae2c1ac3001822d0ceca3c0e4d3f0224003c64", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__9de1532/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/annotation.yaml", - "hashed_secret": "249ac450bea500955ebad712dbf815d26196e638", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/annotation.yaml", - "hashed_secret": "b96405fe2cc9e66b9c776f53b6b43a479a93e5e0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "6a7727f166776c43f34992e140602ca70c3d1ab0", - "is_verified": false, - "line_number": 288 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "8b56f57c0bf77eab8c371b2bf0492f579af44d36", - "is_verified": false, - "line_number": 288 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "8be969247c3011d78e1cbe1c91d01f594a354dc5", - "is_verified": false, - "line_number": 289 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "f794ce51a4e372c58f60315a8574c51efd240afc", - "is_verified": false, - "line_number": 289 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "26ec1f9ab0b9bf1266859eed07930ad01c71be84", - "is_verified": false, - "line_number": 290 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "dcdd04235ef89cfc4c990a1bbf972b60f2dc906e", - "is_verified": false, - "line_number": 290 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "8377bb70ca9aa3ee5dfb2473c62526d9239f0147", - "is_verified": false, - "line_number": 291 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "e1404b0e6d70a3316b5b26af00a023b789152c6b", - "is_verified": false, - "line_number": 291 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "b6aafb0527d39e3bafbf4f1fdba8ad2cc2c21d7c", - "is_verified": false, - "line_number": 292 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "73b0d4071481a7ff46f95e3614376d4bbedd1597", - "is_verified": false, - "line_number": 294 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "e58fd0651d7dd5133839ef161ea633d73be2aaec", - "is_verified": false, - "line_number": 294 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "1edee3f53ef24ff0edea00e81ac998e42d855141", - "is_verified": false, - "line_number": 295 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "bd0f57e2514e891a4f2d96649f250e84d5ef374d", - "is_verified": false, - "line_number": 295 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "8215bac0cbfc1fdf01026229fd32ef32b379c131", - "is_verified": false, - "line_number": 296 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "c16318e74f39f1746ac801c0ceffffdc1dd68773", - "is_verified": false, - "line_number": 296 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "52d5892a53e2505ff06cfe0a4058f869299c7652", - "is_verified": false, - "line_number": 297 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "acf44e28c2a5e190897449ac0e39b886340c88b4", - "is_verified": false, - "line_number": 297 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "50d5988b14e042c21527c9d5b18b1419c7b3e627", - "is_verified": false, - "line_number": 298 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "86dff360bd9fbeebfd34f735443a7ce008bebe75", - "is_verified": false, - "line_number": 298 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "309c1d8f5f9fdb1f64bf018d31ba596c52883e34", - "is_verified": false, - "line_number": 299 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "4a85f689fab54de09c560370768ce5c637657774", - "is_verified": false, - "line_number": 299 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__9de1532/patch.diff", - "hashed_secret": "73c81a0287545adfb508f51d90e97ca2eefd355d", - "is_verified": false, - "line_number": 300 - } - ], - "datasets/dcbench/v1/instances/plausible__a07aaa6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__a07aaa6/annotation.yaml", - "hashed_secret": "9b7cb749eb1b2e1787155e1ca751e51053137bbe", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__a07aaa6/annotation.yaml", - "hashed_secret": "15de971bcb4785617b5f5efdc502bdceccc89e8b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__a07aaa6/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/plausible__a07aaa6/patch.diff", - "hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", - "is_verified": false, - "line_number": 762 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/plausible__a07aaa6/patch.diff", - "hashed_secret": "81f344a7686a80b4c5293e8fdc0b0160c82c06a8", - "is_verified": false, - "line_number": 816 - } - ], - "datasets/dcbench/v1/instances/plausible__a9dc4ea/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__a9dc4ea/annotation.yaml", - "hashed_secret": "19ca509e7a4b72ea0fa81ed6dd6e158c78c615ee", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__a9dc4ea/annotation.yaml", - "hashed_secret": "b1f6928fa7555ff2be996512323ba9bde93b048b", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__bd40e49/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__bd40e49/annotation.yaml", - "hashed_secret": "87888e73623cb99b1fe0fab534d9d03389adceeb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__bd40e49/annotation.yaml", - "hashed_secret": "2cd3a765b1e920d05c72d750fec056bdb126cd36", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__cc06a35/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__cc06a35/annotation.yaml", - "hashed_secret": "de0235b4db9bf6e595244dc7bf4902d32f5595ff", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__cc06a35/annotation.yaml", - "hashed_secret": "7011dee73818778296f13f065dc020541528505f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__d298071/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__d298071/annotation.yaml", - "hashed_secret": "9192f9d1f240ea2a3b788298060c0b550483f8fa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__d298071/annotation.yaml", - "hashed_secret": "b569a20f184881e2efea1da448853a8fc39bd827", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__db9bcf3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__db9bcf3/annotation.yaml", - "hashed_secret": "b1f6928fa7555ff2be996512323ba9bde93b048b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__db9bcf3/annotation.yaml", - "hashed_secret": "5bd1b0c975f13daa8cdef7e2e18c26c3dd229be3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__ea3d23d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__ea3d23d/annotation.yaml", - "hashed_secret": "eb3d804b7c68889a81633fad5bb0977fb82a2fd9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__ea3d23d/annotation.yaml", - "hashed_secret": "c2448e14ff5d6df1137fec4674648def24093fde", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__fd72fb8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__fd72fb8/annotation.yaml", - "hashed_secret": "f8151811091c588211b46e1ffa225bdde310e4cd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__fd72fb8/annotation.yaml", - "hashed_secret": "c74016a6781cceb97b3b35bfe4e3f0abe2f038ba", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/plausible__fdb561b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__fdb561b/annotation.yaml", - "hashed_secret": "6041a068f1a3b9e0f97350dfb53ac9dfa0b6e9a2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/plausible__fdb561b/annotation.yaml", - "hashed_secret": "f78fcf71f4f18980ad721622a35642ada4a54d89", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__1322669/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__1322669/annotation.yaml", - "hashed_secret": "4c7848ce24f1ce6200933bdee8b0d4be74984ae2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__1322669/annotation.yaml", - "hashed_secret": "77d47813296d5254e9c8a38d08808b67d5c7318e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__3b6875a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__3b6875a/annotation.yaml", - "hashed_secret": "010d3b7701c020f3c2516d5195adc8b44b1d8c51", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__3b6875a/annotation.yaml", - "hashed_secret": "231361690bb45f9332d91232b51bd9c643e16288", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__3d5a70b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__3d5a70b/annotation.yaml", - "hashed_secret": "bc1c49b30ab18beb20b7c9c2f3868cba559b3cee", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__3d5a70b/annotation.yaml", - "hashed_secret": "8d9fb502fde8c32f9737d2ea33be82ad6d3adf0e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__447664f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/annotation.yaml", - "hashed_secret": "8d9fb502fde8c32f9737d2ea33be82ad6d3adf0e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/annotation.yaml", - "hashed_secret": "a956dc3ecb09911419335f1964133062944eed32", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__447664f/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "d6b4d23d5ea7daed30ecc68d5b8af886564bcdcd", - "is_verified": false, - "line_number": 294 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "8feb0351dcb6d5fea5060e83e00cb0e95c28f5e8", - "is_verified": false, - "line_number": 295 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "762623bcb70b2ce8bbb5555ba33695b91071e68d", - "is_verified": false, - "line_number": 296 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "74cde59d98bd6ddef8c4b95f0a3662fa50130981", - "is_verified": false, - "line_number": 297 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "0c81f605a7ef6f4040f8629d3812635399da8074", - "is_verified": false, - "line_number": 298 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "4f3017f8fe270d85cce9fa29de8f1606800dc95b", - "is_verified": false, - "line_number": 299 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "2b667d819aed71985082c8e55a40395b0c721467", - "is_verified": false, - "line_number": 300 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__447664f/patch.diff", - "hashed_secret": "c277eaa138e00743664995c2930f04e67930521c", - "is_verified": false, - "line_number": 301 - } - ], - "datasets/dcbench/v1/instances/polars__4695423/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/annotation.yaml", - "hashed_secret": "9e9a4667626239a129d004d0a4bcf9ed499f66d5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/annotation.yaml", - "hashed_secret": "5f761ab62a24a0399453d9b0cb297e59919b60e9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__4695423/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/patch.diff", - "hashed_secret": "470fc0be651bec5a9d5042d57bb2a667e4f15917", - "is_verified": false, - "line_number": 1317 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/patch.diff", - "hashed_secret": "70361e031ea38b0d3168e7168aa603516abf47a3", - "is_verified": false, - "line_number": 1318 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/patch.diff", - "hashed_secret": "f41758b1cdde0f62f5eab66957c8868b5eaec8e9", - "is_verified": false, - "line_number": 1319 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/patch.diff", - "hashed_secret": "e30345d1ff263dae77af09a40f2902cfeb9f47f1", - "is_verified": false, - "line_number": 1320 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__4695423/patch.diff", - "hashed_secret": "fafacdcd4ca051251ee3e7537bfcefffd02a8112", - "is_verified": false, - "line_number": 1321 - } - ], - "datasets/dcbench/v1/instances/polars__52eea50/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/annotation.yaml", - "hashed_secret": "ab4f68b9a95f872fef8c09b8df73414b47bc1362", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/annotation.yaml", - "hashed_secret": "20fc8b1cfff3a9fd625271f1c2cf54268c1606b2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__52eea50/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "51aa3a2f210d7ad726a99ab14da909c43cca1bd0", - "is_verified": false, - "line_number": 32 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "90561dfcac8e257eb9373c532f4115d05758a8fe", - "is_verified": false, - "line_number": 33 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "bcf8ca867b296b679d96025d22ca610622b53cd6", - "is_verified": false, - "line_number": 34 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "7f2822efed3287e92acb048b9a2107b729c7b94b", - "is_verified": false, - "line_number": 35 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "188ef16866ad57f602f61647ea90eb63f20d8422", - "is_verified": false, - "line_number": 36 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "a9e98ce1dd294ab866068652517bd2149c878e54", - "is_verified": false, - "line_number": 37 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "d023300d7b7406fb2b247fafcc7f553413d27027", - "is_verified": false, - "line_number": 38 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__52eea50/patch.diff", - "hashed_secret": "e900fb6d96714c57fd9238128ef89b68b0a6ef0f", - "is_verified": false, - "line_number": 39 - } - ], - "datasets/dcbench/v1/instances/polars__566d388/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__566d388/annotation.yaml", - "hashed_secret": "09084f01f0a9da42e2eac4fc34c91643f37234af", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__566d388/annotation.yaml", - "hashed_secret": "590acddfdcd7d1bad54fe38a03b30f22534abce1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__6f59975/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__6f59975/annotation.yaml", - "hashed_secret": "f6bfb6e4e1e81efac54280a869519743b72dd80c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__6f59975/annotation.yaml", - "hashed_secret": "72f6688f4d22cd5ee277f76d2d6e43fadf5e9fb2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__79e4108/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__79e4108/annotation.yaml", - "hashed_secret": "32f5b43d62dbe00eaa54ac0272cdd375690af0ab", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__79e4108/annotation.yaml", - "hashed_secret": "a5d8db1139a34ef6d9ee3d1e4372c3cc586dfeeb", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__855b3fc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__855b3fc/annotation.yaml", - "hashed_secret": "b04ab67023cdef2bc5baa5d509219ecd92df34e3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__855b3fc/annotation.yaml", - "hashed_secret": "4f76e20fe0f17614da4cbb708945e9cafaaa6353", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__8fc67c7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/annotation.yaml", - "hashed_secret": "4ae1601852d1ef6b5cea8f5c8d5f2476c6fc0b0f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/annotation.yaml", - "hashed_secret": "f010d3ede09710268a3d7e1a058ba06e8556a901", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "e30345d1ff263dae77af09a40f2902cfeb9f47f1", - "is_verified": false, - "line_number": 2104 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "fafacdcd4ca051251ee3e7537bfcefffd02a8112", - "is_verified": false, - "line_number": 2105 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "e21e7ca04e8d0211bd80fa9632562a51eeece2e0", - "is_verified": false, - "line_number": 2106 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "c2d89575e84c4913bed138678ef6b90fbcf35ac9", - "is_verified": false, - "line_number": 2107 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "8ab9adbf911bf66b7283e2e59dd6d4afe54f8a4a", - "is_verified": false, - "line_number": 2108 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "d6b4d23d5ea7daed30ecc68d5b8af886564bcdcd", - "is_verified": false, - "line_number": 2109 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "4a75c8ea761c8c18a37672081a32456b50061f6f", - "is_verified": false, - "line_number": 2110 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "4d4f48ce0ab6a68e73d17ecef26b97e69162ebea", - "is_verified": false, - "line_number": 2112 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "4cf6d7aeb50fe2f18caea12a4992e5206cff7d3a", - "is_verified": false, - "line_number": 2113 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "b9f115403e6a64f72cf4ac111f91e3b02becbd2d", - "is_verified": false, - "line_number": 2114 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "7238ca51ea752dd8a39d04caf017d3d9734420c2", - "is_verified": false, - "line_number": 2115 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "f43aa33d78b3dc9dc0b361a301d8fc3aee8dcd50", - "is_verified": false, - "line_number": 2116 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "efa8ebab8e93f8be736d78d1452be56f566171ae", - "is_verified": false, - "line_number": 2117 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "932e8599ec3c57b3f652063249f361fdfe33100d", - "is_verified": false, - "line_number": 2118 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__8fc67c7/patch.diff", - "hashed_secret": "fcf695a9088d90e12407eb7f292d72da15c7f7c8", - "is_verified": false, - "line_number": 2119 - } - ], - "datasets/dcbench/v1/instances/polars__9472f7d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/annotation.yaml", - "hashed_secret": "4d67e16467155b81351d9cba2c9270eca98adaac", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/annotation.yaml", - "hashed_secret": "7f6d763020a4f4e214f9764d2128ae198fc11cb2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "d6b4d23d5ea7daed30ecc68d5b8af886564bcdcd", - "is_verified": false, - "line_number": 503 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "8feb0351dcb6d5fea5060e83e00cb0e95c28f5e8", - "is_verified": false, - "line_number": 504 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "762623bcb70b2ce8bbb5555ba33695b91071e68d", - "is_verified": false, - "line_number": 505 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "0c81f605a7ef6f4040f8629d3812635399da8074", - "is_verified": false, - "line_number": 506 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "74f90587d3a2968f3a3d30f486d1f3d4bb5fe54a", - "is_verified": false, - "line_number": 507 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "4f3017f8fe270d85cce9fa29de8f1606800dc95b", - "is_verified": false, - "line_number": 508 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "2b667d819aed71985082c8e55a40395b0c721467", - "is_verified": false, - "line_number": 509 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__9472f7d/patch.diff", - "hashed_secret": "c277eaa138e00743664995c2930f04e67930521c", - "is_verified": false, - "line_number": 510 - } - ], - "datasets/dcbench/v1/instances/polars__a298fc9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/annotation.yaml", - "hashed_secret": "c93c898916fe1b7731f3c3d02eca37eef71418cb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/annotation.yaml", - "hashed_secret": "9d73a6ca30298e825a020036818bfe261f44ccb1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "97b54eaee8991da3d15c98ac11e5c989528b17fa", - "is_verified": false, - "line_number": 336 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "04153dd80fc6f6e9727302f7b0deebf2e01dce18", - "is_verified": false, - "line_number": 337 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "bd30203f4a3537b28b7e457b77ca66b1df072487", - "is_verified": false, - "line_number": 338 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "9368b4bae9aa1063fc4bed025f131adb8fd09fe4", - "is_verified": false, - "line_number": 339 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "3df66894470511a786a874d609df749be8308060", - "is_verified": false, - "line_number": 340 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "536b033c1cc582cbfe40667053b14b6cbd483ccb", - "is_verified": false, - "line_number": 341 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "e01cdb66c907512601e2dab6a177189f40819055", - "is_verified": false, - "line_number": 342 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a298fc9/patch.diff", - "hashed_secret": "7ca6c31ea86def5ab8a078a634217ac10e448f35", - "is_verified": false, - "line_number": 343 - } - ], - "datasets/dcbench/v1/instances/polars__a314cb6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a314cb6/annotation.yaml", - "hashed_secret": "f399dfaddff12b0ad1cd49fd30a32bb67ba43774", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a314cb6/annotation.yaml", - "hashed_secret": "b48463472dcb4a1bfcec2030f1cd601bd43dfc95", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__a7d6cb7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/annotation.yaml", - "hashed_secret": "aab525f3cec3944f1fe172eb8cb1d30a079909ec", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/annotation.yaml", - "hashed_secret": "b2e68578142b1ac11e8f324e38f5cadf4446fa31", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "d6b4d23d5ea7daed30ecc68d5b8af886564bcdcd", - "is_verified": false, - "line_number": 928 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "8feb0351dcb6d5fea5060e83e00cb0e95c28f5e8", - "is_verified": false, - "line_number": 929 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "762623bcb70b2ce8bbb5555ba33695b91071e68d", - "is_verified": false, - "line_number": 930 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "daece37ae5a2dfbb44feac585ef57b42688bb33c", - "is_verified": false, - "line_number": 931 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "74cde59d98bd6ddef8c4b95f0a3662fa50130981", - "is_verified": false, - "line_number": 932 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "4f3017f8fe270d85cce9fa29de8f1606800dc95b", - "is_verified": false, - "line_number": 933 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "2b667d819aed71985082c8e55a40395b0c721467", - "is_verified": false, - "line_number": 934 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__a7d6cb7/patch.diff", - "hashed_secret": "c277eaa138e00743664995c2930f04e67930521c", - "is_verified": false, - "line_number": 935 - } - ], - "datasets/dcbench/v1/instances/polars__aa77238/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/annotation.yaml", - "hashed_secret": "f663ad543597e5e375d8cdfa2875be58fc7f23e3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/annotation.yaml", - "hashed_secret": "1baef057ca892d7520054a55cde02b06c6c5a0a3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__aa77238/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "c277eaa138e00743664995c2930f04e67930521c", - "is_verified": false, - "line_number": 138 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "d99d169f05b61cb7f04cda06e3642fbe79f5cbe7", - "is_verified": false, - "line_number": 139 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "c17d7d875c4241f633696d867e78d80ec7932484", - "is_verified": false, - "line_number": 140 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "f10f1b2c0e7159c5c44c9e967662d4d1432c2897", - "is_verified": false, - "line_number": 141 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "c6f0e21c444f22fff6d43518f64964c9e6031082", - "is_verified": false, - "line_number": 142 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "c5a75633e3d1cabf309b74b0ae10e8d76251c3ad", - "is_verified": false, - "line_number": 143 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "7a0a4139c4364111c9aece9f788a5ec8e439f56a", - "is_verified": false, - "line_number": 144 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__aa77238/patch.diff", - "hashed_secret": "ce92dd8fa5e85a542571b46e06dc269632bed930", - "is_verified": false, - "line_number": 145 - } - ], - "datasets/dcbench/v1/instances/polars__b35bc7b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__b35bc7b/annotation.yaml", - "hashed_secret": "1fcba5180be38c8dee76bd22cd4f79ee4aa06bda", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__b35bc7b/annotation.yaml", - "hashed_secret": "12cd3bfbde63a3b12190a003aff21d7313d3c056", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__b36e3f4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__b36e3f4/annotation.yaml", - "hashed_secret": "ae20e02933ee23f516c33be5facfc8bc6343c24d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__b36e3f4/annotation.yaml", - "hashed_secret": "16eb1e71a63563e28bc0e8846aa73c783700eaed", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__c70ec74/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/annotation.yaml", - "hashed_secret": "dfc862178c124e1e4efd8e1ade84425a3c3c3c62", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/annotation.yaml", - "hashed_secret": "0a25f1bdaabaf07e985a3dcd663931e9a343a101", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "97b54eaee8991da3d15c98ac11e5c989528b17fa", - "is_verified": false, - "line_number": 431 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "04153dd80fc6f6e9727302f7b0deebf2e01dce18", - "is_verified": false, - "line_number": 432 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "bd30203f4a3537b28b7e457b77ca66b1df072487", - "is_verified": false, - "line_number": 433 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "05981b8e84076f2252521e98ca4b4e2ec6c4c45b", - "is_verified": false, - "line_number": 434 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "a97a9b2fd5731e1fa8074cb8b7eb144ef216a44b", - "is_verified": false, - "line_number": 435 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "7b361229d2f7d2fc5eb074a2eb2d339eeb5841a3", - "is_verified": false, - "line_number": 436 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "e01cdb66c907512601e2dab6a177189f40819055", - "is_verified": false, - "line_number": 437 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c70ec74/patch.diff", - "hashed_secret": "7ca6c31ea86def5ab8a078a634217ac10e448f35", - "is_verified": false, - "line_number": 438 - } - ], - "datasets/dcbench/v1/instances/polars__c7896b9/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c7896b9/annotation.yaml", - "hashed_secret": "cba99e1077ec6641f1b2160a0552595fe04bc581", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__c7896b9/annotation.yaml", - "hashed_secret": "917ed172196029bd7ca1caf83d1c35a2be5c80a4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__d54df64/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__d54df64/annotation.yaml", - "hashed_secret": "3f2cbf788f2db70ce654b2112ede95db89935da3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__d54df64/annotation.yaml", - "hashed_secret": "4e50bc0314c946616ef57944e8ec4182c7742388", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__d8b617e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__d8b617e/annotation.yaml", - "hashed_secret": "804c25027e868f3e1cea576874b656e6f6d5a183", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__d8b617e/annotation.yaml", - "hashed_secret": "39413e430328cf870dde93405bc667f6fd2cbcc5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__d8b617e/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__d8b617e/patch.diff", - "hashed_secret": "f7546e32dcd19132a06ce5106c54d8bba46dd718", - "is_verified": false, - "line_number": 343 - } - ], - "datasets/dcbench/v1/instances/polars__da19eb8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__da19eb8/annotation.yaml", - "hashed_secret": "4e50bc0314c946616ef57944e8ec4182c7742388", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__da19eb8/annotation.yaml", - "hashed_secret": "7a7f67eccadae84ca8a3d495fad38fbcbaf39968", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__f33ad61/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/annotation.yaml", - "hashed_secret": "80e05aaba3ee0a9c2f8616c3a16c9f5291e9f5cb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/annotation.yaml", - "hashed_secret": "2ed04df2c39f1380dc1fdd976c9d170f4a9e7ee3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "57da4ee883d9c7b24c264b5605ce668bea0b759a", - "is_verified": false, - "line_number": 81 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "8e8404c6110899c4e4d39f68c8e998c99f6fde04", - "is_verified": false, - "line_number": 87 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "4007d850851f49890fbce7301214ebc827780907", - "is_verified": false, - "line_number": 1164 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "a8a792ccda753531a679097320da92f708dcc8e5", - "is_verified": false, - "line_number": 1165 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "0a8486eb1ef3d67ad7db1e3d2033cb4a91154e82", - "is_verified": false, - "line_number": 1166 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "02d93f46888cd9d7962858d8e023a975f8e527c4", - "is_verified": false, - "line_number": 1167 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "eb731b2dbf86b7ce73f5ab37ae278f362a87479b", - "is_verified": false, - "line_number": 1168 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "e604cba7eb1a8f1352a644ce74d8c8b741bcd543", - "is_verified": false, - "line_number": 1169 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "6456ea62122026b097069ebecfd3f9374aebe60b", - "is_verified": false, - "line_number": 1170 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "3a3adf02e052ce87984860c77fb44b82cca834e0", - "is_verified": false, - "line_number": 1171 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "0cf4add75d93f5f26cbf835993b7a10d23f9eba8", - "is_verified": false, - "line_number": 1172 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "2f855cbd29f1fd1e50b0271f48cd4f811239ff71", - "is_verified": false, - "line_number": 1173 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "9c05c990eca627a4b670c955ed31acd966f16dca", - "is_verified": false, - "line_number": 1174 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "026a1d17c9917a09d9539170c31bcfe31dc84528", - "is_verified": false, - "line_number": 1175 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "25861357bdebaa4e2d52c932e7ad6861538820b8", - "is_verified": false, - "line_number": 1176 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "e3b87e0642b77652bb8189d1338e238ca40f2fde", - "is_verified": false, - "line_number": 1177 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "fd5f9e9b84e9c3142755b29e2c3381d82b04728a", - "is_verified": false, - "line_number": 1178 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "0fc020e5f080420fcd3e519e1667404d85e81f5f", - "is_verified": false, - "line_number": 1179 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__f33ad61/patch.diff", - "hashed_secret": "a6c72406187da97dc63e4e572a8c09aa529f998c", - "is_verified": false, - "line_number": 1180 - } - ], - "datasets/dcbench/v1/instances/polars__fcbf169/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__fcbf169/annotation.yaml", - "hashed_secret": "69d60b241a39ff47d0c68c7ea6e58851d9d8c626", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/polars__fcbf169/annotation.yaml", - "hashed_secret": "f35c8040ef438c3bfab95721d5a61e97a5a441e0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__03b8b09/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__03b8b09/annotation.yaml", - "hashed_secret": "9980d6685ae53f81c5bec8456bcc9cfc58eebc90", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__03b8b09/annotation.yaml", - "hashed_secret": "2f6936868be04e5309c0865baf329cafd38f5ee6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__07abfce/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__07abfce/annotation.yaml", - "hashed_secret": "27774184ec12568771da5d1a7a121df03de250a5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__07abfce/annotation.yaml", - "hashed_secret": "30b200ae40c7a1c28d22677b42ed0799864b9b6e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__07abfce/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__07abfce/patch.diff", - "hashed_secret": "6760dd79e63f3070b115309c8e3f331873583739", - "is_verified": false, - "line_number": 4254 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__07abfce/patch.diff", - "hashed_secret": "c78ea0988e30ec61d324ae7e3b801d142e54c7e8", - "is_verified": false, - "line_number": 4272 - } - ], - "datasets/dcbench/v1/instances/react-native__15909fa/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__15909fa/annotation.yaml", - "hashed_secret": "f7b1e71756f56215acdb2b2cd396ac7859379d00", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__15909fa/annotation.yaml", - "hashed_secret": "a1272fff077fe6df68e605a3090f2f350eaf381a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__1cb0a33/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__1cb0a33/annotation.yaml", - "hashed_secret": "f91af7cd9f63b30b08a3401aa7a8bf349c2e4d87", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__1cb0a33/annotation.yaml", - "hashed_secret": "9df4de8ddcfcd90b040c15bcdcab226edfef2ed5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__2932c0f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__2932c0f/annotation.yaml", - "hashed_secret": "bbb11648cc453ccec3574f31f3f12d20d35837d2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__2932c0f/annotation.yaml", - "hashed_secret": "ca755d0de765e9a3961c7205c5a7b5e778b578fa", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__2ce3686/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__2ce3686/annotation.yaml", - "hashed_secret": "377dfd932e17692da513bc9fbe19b9f05b5243fb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__2ce3686/annotation.yaml", - "hashed_secret": "f88e570f281d46344e2fcc876986c04f9c9ba055", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__332355e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__332355e/annotation.yaml", - "hashed_secret": "bc12dbe6cc13230ffa26d67fc06ca6e7399a71ae", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__332355e/annotation.yaml", - "hashed_secret": "bb92c310a608316cf87e7b1d60ae709c4cf94da5", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__37375d8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__37375d8/annotation.yaml", - "hashed_secret": "dbc0fcb0048722554968508bdbd5602a60a5e6db", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__37375d8/annotation.yaml", - "hashed_secret": "58efd84734ab34ad2d0184e74b3d9e88590878ed", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__3aeba22/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__3aeba22/annotation.yaml", - "hashed_secret": "60f3033597cb4ac15c1f2ec51a6fe2cbe5a531b5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__3aeba22/annotation.yaml", - "hashed_secret": "9a258ee9b7853a32d9fa9a3e6b944e111c715792", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__42d6745/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__42d6745/annotation.yaml", - "hashed_secret": "5e87b3298ab66e9d90670c1154fd254800aabffb", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__42d6745/annotation.yaml", - "hashed_secret": "ae704f52c362346424b572317bfc58bd97c7d2e6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__4dea635/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__4dea635/annotation.yaml", - "hashed_secret": "90226f69646210fdf174aedf56214b1f937d0d60", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__4dea635/annotation.yaml", - "hashed_secret": "22659827e4c85507e78e6828c8e51be8bd00c476", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__59101d6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__59101d6/annotation.yaml", - "hashed_secret": "d15be4003a7e055d7f68c0fbd6a945ff560ca953", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__59101d6/annotation.yaml", - "hashed_secret": "321ace8229de0d4098b6f930101bac4dc899db5d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__610b14e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__610b14e/annotation.yaml", - "hashed_secret": "58c1941ff4364564154e8506747bb407531bbd0c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__610b14e/annotation.yaml", - "hashed_secret": "0a9c44450a4b222855f372ee983ecee3bfb5c13c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__62e1110/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__62e1110/annotation.yaml", - "hashed_secret": "91f0b53e24fd2c1447190f73ea6a52fe69822c0b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__62e1110/annotation.yaml", - "hashed_secret": "7c1a2749d53d645b460492a9f647db6c66056331", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__64c4e38/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__64c4e38/annotation.yaml", - "hashed_secret": "d01833cff37b4b9805473ed0d76b704ce8d45829", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__64c4e38/annotation.yaml", - "hashed_secret": "071b8f0f21023a40b6c74b2515b70c63371dc899", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__66df63d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__66df63d/annotation.yaml", - "hashed_secret": "a4d4ad786b67e1c01c0686655ad43268003f32dd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__66df63d/annotation.yaml", - "hashed_secret": "097f965e42883008b5c2c88989b3700b08828cfa", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__6ba8b65/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__6ba8b65/annotation.yaml", - "hashed_secret": "adcb8e7cd053f18d7a5b813cfed723c135da73ab", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__6ba8b65/annotation.yaml", - "hashed_secret": "4a04c842c0a170acfdff4de992642fb41fd88188", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__8ccaf00/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__8ccaf00/annotation.yaml", - "hashed_secret": "d66923ac0ed603337a4ee48b82e945c4b4d465f5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__8ccaf00/annotation.yaml", - "hashed_secret": "3ee8b070b62138c7987da0d36984f958b8bd52f6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__9526406/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__9526406/annotation.yaml", - "hashed_secret": "df245339143d89ce919515e9e711e2a5b5d866f7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__9526406/annotation.yaml", - "hashed_secret": "274702fec9fa1d5c8f7342e36a041c1f8e1c79ac", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__95ed8a6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__95ed8a6/annotation.yaml", - "hashed_secret": "f7fd50c22d75e865d12a8c3731d127ff57f017ce", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__95ed8a6/annotation.yaml", - "hashed_secret": "96c80133ed7f1aed2b922a2ec15230249ec2df04", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__972c2c8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__972c2c8/annotation.yaml", - "hashed_secret": "dfa071fe0055b503c959b7a248e534fa039cbf23", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__972c2c8/annotation.yaml", - "hashed_secret": "6e1620dcb6a26084dfe8cb2ffefa175cf1f2661f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__98a38cc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__98a38cc/annotation.yaml", - "hashed_secret": "17f2fd936767186194666a69ccff8a004be0533a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__98a38cc/annotation.yaml", - "hashed_secret": "009186a6ab5fcc2494cd0f97b6c199606438e566", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__aefefdb/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__aefefdb/annotation.yaml", - "hashed_secret": "bcd6d88f0109fbc98464fe671e97b8fa4d3e71af", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__aefefdb/annotation.yaml", - "hashed_secret": "961a86976cae312ea1c5498ba7b67df3496fa13a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__b365e26/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__b365e26/annotation.yaml", - "hashed_secret": "6b20418faa20b857f78cb837f75deb9cbf2454a1", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__b365e26/annotation.yaml", - "hashed_secret": "f35818f64ebc04d6fa0ec8d708eeec357a5654fa", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__b7191cd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__b7191cd/annotation.yaml", - "hashed_secret": "4ee44b53b088b323b5c93a9477fccb21ac0e46df", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__b7191cd/annotation.yaml", - "hashed_secret": "bf5cf5e72651049c0c53701f93bb383cbe005b9e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__cf914e4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf914e4/annotation.yaml", - "hashed_secret": "1de3a2aa13a73e9b4665e5c162677f440a28193d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf914e4/annotation.yaml", - "hashed_secret": "56d4450ddc70fd5cf2abc754e695f5adbd340d2d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__cf914e4/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf914e4/patch.diff", - "hashed_secret": "a0d61c7a73cd10204d3e6a7fbf512b28b2bbaa4e", - "is_verified": false, - "line_number": 1383 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf914e4/patch.diff", - "hashed_secret": "b5e41172125997c7099c767bba75496e7b3a1e73", - "is_verified": false, - "line_number": 1467 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf914e4/patch.diff", - "hashed_secret": "64d32eaf4d5b5ba63a34dacfde9570ea70ddff18", - "is_verified": false, - "line_number": 1524 - } - ], - "datasets/dcbench/v1/instances/react-native__cf926a1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf926a1/annotation.yaml", - "hashed_secret": "deedc0c9ea9a8519bef70b3074f723db70dc3aff", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__cf926a1/annotation.yaml", - "hashed_secret": "14350ae4543f9ad688fb4b6ee0b73d87a6118764", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__d16f0f2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__d16f0f2/annotation.yaml", - "hashed_secret": "c968c5d78a3210de8b941d065dc99b01c6c0800d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__d16f0f2/annotation.yaml", - "hashed_secret": "7b08e53286cf3f6278b02a2e5dc0530e1c5e3c7e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__d2c48f3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__d2c48f3/annotation.yaml", - "hashed_secret": "2eccf150323c3baea090e8d95c1e17fceee8cc41", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__d2c48f3/annotation.yaml", - "hashed_secret": "efd42c66204b55507613c12d3c50b87d4f89fa93", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__db80d78/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__db80d78/annotation.yaml", - "hashed_secret": "d9282b41fc2d1cc347c4d86b272c554aacbfcc95", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__db80d78/annotation.yaml", - "hashed_secret": "46f55d6b67999153a92152642a1e181ca3eb46ef", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__e7ce4ff/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__e7ce4ff/annotation.yaml", - "hashed_secret": "c336632dbe4937c67c0e033ee08d8459aa372c52", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__e7ce4ff/annotation.yaml", - "hashed_secret": "f5b6d402e1457d744978fdc56f18db20ebf26890", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__ee9ef3b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__ee9ef3b/annotation.yaml", - "hashed_secret": "6aabc3686a49f18008ba3eadb1a1c440b19daf46", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__ee9ef3b/annotation.yaml", - "hashed_secret": "073db35bcf9d782bc45736413bf7b0d10e0e468f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__f0f71ea/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__f0f71ea/annotation.yaml", - "hashed_secret": "4b047754a4094b8880ffe7975e2d9ee31ac506f7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__f0f71ea/annotation.yaml", - "hashed_secret": "9be1edb9ce55a177bc6f6d427c975d279bb17dcb", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__f140c49/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__f140c49/annotation.yaml", - "hashed_secret": "602fe2e67db889392659f872ae5c49634c7642f5", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__f140c49/annotation.yaml", - "hashed_secret": "5fbdcf27fae83800155cd76e0136c04335ad5c55", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/react-native__fcd6303/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__fcd6303/annotation.yaml", - "hashed_secret": "5951872051a7e7d117856102b3a8ddc0a220bf97", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/react-native__fcd6303/annotation.yaml", - "hashed_secret": "7e1b383cf8d1d603302b3aef956344599a077df8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__0e503e1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__0e503e1/annotation.yaml", - "hashed_secret": "6747d459b4c8e3e2128038155d7eeb60d2699906", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__0e503e1/annotation.yaml", - "hashed_secret": "1589dbfbce48bb34cdba8de5e2f2f8671463291c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__0e503e1/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__0e503e1/patch.diff", - "hashed_secret": "be333bd7a697a2c186bc19c43c0168f630f113e1", - "is_verified": false, - "line_number": 2476 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__0e503e1/patch.diff", - "hashed_secret": "95a6d3e4f225c21e290c7639de7f93196c8d47f7", - "is_verified": false, - "line_number": 2488 - } - ], - "datasets/dcbench/v1/instances/sentry__1314277/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__1314277/annotation.yaml", - "hashed_secret": "af93b70d7d37e12c23fc485a943126929d181073", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__1314277/annotation.yaml", - "hashed_secret": "18b48af93e1c37191ad73ee99191823c9198b103", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__1314277/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__1314277/patch.diff", - "hashed_secret": "7169e10511a1eed92bb81904b235ec5c4ef25095", - "is_verified": false, - "line_number": 15750 - } - ], - "datasets/dcbench/v1/instances/sentry__1853fe2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__1853fe2/annotation.yaml", - "hashed_secret": "defcb35d4a57e0dedd0875b21b36bdc07c042532", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__1853fe2/annotation.yaml", - "hashed_secret": "d5b261a3d5527bc6dbf0fd997aa100354e32ebdc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__2a0cf6e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/annotation.yaml", - "hashed_secret": "6007142d3719b21e8c953ea2230cb9250c128462", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/annotation.yaml", - "hashed_secret": "90c36082349b30845ced95d0cb482c5e8c04bde4", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "9f9a3c562debf62d2bf24fbf02044e3c75931aec", - "is_verified": false, - "line_number": 3784 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "aecdccc1cf64595b34e0cc152d238daabb32183a", - "is_verified": false, - "line_number": 6046 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "90bd1b48e958257948487b90bee080ba5ed00caa", - "is_verified": false, - "line_number": 6281 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "11fa7c37d697f30e6aee828b4426a10f83ab2380", - "is_verified": false, - "line_number": 7295 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "79d0f38f638822d2656d46b1af0ffb292d2fb514", - "is_verified": false, - "line_number": 8385 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__2a0cf6e/patch.diff", - "hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f", - "is_verified": false, - "line_number": 9121 - } - ], - "datasets/dcbench/v1/instances/sentry__2f0a302/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/annotation.yaml", - "hashed_secret": "365a5cc44286de65f35bba3782acac5ff93d6d6c", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/annotation.yaml", - "hashed_secret": "a067ce3995822feb14dd11b7f4d56fe852737c26", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "eea57875fc2633a52a587d41fb175e415839b34b", - "is_verified": false, - "line_number": 800 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "c6184a2080418b788c3658ed52e2856e6023666a", - "is_verified": false, - "line_number": 801 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "866909b766138ee3051bb4f6d88931fa06af476c", - "is_verified": false, - "line_number": 808 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "09ac1a865d3b0821c5e0f22fee06d444ba34877c", - "is_verified": false, - "line_number": 815 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "1dc6d7fdd9bfab695df51c41c1fa3e0d203c8ace", - "is_verified": false, - "line_number": 822 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "b16206db4df91ae7bb5ca80c3ce9123136288bae", - "is_verified": false, - "line_number": 829 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "d21bab9d59514aa6a6327d558a22ef2fa6ae9f6e", - "is_verified": false, - "line_number": 836 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "1648acd4c0ee1f335733afe47b3b8552c3e884ba", - "is_verified": false, - "line_number": 843 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "9bbad157493f27628ad5422bfdc8ccccc227afd0", - "is_verified": false, - "line_number": 850 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "d8fbbe3bd64de03bb0e917f7e018a2fac142c14b", - "is_verified": false, - "line_number": 857 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "05327edb905e498e27dc4ee2b3f6aba0e8528be3", - "is_verified": false, - "line_number": 864 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "214b5867ad0445450a8c2de666ee8e0a06eb1aa4", - "is_verified": false, - "line_number": 871 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "0ab9fbcd376a7ec6f77caa03ab3dde49433b0caf", - "is_verified": false, - "line_number": 878 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "88d91ea37fa9b246a1213574e846ec11a6fbc90f", - "is_verified": false, - "line_number": 885 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "e076885ea3c46381f2448eadc09c06b2183398eb", - "is_verified": false, - "line_number": 892 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "cb6d7639a69378c71e0b6457818bcbf63b2377b7", - "is_verified": false, - "line_number": 898 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "224606c7927199f8f5e04edb539165a116533481", - "is_verified": false, - "line_number": 899 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "395073315a40c6fa77642d47a2296ade0de7cf0c", - "is_verified": false, - "line_number": 906 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "f25e17975f4f5292b2761d07d9bba84f8259a50b", - "is_verified": false, - "line_number": 913 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "122c72437090d54b08c7e1897bba6cecce3cb9cf", - "is_verified": false, - "line_number": 920 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "0774afac2e28c79019dae2f36a98153e5d58a0fc", - "is_verified": false, - "line_number": 927 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "b7116bd393bc121aae175fec8b544032599d5876", - "is_verified": false, - "line_number": 934 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__2f0a302/patch.diff", - "hashed_secret": "07d2643cde0754349fc75b73da3a49fb8953a6e8", - "is_verified": false, - "line_number": 941 - } - ], - "datasets/dcbench/v1/instances/sentry__363e7dc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__363e7dc/annotation.yaml", - "hashed_secret": "3bd79a45b287ba6490f8dcf3daf821b7e03a25ed", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__363e7dc/annotation.yaml", - "hashed_secret": "dfa080667b6a88539c66f5bdc15ef151f884d356", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__363e7dc/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__363e7dc/patch.diff", - "hashed_secret": "fe8e3b4b30c960767bf8ca878fb88767353605ce", - "is_verified": false, - "line_number": 470 - } - ], - "datasets/dcbench/v1/instances/sentry__3da7380/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__3da7380/annotation.yaml", - "hashed_secret": "307124c3aa8f61426cf55d0736e5015960a118e3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__3da7380/annotation.yaml", - "hashed_secret": "91579cf23246d85026e2420d9d0c7896b6a4efae", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__3da7380/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__3da7380/patch.diff", - "hashed_secret": "ece0396388ff1f63d35b03cd65c0a8dc3d431211", - "is_verified": false, - "line_number": 3163 - } - ], - "datasets/dcbench/v1/instances/sentry__42384da/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__42384da/annotation.yaml", - "hashed_secret": "37cac07f12840c352ec6b0a39443aaacc76a2607", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__42384da/annotation.yaml", - "hashed_secret": "3a034866ac11e27ad492ca1937bcfacf046ede36", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__45fc05c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__45fc05c/annotation.yaml", - "hashed_secret": "80cf6e3fadba27f87d3926cabf68625cd1a81e64", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__45fc05c/annotation.yaml", - "hashed_secret": "731fdc759b0e8bbf1350f58c446c777b736d1511", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__4b97dee/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__4b97dee/annotation.yaml", - "hashed_secret": "6367332506a5f62867ac13c9da8b889fe7292eaa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__4b97dee/annotation.yaml", - "hashed_secret": "6ad1191328c8cbc110464405b4b39be909b2be88", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__4e71bc1/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__4e71bc1/annotation.yaml", - "hashed_secret": "624e4d2e1530311e7116e0fffeb334d933279dcd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__4e71bc1/annotation.yaml", - "hashed_secret": "dcfc9986a9114f925c0cf9bb89fa79cd31a7c693", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__5447b01/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__5447b01/annotation.yaml", - "hashed_secret": "0fdba056a3561fee78e8e283b0b47ea25616749e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__5447b01/annotation.yaml", - "hashed_secret": "d33939a7d5c1589dc53e889f72ee73e01e5f35c6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__5447b01/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__5447b01/patch.diff", - "hashed_secret": "f2b14f68eb995facb3a1c35287b778d5bd785511", - "is_verified": false, - "line_number": 224 - } - ], - "datasets/dcbench/v1/instances/sentry__6082b7f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6082b7f/annotation.yaml", - "hashed_secret": "f532b226d13529fa3e7ce81fb7cc6c26acb0973b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6082b7f/annotation.yaml", - "hashed_secret": "c580dcb1a33eb5ff9250c4a213496e02e67d1ffd", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__680d622/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__680d622/annotation.yaml", - "hashed_secret": "b7196def8e00837e47dce6d5574ede70a4d6a2a6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__680d622/annotation.yaml", - "hashed_secret": "c41d96d63a5657337751753df39e8bd3d532504a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__680d622/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__680d622/patch.diff", - "hashed_secret": "afc848c316af1a89d49826c5ae9d00ed769415f3", - "is_verified": false, - "line_number": 1863 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__680d622/patch.diff", - "hashed_secret": "9d73fc4051610250db220c86bf21087988d16745", - "is_verified": false, - "line_number": 2138 - }, - { - "type": "Basic Auth Credentials", - "filename": "datasets/dcbench/v1/instances/sentry__680d622/patch.diff", - "hashed_secret": "afc848c316af1a89d49826c5ae9d00ed769415f3", - "is_verified": false, - "line_number": 2243 - } - ], - "datasets/dcbench/v1/instances/sentry__6d21808/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6d21808/annotation.yaml", - "hashed_secret": "3a6066872a37e2d60411c8446b808b237f55317d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6d21808/annotation.yaml", - "hashed_secret": "c5f01e4b87a74c7b7adefd81f63617ce7f25dd3c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__6d21808/patch.diff": [ - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6d21808/patch.diff", - "hashed_secret": "a2d1fd62c6151dedfe21f72f0cd11b4052dccfb1", - "is_verified": false, - "line_number": 166 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__6d21808/patch.diff", - "hashed_secret": "a2d1fd62c6151dedfe21f72f0cd11b4052dccfb1", - "is_verified": false, - "line_number": 166 - }, - { - "type": "Base64 High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__6d21808/patch.diff", - "hashed_secret": "52383cf59edf38299281c25c2e13e24d41c2393f", - "is_verified": false, - "line_number": 167 - } - ], - "datasets/dcbench/v1/instances/sentry__726337e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__726337e/annotation.yaml", - "hashed_secret": "76a9d0c9001e4e95ad419afe63f6e9c6d657ffad", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__726337e/annotation.yaml", - "hashed_secret": "d87c12abc62fdc9455eefe0ac8f5df33618b7d04", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__737d9c3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__737d9c3/annotation.yaml", - "hashed_secret": "3da15a39fe6cd8ac5f58eeadfb945261a7429d73", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__737d9c3/annotation.yaml", - "hashed_secret": "e780103fbd3e4f44bd6e69299f7be31bd1f7f9dc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__757cf20/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__757cf20/annotation.yaml", - "hashed_secret": "de3feb25df45c97917b9ccbbccc2eac7ffda8d71", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__757cf20/annotation.yaml", - "hashed_secret": "8c663399d5febe1fcdc1714935694fa0945df852", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__848efcc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__848efcc/annotation.yaml", - "hashed_secret": "d9e4e4f89409ed2a11982a44ca94b17dbb896f8d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__848efcc/annotation.yaml", - "hashed_secret": "dc5c96f8ec7830094e09a73ce5c8912dcae31468", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__9458371/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__9458371/annotation.yaml", - "hashed_secret": "eb3e47212d0147e357504ea6e88cd2de84ba3fc2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__9458371/annotation.yaml", - "hashed_secret": "ab00b0c934611485e8e3874a53809be9b4e975d3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__a4565db/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__a4565db/annotation.yaml", - "hashed_secret": "32fab18a9d89d0493a2aac6b1dfe83dcec9c0dce", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__a4565db/annotation.yaml", - "hashed_secret": "7b0751f74112cc488eafdbce5af36da0f47fd515", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__a8d6180/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__a8d6180/annotation.yaml", - "hashed_secret": "5446bd5f359f95e9062df73f8691d3aa8e3fbc6f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__a8d6180/annotation.yaml", - "hashed_secret": "017661e64e908296c7c09c04b79ea0b70f57925f", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__a8d6180/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__a8d6180/patch.diff", - "hashed_secret": "ab012ce78a7b84335b7590d23b15d91a1452fa47", - "is_verified": false, - "line_number": 15616 - } - ], - "datasets/dcbench/v1/instances/sentry__b3e9f66/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__b3e9f66/annotation.yaml", - "hashed_secret": "745f1d50bb6d0fcd641b871438837bce676dfa0b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__b3e9f66/annotation.yaml", - "hashed_secret": "ce777e662fe387aa51a1f8814149260343c60fc0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__d265446/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d265446/annotation.yaml", - "hashed_secret": "09b203cad545eb6916be661538f59e7df547eaa7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d265446/annotation.yaml", - "hashed_secret": "7ce34ef2601f33f75f8052d600d87f26934117a0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__d265446/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__d265446/patch.diff", - "hashed_secret": "e3c7d3c18f653c48c3761277c047b33ee63720f0", - "is_verified": false, - "line_number": 10376 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__d265446/patch.diff", - "hashed_secret": "206c80413b9a96c1312cc346b7d2517b84463edd", - "is_verified": false, - "line_number": 11977 - } - ], - "datasets/dcbench/v1/instances/sentry__d4e4b74/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d4e4b74/annotation.yaml", - "hashed_secret": "fa8f7759aec9810e68823d290e85f33c4cc7d209", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d4e4b74/annotation.yaml", - "hashed_secret": "1fdfdf16a0f1ef344363f9cc1f647babe90b114c", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__d4e4b74/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__d4e4b74/patch.diff", - "hashed_secret": "fe8e3b4b30c960767bf8ca878fb88767353605ce", - "is_verified": false, - "line_number": 470 - } - ], - "datasets/dcbench/v1/instances/sentry__d68ed8b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d68ed8b/annotation.yaml", - "hashed_secret": "8ef4f8bf72ad1ee8f2f64488e2703a377f8dab32", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__d68ed8b/annotation.yaml", - "hashed_secret": "4529ceb1e0763c1dc58e77699b72fa9aa8bc0f45", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__dc4fb35/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__dc4fb35/annotation.yaml", - "hashed_secret": "e8c06b28d77ce72f7ffe35567be9280a28af6ff0", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__dc4fb35/annotation.yaml", - "hashed_secret": "8e78c6df84c3f49a1c1122616219930acc65f6b9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__dc4fb35/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__dc4fb35/patch.diff", - "hashed_secret": "fe1bae27cb7c1fb823f496f286e78f1d2ae87734", - "is_verified": false, - "line_number": 1583 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__dc4fb35/patch.diff", - "hashed_secret": "147545dbf0d56f69b80a68566f18b3d9f3346483", - "is_verified": false, - "line_number": 1772 - } - ], - "datasets/dcbench/v1/instances/sentry__dc56fdd/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__dc56fdd/annotation.yaml", - "hashed_secret": "93166eabef8205a16a234b418ef3ecec51a3d9e8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__dc56fdd/annotation.yaml", - "hashed_secret": "7598bc42de33dcdfd2e1d614870bc51bfda0f7e6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__e1c55b8/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__e1c55b8/annotation.yaml", - "hashed_secret": "1330e1551f33f56ff077c99afd52b974e5f24449", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__e1c55b8/annotation.yaml", - "hashed_secret": "d84d84b8d74315977851aa03fb55da0bc4b1c656", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__e1c55b8/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__e1c55b8/patch.diff", - "hashed_secret": "ef63ae55c582272d0e69265b3d9bb5114195223c", - "is_verified": false, - "line_number": 2515 - }, - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__e1c55b8/patch.diff", - "hashed_secret": "0b99cebe565822c64ac5d84aecb00fe40e59cbd3", - "is_verified": false, - "line_number": 5277 - } - ], - "datasets/dcbench/v1/instances/sentry__eaa7bd3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__eaa7bd3/annotation.yaml", - "hashed_secret": "6d17b7745ede2a71203e9bd6ddc6385b96837b98", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__eaa7bd3/annotation.yaml", - "hashed_secret": "42b117a044d3cb614b7f740d3799f74ab354085a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__f352de0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f352de0/annotation.yaml", - "hashed_secret": "f5d27dde97a84281cf07239e87eadc640d9989a7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f352de0/annotation.yaml", - "hashed_secret": "87bec2664d587ab7dbd3dc28582c53561cc0455e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__f4fa54e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/annotation.yaml", - "hashed_secret": "f7493fa77bf010d2e9a71750c8724cd66b514692", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/annotation.yaml", - "hashed_secret": "199c753cde292620a03ce4045a85a364616ae1d6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "de42e8e74d9961422fd91ba332f04f67d679ac48", - "is_verified": false, - "line_number": 1846 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "bf52016b6650da27649e0bd207e631196228cb6c", - "is_verified": false, - "line_number": 1950 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "4ee84c5f2ec76da58652fed48425d1c2d3559af3", - "is_verified": false, - "line_number": 1991 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "fd87842d71f0544b1ac4793b0a8cf1b3445664e0", - "is_verified": false, - "line_number": 2079 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "5d451d467fc25f394a17823e3992a5b486040404", - "is_verified": false, - "line_number": 2136 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "90c17b94cc4e4489932904a6743e6b71316bc7b8", - "is_verified": false, - "line_number": 2198 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "47655ea880e1517153d4e7632f62655c01e2e9a5", - "is_verified": false, - "line_number": 2248 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "24de92c063e1e52164e1f9309bc95a9c812640de", - "is_verified": false, - "line_number": 2310 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "522278e6bbbf848b6bb3a0e8e940f6d0cc510cc4", - "is_verified": false, - "line_number": 2372 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "28cf8706f8f31a96da1376363e39e6ae0aa23d6f", - "is_verified": false, - "line_number": 2429 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "e0094c7bc04bcbfca53800fb37654ab8f59e6d56", - "is_verified": false, - "line_number": 2465 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "953ddf076289d0511786521baa2c6666a8fde374", - "is_verified": false, - "line_number": 2496 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "5fd374ca13fb3bb098997eb942dcc538d38a2cc6", - "is_verified": false, - "line_number": 2516 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "88a56ec540aa2e110587129bb4ecac2ddfe8415c", - "is_verified": false, - "line_number": 2622 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "bf9c18d422a078d4a782281a8f9a842858931101", - "is_verified": false, - "line_number": 2699 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "dba3f804e12a2319f42c9052fcb1ba56a59ba7f3", - "is_verified": false, - "line_number": 2730 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "e166ad688c545d30e32105306eafca1d023ffe4d", - "is_verified": false, - "line_number": 2761 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "f8c0cd4ccc63513d22c9436f89c3ecedfaea2b04", - "is_verified": false, - "line_number": 2786 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "89bb3f726ca672cdc1361ecf331fca25cdaa34ce", - "is_verified": false, - "line_number": 2804 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "6512c2a411a9162b2cb449594e910333d4aebd67", - "is_verified": false, - "line_number": 2826 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "a258e0b13a4d6297adfbf69b562fca49ab0a734a", - "is_verified": false, - "line_number": 2956 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f4fa54e/patch.diff", - "hashed_secret": "60374e9bd8ab97871f7308e6316eac244a901555", - "is_verified": false, - "line_number": 2981 - } - ], - "datasets/dcbench/v1/instances/sentry__f6263b2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/annotation.yaml", - "hashed_secret": "4aa55b4ca3bdcb20b6a0da7f49809c9960d1d0da", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/annotation.yaml", - "hashed_secret": "9f79239091fc6820720b243523db3d91c8abc2ae", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__f6263b2/patch.diff": [ - { - "type": "Secret Keyword", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/patch.diff", - "hashed_secret": "a5d6c60cfd7e61e52c5e3c0494a9a23c550096cb", - "is_verified": false, - "line_number": 2810 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/patch.diff", - "hashed_secret": "ada6be79e3a3ee086d44f97634086ff086693b9f", - "is_verified": false, - "line_number": 4366 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/patch.diff", - "hashed_secret": "04b995337218c012f2ed0f1bf5a8e6b7c3bf6355", - "is_verified": false, - "line_number": 4367 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f6263b2/patch.diff", - "hashed_secret": "41f8c4eb3fb72f2cd87543d21a089577748f8b11", - "is_verified": false, - "line_number": 5687 - } - ], - "datasets/dcbench/v1/instances/sentry__f7aa1be/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f7aa1be/annotation.yaml", - "hashed_secret": "18ef93f521c3cbda4fc19acf30d129a9c3930bcf", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f7aa1be/annotation.yaml", - "hashed_secret": "e9b2e69e7205acf1a95fcdee7908ccd3599d8cf8", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__f8386e3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f8386e3/annotation.yaml", - "hashed_secret": "f3955f9ce80749b1578540ed67dfe7e1599d4aff", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__f8386e3/annotation.yaml", - "hashed_secret": "e16d804a03f11c5b51cd80ce4dfdd8c2bbaf94cc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__fd69ceb/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__fd69ceb/annotation.yaml", - "hashed_secret": "571288b01f84d72f7db76e9fc79dbb6c216fac98", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__fd69ceb/annotation.yaml", - "hashed_secret": "b9830c66dc38055ff5d351f41f12247ad866594d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/sentry__fea5b1b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__fea5b1b/annotation.yaml", - "hashed_secret": "43ce7234f2e03c3dbe6920c744bfad7389b18e2b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/sentry__fea5b1b/annotation.yaml", - "hashed_secret": "25e942b44a47a8d784af8b25b31340ae621705da", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__00f1057/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__00f1057/annotation.yaml", - "hashed_secret": "efb3afa4d5d5fb90e2bceeef94b5d23fde5c4e5b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__00f1057/annotation.yaml", - "hashed_secret": "e13f951a666c049f77072dd7155368232c334c02", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__0666f5c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__0666f5c/annotation.yaml", - "hashed_secret": "21ef2731a28608215acd4c92bbe451c7095e3b9e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__0666f5c/annotation.yaml", - "hashed_secret": "9246a7287313dababed42e41e26fb3429ee62569", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__128fb13/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__128fb13/annotation.yaml", - "hashed_secret": "c90c53e11a95611a1c709c4bf26c013df7d62385", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__128fb13/annotation.yaml", - "hashed_secret": "31bcf42e72f3bd79317196d72cfadb71e7a6fa0e", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__1e7e47d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__1e7e47d/annotation.yaml", - "hashed_secret": "f26a2a696ec32b6187beab1ece9260b11a02aea9", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__1e7e47d/annotation.yaml", - "hashed_secret": "772ed05755c1f3f4fd38eafb87d99bfb67c48fa1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__2113f10/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__2113f10/annotation.yaml", - "hashed_secret": "2933e5c6f3eaaf97827e4a8335862384d6ac1c73", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__2113f10/annotation.yaml", - "hashed_secret": "174807ed1a23a80c73fad40b75fa26a869b8cf25", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__25a14c3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__25a14c3/annotation.yaml", - "hashed_secret": "d2cb50a988bb1b1072987855a4ef696cdb9a73dd", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__25a14c3/annotation.yaml", - "hashed_secret": "94645fe182e6fb4c4fdee2a73a5c054388b034bf", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__29ef893/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__29ef893/annotation.yaml", - "hashed_secret": "58fb2a5359e48ae31493dc896d7de5176e1a25da", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__29ef893/annotation.yaml", - "hashed_secret": "e71db50351cd974be02a9e5a4e5b57f73af2a211", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__434aa30/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__434aa30/annotation.yaml", - "hashed_secret": "70c08543a40503d789cda9f693562c7f043262ed", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__434aa30/annotation.yaml", - "hashed_secret": "bb0c35cff5646b30d031a06942401d951442b5cc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__4d13c22/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__4d13c22/annotation.yaml", - "hashed_secret": "eef7abddf58c2f51114426ee4675a33f6f53b226", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__4d13c22/annotation.yaml", - "hashed_secret": "ad0ab3965495feae1a0314051ed0c8c93f56dbb6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__6537153/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__6537153/annotation.yaml", - "hashed_secret": "05b2a83509e8336f1c0218a1f9bab455b4e153aa", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__6537153/annotation.yaml", - "hashed_secret": "fb2cdc606cdd5681c503edcbb9c6183d44a8d8ff", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__747846b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__747846b/annotation.yaml", - "hashed_secret": "bc91318b16c798ce99bcbf31566a2a60a5a45c3f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__747846b/annotation.yaml", - "hashed_secret": "515f1dd3b019978a2e5346e172060bd4c5c63eaa", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__89041a4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__89041a4/annotation.yaml", - "hashed_secret": "b304ca6d9ddd1ae8a304afc3f0bc385627871a1f", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__89041a4/annotation.yaml", - "hashed_secret": "f79c8d07eabc7b946c5b30bf3143e48a3b3e2c79", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__9126356/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__9126356/annotation.yaml", - "hashed_secret": "f8b146babd7a7dbda9cd3241a1c2f5bcac279919", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__9126356/annotation.yaml", - "hashed_secret": "c6da647da16a4c039e44eac17419c9f44b59dd51", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__97241eb/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__97241eb/annotation.yaml", - "hashed_secret": "b28b6164273c4a3fc6aeca2c73a43196e10bdcbc", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__97241eb/annotation.yaml", - "hashed_secret": "c90e5585c5b88096201909d26d566b01eb5180ef", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__a3930d3/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__a3930d3/annotation.yaml", - "hashed_secret": "9a312eefe359e8fafeb4cd9d381c92dfd6ba8ed3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__a3930d3/annotation.yaml", - "hashed_secret": "508a9ce5fccf4cb2b2a574edc53fff859372eaed", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__c0a1ea2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c0a1ea2/annotation.yaml", - "hashed_secret": "0347e05cd846fc653656c766d1b9ed2c31618f20", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c0a1ea2/annotation.yaml", - "hashed_secret": "6bfac308c61ef8c6ef075bc8c5d71306df4b40b1", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__c46d4ca/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c46d4ca/annotation.yaml", - "hashed_secret": "94367737d86d4e654b0eb44f255888aee202bb88", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c46d4ca/annotation.yaml", - "hashed_secret": "3145606d95cd7e0fc42bc6a44c2d2c5f77e677be", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__c57556c/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c57556c/annotation.yaml", - "hashed_secret": "8b00d0bd07d0b4b390c793ddbeb10a056ec6528e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__c57556c/annotation.yaml", - "hashed_secret": "2806e3bde37d3234bb9aa411862cf8c7b5800f8a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__cb59383/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__cb59383/annotation.yaml", - "hashed_secret": "d638a40b15088bc3daf54bd0920b5d5a6e6ef31a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__cb59383/annotation.yaml", - "hashed_secret": "f589125a35e7038cba316b0689866a9665f7a648", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__d082ad0/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__d082ad0/annotation.yaml", - "hashed_secret": "bb9e5fc59455d628ff815ecf2507e8fb92ba7db7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__d082ad0/annotation.yaml", - "hashed_secret": "27fa7c85a7062f08219bc10e629dc2edafb52275", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__d429653/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__d429653/annotation.yaml", - "hashed_secret": "8bb8a383af5d6ec660db22534b205b8a1b665b20", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__d429653/annotation.yaml", - "hashed_secret": "8cb8d949cb3a9ba520d454c4399e7310bec7c9b3", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/spark__f84cca2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__f84cca2/annotation.yaml", - "hashed_secret": "857aa802b69b8fed7df33e00c139c280baa4bd3e", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/spark__f84cca2/annotation.yaml", - "hashed_secret": "8ae598d4d6ff75bf7b2abe2eeaa324605e4a9da6", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__0284d1b/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__0284d1b/annotation.yaml", - "hashed_secret": "fe2f7796296c63c8ee7e51abcd3382b25678f391", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__0284d1b/annotation.yaml", - "hashed_secret": "5146a8ac064af517c0300cbb87eecb114fc0fe79", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__048049f/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__048049f/annotation.yaml", - "hashed_secret": "4412f520d38958d384b6752dea798e32a7ad9a7a", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__048049f/annotation.yaml", - "hashed_secret": "e60c0c08d22f9a803e25a5f126b21acf39d0fc7a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__1204da7/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__1204da7/annotation.yaml", - "hashed_secret": "fd78263a7004e4d461fd45194ee75be3694b22b3", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__1204da7/annotation.yaml", - "hashed_secret": "f1bab0870bcc640e4895421ea5293e5d0d8ec311", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__159a3b2/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__159a3b2/annotation.yaml", - "hashed_secret": "02c2fa1865b4272fc1b0c1f0ec4ca1b43533b5c2", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__159a3b2/annotation.yaml", - "hashed_secret": "d738736344504f644caee1b04e06e17f520b85b2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__17cc283/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__17cc283/annotation.yaml", - "hashed_secret": "1cd179f818006250755ae09d0f730ef5a03050d8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__17cc283/annotation.yaml", - "hashed_secret": "0373c4d15ec7fff6f47e50d09cbd63afce73e579", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__218f262/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__218f262/annotation.yaml", - "hashed_secret": "b823bfb9b736a006e0bb340efd359864c8eb2e5d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__218f262/annotation.yaml", - "hashed_secret": "ea76e6e7ffedc3a836d9e9a52a04d0d1b93bddca", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__3b5a15d/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__3b5a15d/annotation.yaml", - "hashed_secret": "f2eb9ce8f8706da7985357710b5c1d9fb13d0fc6", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__3b5a15d/annotation.yaml", - "hashed_secret": "95c2bd64e693acfa687758b3ab4e501cf861f782", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__4b96af6/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__4b96af6/annotation.yaml", - "hashed_secret": "f4ca6a404094128a60ae85925b364da1a167dd37", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__4b96af6/annotation.yaml", - "hashed_secret": "490d135a442e8e3500be74b5e5814c9c08a572d0", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__5b4cbbc/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__5b4cbbc/annotation.yaml", - "hashed_secret": "48d77d41a912f290359bd64542079831b1e197a8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__5b4cbbc/annotation.yaml", - "hashed_secret": "ab25fc38248f0ee39d15845feac957695d6f8e1a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__9730317/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__9730317/annotation.yaml", - "hashed_secret": "5e3ae2ab42bf3fa705494fa87629381d6ab616b8", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__9730317/annotation.yaml", - "hashed_secret": "806cecfb316591066854f5580f973049ca3ec19a", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__a7bb054/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__a7bb054/annotation.yaml", - "hashed_secret": "3540529ebd3a465ba952734ce878959b54eebef7", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__a7bb054/annotation.yaml", - "hashed_secret": "e6a2491479ed6f5268c25cd807b9b9db4bf58a15", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__a8b6353/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__a8b6353/annotation.yaml", - "hashed_secret": "397228e85db386fd8801500f52b76b9276bd6417", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__a8b6353/annotation.yaml", - "hashed_secret": "2a6fc35d762cd474a37aafe4f23f25311cac929d", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__af6c87a/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__af6c87a/annotation.yaml", - "hashed_secret": "cb766579e8ced4fa014b5eaf2f46d377759e4535", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__af6c87a/annotation.yaml", - "hashed_secret": "c36e565ad376a36c600fe9af29f57a51c1edd6f9", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__d1f1499/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__d1f1499/annotation.yaml", - "hashed_secret": "b05774c5f48e84d6b6c522859188044c00b6b46d", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__d1f1499/annotation.yaml", - "hashed_secret": "75018403b9fdce8a7bd6710ea81a60ca5e8820fc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__ea30a5e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ea30a5e/annotation.yaml", - "hashed_secret": "19177de915f53d3f16c882fa1c07b35cd845df4b", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ea30a5e/annotation.yaml", - "hashed_secret": "ae83896fa3b6138f160c7cc62d0d16c93d5bbfd2", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__ebeb78e/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ebeb78e/annotation.yaml", - "hashed_secret": "6e7e3618726a8c9541b7f8c4de50892fe6ce6986", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ebeb78e/annotation.yaml", - "hashed_secret": "e47bf1673e40628da05dfda99ab897511a7db2db", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/instances/tokio__ee1f0c4/annotation.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ee1f0c4/annotation.yaml", - "hashed_secret": "bbe03e698dcd85c975865488ea8113e091f03df1", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/instances/tokio__ee1f0c4/annotation.yaml", - "hashed_secret": "5d294005728299c07b008edfdf3bbc1c01d226cc", - "is_verified": false, - "line_number": 3 - } - ], - "datasets/dcbench/v1/repos.yaml": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "2da19189baefce1a54787caa92fbf84ea94525f8", - "is_verified": false, - "line_number": 5 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "bcd97cabd4a425d1b2b4d48930c369e57152ba07", - "is_verified": false, - "line_number": 10 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "e2871bce0f9c13c733961033ea470c6c678f4cc8", - "is_verified": false, - "line_number": 14 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "74d961370917469b85299f9fd9690c10a3fe92e1", - "is_verified": false, - "line_number": 20 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "cbfc7580345b725768838770e6e2e65e20438a86", - "is_verified": false, - "line_number": 24 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "b9cbbed0a5fa3426dd96c90f0a5425f7b13e1e41", - "is_verified": false, - "line_number": 30 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "4c740a449d0361682d8be00c270215b72fae7b29", - "is_verified": false, - "line_number": 35 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "5066e2bc79a3871090dfa08c5b2ff37d3ef45fad", - "is_verified": false, - "line_number": 40 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "eff91d2b642e1d181f1125ff51dcea550d41aa48", - "is_verified": false, - "line_number": 44 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "4dcbadca36b2b44e0fb74b914bdfb6274ad3efe1", - "is_verified": false, - "line_number": 49 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "68785ea1de118961ccc0a5f0b4fb9d33de4e2fd4", - "is_verified": false, - "line_number": 54 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "c0bf729e328cddbbe9a33c7fda7591385ac811dd", - "is_verified": false, - "line_number": 59 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "7246310276dd9708405e40570295b01de1083383", - "is_verified": false, - "line_number": 64 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "e64ac9c843975ee8b641fc66bce5b90d0b5f2ec5", - "is_verified": false, - "line_number": 68 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "1aeecfe39b5755c19520eea2e4727239d58d3b46", - "is_verified": false, - "line_number": 73 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "68f47ea4238bbb4c4c65595df6360361c61752ae", - "is_verified": false, - "line_number": 78 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "62651b37afcfe54dbe5e01382e9faa25dcc5ea75", - "is_verified": false, - "line_number": 84 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "0ebb1a8bc2823e9adce7f383e72d62f39cb9b1df", - "is_verified": false, - "line_number": 89 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "eca3dabf9101e254778faae359f686ab2146b0a9", - "is_verified": false, - "line_number": 93 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "c2f70ec7b28d8e473b1feb1500d8b6e421674c95", - "is_verified": false, - "line_number": 99 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "b819f7ee0233b834581e89e8976e492f9f3645e8", - "is_verified": false, - "line_number": 104 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "0c3353d9a4200911afd8fb74e64401a78569c794", - "is_verified": false, - "line_number": 108 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "43aae6d715b34f838191969b6fe8db032826367f", - "is_verified": false, - "line_number": 113 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "664082fea73ed412db610d2e3f452c84507f5460", - "is_verified": false, - "line_number": 118 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "7f21f8519e510a2fe57bc914e916ad0da136dedd", - "is_verified": false, - "line_number": 124 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "b5f628dc9864809c369f4711ea6d88bcd64b4f8d", - "is_verified": false, - "line_number": 129 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "78bac8f3784f8d79e70563b01a53dc20810f40d2", - "is_verified": false, - "line_number": 134 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "a80d7c87aff9beff68861879c31284e987dc9f53", - "is_verified": false, - "line_number": 139 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "cdc39b0e48da014b7802d0a14ebe5f4d070ca46b", - "is_verified": false, - "line_number": 143 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "4d7504327c591bb91abd5a263f93f2391111e79e", - "is_verified": false, - "line_number": 149 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "12ce170ef5d8e5d90bb8d1eea2a3f9a6b3632854", - "is_verified": false, - "line_number": 153 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "7787700358a5b147db5f5bd8a2eae479d7590a4b", - "is_verified": false, - "line_number": 157 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "7b0dadd0acf7714bcc150e78945684967b8ef738", - "is_verified": false, - "line_number": 162 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "dbbee0855be8b11ce49569abcacca91340a41af3", - "is_verified": false, - "line_number": 167 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "ceb597be6633f2b2dbda5e38da18bc9de669b63b", - "is_verified": false, - "line_number": 172 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "931e13eaa603452a3761b8988253b6b015040ef9", - "is_verified": false, - "line_number": 177 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/dcbench/v1/repos.yaml", - "hashed_secret": "6b64c3de646db8e320a194d3ba9e5de280bd0aaf", - "is_verified": false, - "line_number": 181 - } - ], - "datasets/external-revisions.json": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "e5a3867cc8a1a7dd2c7015504836d1dc239b197c", - "is_verified": false, - "line_number": 5 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "129f61346a1492b155ebeafb7fd62f3bbbf76b9a", - "is_verified": false, - "line_number": 10 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "6227f2316e0dbf09911c0fa1a5c38bbd1f07a22e", - "is_verified": false, - "line_number": 15 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "7d9883279d95b426adef5e2a7957eaad134eeb0b", - "is_verified": false, - "line_number": 20 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "eec13eb9cf64af52e0f174eb8d0213745513a840", - "is_verified": false, - "line_number": 25 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "7167e11651a6adf2c73acb4ef031697ca4aacaad", - "is_verified": false, - "line_number": 30 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/external-revisions.json", - "hashed_secret": "b92aaaab5a3c7b2224a7ae65745943c1c07c9006", - "is_verified": false, - "line_number": 35 - } - ], - "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl": [ - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "257a8210338e4119150fef3c4a51b677d31f9392", - "is_verified": false, - "line_number": 1 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "2fce6160a1adca669b5a47e719c6ddb5251e6fd4", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "a5a6304dfc827bb109bc3a3dd2b563002bfed272", - "is_verified": false, - "line_number": 3 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "0fdb43d45fdd72b99768cf78795e6073215c3be1", - "is_verified": false, - "line_number": 4 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "5099d9e353d7dd8b7fb58f7722b0e6eaa51ddbb0", - "is_verified": false, - "line_number": 5 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "b443ca18a03aca4a8134b770b0f4402c0ee5b6ac", - "is_verified": false, - "line_number": 6 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "712f6f017ea81566e43802716035d17ebd9a0235", - "is_verified": false, - "line_number": 7 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "1c0f3301dc8b00b3b5e03cfd7ccf480210bec607", - "is_verified": false, - "line_number": 8 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "02efbe8de572243a2c83e60d7a18c4847d07ef6c", - "is_verified": false, - "line_number": 9 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d5bfd3589c764bf424dcccef4fce9cbfad4e863d", - "is_verified": false, - "line_number": 10 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "836c78de970d81c8fe49f1b22bc58af1f242493b", - "is_verified": false, - "line_number": 11 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "5c1eb948982bdfde2e83c9fb2afac2d5a6d66603", - "is_verified": false, - "line_number": 12 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "00a2fc3fe5048c310f9675d543bdf96c601fa84b", - "is_verified": false, - "line_number": 13 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "164a3fcbed7a558f43a1fc3c778209c6e5f103b2", - "is_verified": false, - "line_number": 14 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e033308e6f2d88de9be61b36ce44b38b7b1e07f0", - "is_verified": false, - "line_number": 15 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "24305f4658fca6f5310ee6673dcb4694e3bbd8b0", - "is_verified": false, - "line_number": 16 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "a47c53fde8935669a12dfd05e77d0ceafda35b4d", - "is_verified": false, - "line_number": 17 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "5f5c720536fc2de3dd4c2e501eb026ed99d713ca", - "is_verified": false, - "line_number": 18 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "3479b15f79d0b8f664b69834e7912cfc7c1b1119", - "is_verified": false, - "line_number": 19 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "0f2facc48f84e6edd83359bfab591d96ba25e394", - "is_verified": false, - "line_number": 20 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "2982b85fa8fe8e1ea16db10ceee7c086c409ca7c", - "is_verified": false, - "line_number": 21 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e6d127c0e9962a6bdfaa06579a5055672f053708", - "is_verified": false, - "line_number": 22 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "727f12673689dee3b01ac0ee72ff0fe109c366de", - "is_verified": false, - "line_number": 23 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "3d1cf2512072c7690b1e3bd23a18a30706e5d921", - "is_verified": false, - "line_number": 24 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "c83e3ddbebd140f33c46bb0ff9804b513f2f3277", - "is_verified": false, - "line_number": 25 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "bff81e6dfc6c364c9b214e8b512669e5159d0e65", - "is_verified": false, - "line_number": 26 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "46ba162abe94bddf6fb6487076112ccb11462031", - "is_verified": false, - "line_number": 27 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "718f0b1ba14d5d26b8ec0c18ed234cbae383c8ea", - "is_verified": false, - "line_number": 28 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e3c276a8533c0cb2620a568cc9f6312aea52aafd", - "is_verified": false, - "line_number": 29 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "a4213e7cd0e94eb4070953e0f389e52423cb2596", - "is_verified": false, - "line_number": 30 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "ea4cf47d8fa5e4ee23b83c000c2db1a7ec96c06a", - "is_verified": false, - "line_number": 31 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "28bdf249771892b31bee316f1133be0a77cb4027", - "is_verified": false, - "line_number": 32 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "617f98f03e09044be92e8b67d7c582296cfb4ddf", - "is_verified": false, - "line_number": 33 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "339bae742177c3837968a3bce063167a476c18eb", - "is_verified": false, - "line_number": 34 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "0bbe68562e373328d26be41711498c1355b13f87", - "is_verified": false, - "line_number": 35 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d91266b795f7f55675ac15f19d778d6d83536ed2", - "is_verified": false, - "line_number": 36 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "0a301404f09fde82123559defc7ff0f78a742283", - "is_verified": false, - "line_number": 37 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "9be1edb9ce55a177bc6f6d427c975d279bb17dcb", - "is_verified": false, - "line_number": 38 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "56d4450ddc70fd5cf2abc754e695f5adbd340d2d", - "is_verified": false, - "line_number": 39 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "a1272fff077fe6df68e605a3090f2f350eaf381a", - "is_verified": false, - "line_number": 40 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "ae704f52c362346424b572317bfc58bd97c7d2e6", - "is_verified": false, - "line_number": 41 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7c1a2749d53d645b460492a9f647db6c66056331", - "is_verified": false, - "line_number": 42 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "0a9c44450a4b222855f372ee983ecee3bfb5c13c", - "is_verified": false, - "line_number": 43 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "30b200ae40c7a1c28d22677b42ed0799864b9b6e", - "is_verified": false, - "line_number": 44 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "321ace8229de0d4098b6f930101bac4dc899db5d", - "is_verified": false, - "line_number": 45 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "9df4de8ddcfcd90b040c15bcdcab226edfef2ed5", - "is_verified": false, - "line_number": 46 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "4a04c842c0a170acfdff4de992642fb41fd88188", - "is_verified": false, - "line_number": 47 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "bf5cf5e72651049c0c53701f93bb383cbe005b9e", - "is_verified": false, - "line_number": 48 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "961a86976cae312ea1c5498ba7b67df3496fa13a", - "is_verified": false, - "line_number": 49 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "bb92c310a608316cf87e7b1d60ae709c4cf94da5", - "is_verified": false, - "line_number": 50 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "96c80133ed7f1aed2b922a2ec15230249ec2df04", - "is_verified": false, - "line_number": 51 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "2f6936868be04e5309c0865baf329cafd38f5ee6", - "is_verified": false, - "line_number": 52 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "3ee8b070b62138c7987da0d36984f958b8bd52f6", - "is_verified": false, - "line_number": 53 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "f88e570f281d46344e2fcc876986c04f9c9ba055", - "is_verified": false, - "line_number": 54 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "ca755d0de765e9a3961c7205c5a7b5e778b578fa", - "is_verified": false, - "line_number": 55 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "58efd84734ab34ad2d0184e74b3d9e88590878ed", - "is_verified": false, - "line_number": 56 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "071b8f0f21023a40b6c74b2515b70c63371dc899", - "is_verified": false, - "line_number": 57 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "9a258ee9b7853a32d9fa9a3e6b944e111c715792", - "is_verified": false, - "line_number": 58 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "14350ae4543f9ad688fb4b6ee0b73d87a6118764", - "is_verified": false, - "line_number": 59 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "f35818f64ebc04d6fa0ec8d708eeec357a5654fa", - "is_verified": false, - "line_number": 60 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "46f55d6b67999153a92152642a1e181ca3eb46ef", - "is_verified": false, - "line_number": 61 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "009186a6ab5fcc2494cd0f97b6c199606438e566", - "is_verified": false, - "line_number": 62 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "274702fec9fa1d5c8f7342e36a041c1f8e1c79ac", - "is_verified": false, - "line_number": 63 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "efd42c66204b55507613c12d3c50b87d4f89fa93", - "is_verified": false, - "line_number": 64 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "073db35bcf9d782bc45736413bf7b0d10e0e468f", - "is_verified": false, - "line_number": 65 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "097f965e42883008b5c2c88989b3700b08828cfa", - "is_verified": false, - "line_number": 66 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7b08e53286cf3f6278b02a2e5dc0530e1c5e3c7e", - "is_verified": false, - "line_number": 67 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "f5b6d402e1457d744978fdc56f18db20ebf26890", - "is_verified": false, - "line_number": 68 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "6e1620dcb6a26084dfe8cb2ffefa175cf1f2661f", - "is_verified": false, - "line_number": 69 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "22659827e4c85507e78e6828c8e51be8bd00c476", - "is_verified": false, - "line_number": 70 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "5fbdcf27fae83800155cd76e0136c04335ad5c55", - "is_verified": false, - "line_number": 71 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7e1b383cf8d1d603302b3aef956344599a077df8", - "is_verified": false, - "line_number": 72 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7ce34ef2601f33f75f8052d600d87f26934117a0", - "is_verified": false, - "line_number": 73 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "91579cf23246d85026e2420d9d0c7896b6a4efae", - "is_verified": false, - "line_number": 74 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "3a034866ac11e27ad492ca1937bcfacf046ede36", - "is_verified": false, - "line_number": 75 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "18b48af93e1c37191ad73ee99191823c9198b103", - "is_verified": false, - "line_number": 76 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "731fdc759b0e8bbf1350f58c446c777b736d1511", - "is_verified": false, - "line_number": 77 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "42b117a044d3cb614b7f740d3799f74ab354085a", - "is_verified": false, - "line_number": 78 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "4529ceb1e0763c1dc58e77699b72fa9aa8bc0f45", - "is_verified": false, - "line_number": 79 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "199c753cde292620a03ce4045a85a364616ae1d6", - "is_verified": false, - "line_number": 80 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "1589dbfbce48bb34cdba8de5e2f2f8671463291c", - "is_verified": false, - "line_number": 81 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "017661e64e908296c7c09c04b79ea0b70f57925f", - "is_verified": false, - "line_number": 82 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "87bec2664d587ab7dbd3dc28582c53561cc0455e", - "is_verified": false, - "line_number": 83 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "9f79239091fc6820720b243523db3d91c8abc2ae", - "is_verified": false, - "line_number": 84 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "c580dcb1a33eb5ff9250c4a213496e02e67d1ffd", - "is_verified": false, - "line_number": 85 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d5b261a3d5527bc6dbf0fd997aa100354e32ebdc", - "is_verified": false, - "line_number": 86 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d84d84b8d74315977851aa03fb55da0bc4b1c656", - "is_verified": false, - "line_number": 87 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d87c12abc62fdc9455eefe0ac8f5df33618b7d04", - "is_verified": false, - "line_number": 88 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e16d804a03f11c5b51cd80ce4dfdd8c2bbaf94cc", - "is_verified": false, - "line_number": 89 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "ce777e662fe387aa51a1f8814149260343c60fc0", - "is_verified": false, - "line_number": 90 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "6ad1191328c8cbc110464405b4b39be909b2be88", - "is_verified": false, - "line_number": 91 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "dc5c96f8ec7830094e09a73ce5c8912dcae31468", - "is_verified": false, - "line_number": 92 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "90c36082349b30845ced95d0cb482c5e8c04bde4", - "is_verified": false, - "line_number": 93 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "dcfc9986a9114f925c0cf9bb89fa79cd31a7c693", - "is_verified": false, - "line_number": 94 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "8e78c6df84c3f49a1c1122616219930acc65f6b9", - "is_verified": false, - "line_number": 95 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "a067ce3995822feb14dd11b7f4d56fe852737c26", - "is_verified": false, - "line_number": 96 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e9b2e69e7205acf1a95fcdee7908ccd3599d8cf8", - "is_verified": false, - "line_number": 97 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "25e942b44a47a8d784af8b25b31340ae621705da", - "is_verified": false, - "line_number": 98 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "b9830c66dc38055ff5d351f41f12247ad866594d", - "is_verified": false, - "line_number": 99 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "ab00b0c934611485e8e3874a53809be9b4e975d3", - "is_verified": false, - "line_number": 100 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "c41d96d63a5657337751753df39e8bd3d532504a", - "is_verified": false, - "line_number": 101 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "1fdfdf16a0f1ef344363f9cc1f647babe90b114c", - "is_verified": false, - "line_number": 102 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "dfa080667b6a88539c66f5bdc15ef151f884d356", - "is_verified": false, - "line_number": 103 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "c5f01e4b87a74c7b7adefd81f63617ce7f25dd3c", - "is_verified": false, - "line_number": 104 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7598bc42de33dcdfd2e1d614870bc51bfda0f7e6", - "is_verified": false, - "line_number": 105 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "8c663399d5febe1fcdc1714935694fa0945df852", - "is_verified": false, - "line_number": 106 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "d33939a7d5c1589dc53e889f72ee73e01e5f35c6", - "is_verified": false, - "line_number": 107 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "e780103fbd3e4f44bd6e69299f7be31bd1f7f9dc", - "is_verified": false, - "line_number": 108 - }, - { - "type": "Hex High Entropy String", - "filename": "datasets/real-world-diff/v1/diffctx_realworld_bench.jsonl", - "hashed_secret": "7b0751f74112cc488eafdbce5af36da0f47fd515", - "is_verified": false, - "line_number": 109 - } - ], - "packaging/npm/checksums.json": [ - { - "type": "Hex High Entropy String", - "filename": "packaging/npm/checksums.json", - "hashed_secret": "8171a71d8fbe6ea9c6fa70014537ea5225e411ca", - "is_verified": false, - "line_number": 2 - }, - { - "type": "Hex High Entropy String", - "filename": "packaging/npm/checksums.json", - "hashed_secret": "8e2f7d16d62f54cc5f45fea11863f57198911914", - "is_verified": false, - "line_number": 3 - }, - { - "type": "Hex High Entropy String", - "filename": "packaging/npm/checksums.json", - "hashed_secret": "f98d7a17c878d85896178e785c520fe510213e1b", - "is_verified": false, - "line_number": 4 - }, - { - "type": "Hex High Entropy String", - "filename": "packaging/npm/checksums.json", - "hashed_secret": "60d7b2b41cce8687ec8ac06431376d4ae15f3d89", - "is_verified": false, - "line_number": 5 + "line_number": 171 } ] }, - "generated_at": "2026-08-01T15:21:54Z" + "generated_at": "2026-08-20T20:38:19Z" } diff --git a/CITATION.cff b/CITATION.cff index 526403f00..7597b41d8 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -11,7 +11,7 @@ authors: email: nikolay.eremeev@outlook.com repository-code: https://github.com/nikolay-e/diffctx license: Apache-2.0 -version: 1.12.3 +version: 1.15.0 preferred-citation: type: article title: "diffctx: Budgeted Typed-Graph Retrieval for Diff-Aware Code Context Selection" diff --git a/CLAUDE.md b/CLAUDE.md index efd217481..a711bea70 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,15 +43,27 @@ tracked even when every per-commit verdict passes. ## Performance-change discipline (E/Q classes) Every change is either **E-class** (bit-equivalent: identical selection -output on identical input) or **Q-class** (output-changing). E-class -changes may land any time but must pass -`python -m eval equivalence --a --b ` on the -stratified 40-instance sample (`results/sweep_v2_local/equiv/manifests`), -plus a double-run determinism check. Q-class changes are frozen during an -evaluation cycle (calibration -> validation -> sweep) — they invalidate -the calibration and force a full rerun. The shared token corpus, the -per-blob token cache, and the two-pass edge cap are all E-class precedents; -fragmentation or scoring changes are Q-class. +output on identical input) or **Q-class** (output-changing). Q-class +changes are frozen during an evaluation cycle (calibration -> validation +-> sweep) — they invalidate the calibration and force a full rerun. The +shared token corpus, the per-blob token cache, and the two-pass edge cap +are all E-class precedents; fragmentation or scoring changes are Q-class. + +**Proving E-class, per commit: `scripts/bitcheck.sh record` on the +pre-change build, then `check` after.** 24 cells against a worktree pinned +at a fixed SHA, so editing the code cannot edit the input. It drives the +**native binary**, so it says nothing about `writer.py`, `_native/` or +`mcp/` — a Python-side E-class claim needs its own byte-diff through the +installed wheel. Its complement is the full corpus +(`cargo test --profile release-unwind --test yaml_cases`), which is the +only net over the per-language edge and parser tables bitcheck never +reaches. + +**At a release cycle:** `python -m eval equivalence --a --b +` on the stratified 40-instance sample +(`results/sweep_v2_local/equiv/manifests`) plus a double-run determinism +check. This one needs two full eval output directories and a local +`results/` tree, so it is not a per-commit gate and no CI job runs it. ## Testing diff --git a/README.md b/README.md index 332aaf8ed..5797534fb 100644 --- a/README.md +++ b/README.md @@ -193,9 +193,35 @@ reviewing PRs, explaining changes, or investigating broken tests. It ranks the code that explains a diff, then reads only the fragments the assistant picked — two calls that pay for the selection instead of a whole pack. The wider `get_tree_map` and `get_file_context` tools are opt-in via -`DIFFCTX_MCP_LEGACY_TOOLS=1`. Tool reference and JSON configs for Claude -Desktop, Cursor, Continue, Windsurf, and Zed: -[`src/diffctx/mcp/README.md`](src/diffctx/mcp/README.md). +`DIFFCTX_MCP_LEGACY_TOOLS=1`. Filesystem confinement via +`DIFFCTX_ALLOWED_PATHS`: see [SECURITY.md](SECURITY.md). + +Every stdio client takes the same server shape; only the config file differs: + +| Client | Config file | Key | +|---|---|---| +| Claude Code (project) | `.mcp.json` | `mcpServers` | +| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | +| Cursor | `~/.cursor/mcp.json` | `mcpServers` | +| Windsurf | `~/.codeium/windsurf/mcp_config.json` | `mcpServers` | +| Continue | `~/.continue/config.json` | `experimental.modelContextProtocolServers` (transport object) | +| Zed | `~/.config/zed/settings.json` | `context_servers` (`command.path`) | + +```json +{ + "mcpServers": { + "diffctx": { + "command": "uvx", + "args": ["--from", "diffctx[mcp]", "diffctx-mcp"] + } + } +} +``` + +With `pip install 'diffctx[mcp]'` already done, `"command": "diffctx-mcp"` with +no args works everywhere instead. Use the `diffctx-mcp` entry point, not the +`diffctx mcp` subcommand: the latter only exists from 1.12.3 onward and would +map a directory named `mcp` on older releases. ## Ignore patterns diff --git a/crates/diffctx-native/Cargo.toml b/crates/diffctx-native/Cargo.toml index 30962934b..882629c0f 100644 --- a/crates/diffctx-native/Cargo.toml +++ b/crates/diffctx-native/Cargo.toml @@ -172,6 +172,10 @@ should_implement_trait = "allow" multiple_crate_versions = "allow" single_match_else = "allow" new_without_default = "allow" +# `mul_add` is FMA: one rounding instead of two. Every site clippy flags is on +# a scoring path, so taking the suggestion changes selection output and +# invalidates the calibration — a Q-class edit disguised as a lint fix. +suboptimal_flops = "allow" [lints.rust] unsafe_code = "deny" diff --git a/crates/diffctx-native/src/analytics.rs b/crates/diffctx-native/src/analytics.rs index 5701c28a1..af1b31212 100644 --- a/crates/diffctx-native/src/analytics.rs +++ b/crates/diffctx-native/src/analytics.rs @@ -44,15 +44,13 @@ pub struct QuotientEdge { pub struct QuotientGraph { pub nodes: FxHashMap, QuotientNode>, pub edges: FxHashMap<(Arc, Arc), QuotientEdge>, - pub level: QuotientLevel, } impl QuotientGraph { - pub fn new(level: QuotientLevel) -> Self { + pub fn new() -> Self { Self { nodes: FxHashMap::default(), edges: FxHashMap::default(), - level, } } } @@ -161,7 +159,7 @@ pub fn quotient_graph( level: QuotientLevel, root: Option<&str>, ) -> QuotientGraph { - let mut qg = QuotientGraph::new(level); + let mut qg = QuotientGraph::new(); let mut fid_to_group: FxHashMap> = FxHashMap::default(); for frag in fragments { @@ -794,7 +792,7 @@ mod tests { #[test] fn mermaid_empty_graph() { - let qg = QuotientGraph::new(QuotientLevel::Directory); + let qg = QuotientGraph::new(); assert_eq!(to_mermaid(&qg, 20), "graph LR\n"); } diff --git a/crates/diffctx-native/src/edges/base.rs b/crates/diffctx-native/src/edges/base.rs index 5de2328c2..16ba93e28 100644 --- a/crates/diffctx-native/src/edges/base.rs +++ b/crates/diffctx-native/src/edges/base.rs @@ -26,10 +26,6 @@ pub trait EdgeBuilder: Send + Sync { None } - fn is_expensive(&self) -> bool { - false - } - /// A coverage-of-last-resort builder: its edges only count where the /// dedicated builders produced nothing. The dual-coverage attempt this /// gate encodes was measured as a 100% noise regression (#131) — tags @@ -90,7 +86,6 @@ pub fn path_to_module(path: &Path, repo_root: Option<&Path>) -> String { pub struct FragmentIndex { pub by_name: FxHashMap>, - pub by_path: FxHashMap>, /// Lowercased path table plus a component→paths posting list, so a path /// reference resolves by looking up its last component instead of scanning /// every indexed path. Every accepted alignment (equal, suffix, prefix, @@ -106,7 +101,6 @@ pub struct FragmentIndex { impl FragmentIndex { pub fn new(fragments: &[Fragment], repo_root: Option<&Path>) -> Self { let mut by_name: FxHashMap> = FxHashMap::default(); - let mut by_path: FxHashMap> = FxHashMap::default(); for f in fragments { let path = Path::new(f.path()); @@ -116,28 +110,10 @@ impl FragmentIndex { .or_default() .push(f.id.clone()); } - by_path - .entry(f.path().to_string()) - .or_default() - .push(f.id.clone()); - - if let Some(root) = repo_root { - if let Ok(rel) = Path::new(f.path()).strip_prefix(root) { - let rel_str = rel.to_string_lossy().to_string(); - by_path - .entry(rel_str.clone()) - .or_default() - .push(f.id.clone()); - let posix = rel_str.replace('\\', "/"); - if posix != rel_str { - by_path.entry(posix).or_default().push(f.id.clone()); - } - } - } } // One entry per FILE, keyed on the repo-relative posix path (the form - // path references are written in). Indexing every `by_path` variant put + // path references are written in). Indexing every path variant put // the same file under 2-3 keys, so `MAX_FILES_PER_PATH_REF` counted // duplicate keys and silently halved (#207) — and the absolute keys' // host directory components (`/home/runner/work/...`) matched @@ -170,7 +146,6 @@ impl FragmentIndex { Self { by_name, - by_path, lower_paths, component_to_paths, } diff --git a/crates/diffctx-native/src/edges/history/cochange.rs b/crates/diffctx-native/src/edges/history/cochange.rs index bd8b359b4..f694181f8 100644 --- a/crates/diffctx-native/src/edges/history/cochange.rs +++ b/crates/diffctx-native/src/edges/history/cochange.rs @@ -122,8 +122,4 @@ impl EdgeBuilder for CochangeEdgeBuilder { edges } - - fn is_expensive(&self) -> bool { - true - } } diff --git a/crates/diffctx-native/src/edges/mod.rs b/crates/diffctx-native/src/edges/mod.rs index b977be3a4..3216e178c 100644 --- a/crates/diffctx-native/src/edges/mod.rs +++ b/crates/diffctx-native/src/edges/mod.rs @@ -21,7 +21,6 @@ use crate::graph::{ use crate::types::FragmentId; pub type EdgeDict = FxHashMap<(FragmentId, FragmentId), f64>; -pub type EdgeCategories = FxHashMap<(FragmentId, FragmentId), EdgeCategory>; use crate::types::Fragment; diff --git a/crates/diffctx-native/src/edges/similarity/lexical.rs b/crates/diffctx-native/src/edges/similarity/lexical.rs index f3648433b..c60bfa4ca 100644 --- a/crates/diffctx-native/src/edges/similarity/lexical.rs +++ b/crates/diffctx-native/src/edges/similarity/lexical.rs @@ -296,8 +296,4 @@ impl EdgeBuilder for LexicalEdgeBuilder { edges } - - fn is_expensive(&self) -> bool { - true - } } diff --git a/crates/diffctx-native/src/graph.rs b/crates/diffctx-native/src/graph.rs index 159917645..aa7dc8939 100644 --- a/crates/diffctx-native/src/graph.rs +++ b/crates/diffctx-native/src/graph.rs @@ -68,8 +68,8 @@ pub struct CsrGraph { pub idx_to_node: Vec, } -/// Statistics from the per-source out-edge cap that runs in -/// `build_graph` after `apply_hub_suppression`. Surfaced to Python +/// Statistics from the per-source out-edge cap that runs after hub +/// suppression in `edges::collect_capped_edges`. Surfaced to Python /// via `LatencyBreakdown` so calibration runs can quantify how often /// the cap fires and how many edges it discards. #[derive(Default, Clone)] @@ -114,6 +114,7 @@ pub struct CompactEdge { /// edge collection and graph construction. `idx_to_node` is the sorted, /// deduplicated fragment-id universe, so CSR node indexing built from it /// is identical to the ordering `Graph::freeze` produces. +#[cfg(test)] pub struct CompactEdges { pub node_to_idx: FxHashMap, pub idx_to_node: Vec, @@ -588,6 +589,7 @@ impl SuppressionFactors { } } + #[cfg(test)] fn from_edges(edges: &[CompactEdge], idx_to_node: &[FragmentId]) -> Self { let n_nodes = idx_to_node.len(); let mut in_degree = vec![0u32; n_nodes]; @@ -628,6 +630,7 @@ impl SuppressionFactors { } } +#[cfg(test)] fn apply_hub_suppression(edges: &mut [CompactEdge], idx_to_node: &[FragmentId]) { if edges.is_empty() { return; @@ -850,9 +853,12 @@ pub fn build_graph_capped(fragments: &[Fragment], capped: CappedEdges) -> Graph assemble_graph(fragments, node_to_idx, idx_to_node, edges, cap_stats) } -/// Materialized-edge construction path kept for the map-based adapter -/// and small callers: hub suppression, per-source cap, and CSR assembly -/// all run on the interned edge array. +/// Materialized-edge construction path behind the map-based `build_graph` +/// adapter: hub suppression, per-source cap, and CSR assembly all run on +/// the interned edge array. Production never reaches here — it damps +/// inside `edges::collect_capped_edges` via `SuppressionFactors::from_counters` +/// and enters at `build_graph_capped`. +#[cfg(test)] pub fn build_graph_compact(fragments: &[Fragment], compact: CompactEdges) -> Graph { let CompactEdges { node_to_idx, diff --git a/crates/diffctx-native/src/lib.rs b/crates/diffctx-native/src/lib.rs index 0b1c21531..97bf60341 100644 --- a/crates/diffctx-native/src/lib.rs +++ b/crates/diffctx-native/src/lib.rs @@ -1,43 +1,63 @@ -//! Implementation crate for the `diffctx` CLI and Python extension. Every -//! module is public for those two consumers and the in-repo eval harness — -//! none of it is a stable library API, and internals may change or disappear -//! between releases without a semver signal. -pub mod analytics; -pub mod candidate_files; -pub mod config; -pub mod core; -pub mod deadline; -pub mod discovery; -pub mod edges; -pub mod excerpt; -pub mod filtering; -pub mod fragmentation; +//! Implementation crate for the `diffctx` CLI and Python extension. The `pub` +//! modules below are the ones the in-repo eval harness and the integration +//! tests import by path; everything else is `pub(crate)` so rustc's dead_code +//! lint stays meaningful. None of it is a stable library API — internals may +//! change or disappear between releases without a semver signal. + +// Input: git plumbing and path handling. pub mod git; -pub mod graph; -pub mod graph_export; -pub mod interval; -pub mod languages; -pub mod locate; +mod paths; + +// Change set: what the diff touched, cut into fragments. +pub(crate) mod candidate_files; +pub(crate) mod excerpt; +pub(crate) mod fragmentation; +pub(crate) mod languages; +pub(crate) mod parsers; +pub(crate) mod signatures; +pub(crate) mod testfiles; + +// Graph: relationships between fragments. +pub(crate) mod edges; +pub(crate) mod graph; +pub(crate) mod provenance; + +// Ranking: relevance of each candidate to the change. +pub(crate) mod core; +pub(crate) mod discovery; +pub(crate) mod filtering; +pub(crate) mod ppr; +pub(crate) mod scoring; +pub(crate) mod stopwords; +pub(crate) mod token_corpus; +pub mod tokenizer; + +// Selection: the budgeted greedy and its repairs. +pub(crate) mod interval; +pub(crate) mod postpass; +pub(crate) mod select; +pub(crate) mod utility; + +// Output. +pub(crate) mod locate; +pub mod render; + +// Orchestration and shared configuration. +pub mod config; +pub(crate) mod deadline; pub mod memory_pipeline; pub mod mode; -pub mod parsers; -mod paths; -pub mod peak_rss; +pub(crate) mod peak_rss; pub mod pipeline; -pub mod postpass; -pub mod ppr; -pub mod project_graph; -pub mod provenance; -pub mod render; -pub mod scoring; -pub mod select; -pub mod signatures; -pub mod stopwords; -pub mod testfiles; -pub mod token_corpus; -pub mod tokenizer; -pub mod types; -pub mod utility; +pub(crate) mod types; + +// `diffctx graph`: a side feature reachable only through the Python bindings. +#[cfg(feature = "python")] +pub(crate) mod analytics; +#[cfg(feature = "python")] +pub(crate) mod graph_export; +#[cfg(feature = "python")] +pub(crate) mod project_graph; #[cfg(feature = "python")] pub mod pybridge; diff --git a/crates/diffctx-native/src/project_graph.rs b/crates/diffctx-native/src/project_graph.rs index 8ca860806..7552dd4b9 100644 --- a/crates/diffctx-native/src/project_graph.rs +++ b/crates/diffctx-native/src/project_graph.rs @@ -9,7 +9,6 @@ use crate::candidate_files::collect_candidate_files; use crate::config::limits::LIMITS; use crate::edges; use crate::fragmentation::process_files_for_fragments; -use crate::git::CatFileBatch; use crate::graph::{self, Graph}; use crate::tokenizer::count_tokens; use crate::types::{Fragment, FragmentId}; @@ -20,38 +19,7 @@ pub struct ProjectGraph { pub root_dir: PathBuf, } -impl ProjectGraph { - pub fn node_count(&self) -> usize { - self.graph.node_count() - } - - pub fn edge_count(&self) -> usize { - self.graph.edge_count() - } -} - -pub struct ProjectGraphOptions { - pub use_git_batch_reader: bool, - pub skip_expensive_edges: Option, -} - -impl Default for ProjectGraphOptions { - fn default() -> Self { - Self { - use_git_batch_reader: false, - skip_expensive_edges: None, - } - } -} - pub fn build_project_graph(root_dir: &Path) -> Result { - build_project_graph_with_options(root_dir, &ProjectGraphOptions::default()) -} - -pub fn build_project_graph_with_options( - root_dir: &Path, - options: &ProjectGraphOptions, -) -> Result { let resolved_root = root_dir .canonicalize() .with_context(|| format!("failed to canonicalize root_dir '{}'", root_dir.display()))?; @@ -65,28 +33,14 @@ pub fn build_project_graph_with_options( ); let mut seen_frag_ids: FxHashSet = FxHashSet::default(); - let mut all_fragments = if options.use_git_batch_reader { - let mut batch_reader = CatFileBatch::new(&resolved_root)?; - let frags = process_files_for_fragments( - &candidate_files, - &resolved_root, - &[], - &mut seen_frag_ids, - Some(&mut batch_reader), - false, - ); - batch_reader.close(); - frags - } else { - process_files_for_fragments( - &candidate_files, - &resolved_root, - &[], - &mut seen_frag_ids, - None, - false, - ) - }; + let mut all_fragments = process_files_for_fragments( + &candidate_files, + &resolved_root, + &[], + &mut seen_frag_ids, + None, + false, + ); assign_token_counts(&mut all_fragments); @@ -96,9 +50,7 @@ pub fn build_project_graph_with_options( candidate_files.len() ); - let skip_expensive = options - .skip_expensive_edges - .unwrap_or_else(|| all_fragments.len() > LIMITS.skip_expensive_threshold); + let skip_expensive = all_fragments.len() > LIMITS.skip_expensive_threshold; let capped = edges::collect_capped_edges( &all_fragments, @@ -177,11 +129,11 @@ mod tests { let pg = build_project_graph(root).expect("build_project_graph"); assert!( - pg.node_count() >= 3, + pg.graph.node_count() >= 3, "expected fragments, got {}", - pg.node_count() + pg.graph.node_count() ); - assert_eq!(pg.fragments.len(), pg.node_count()); + assert_eq!(pg.fragments.len(), pg.graph.node_count()); assert!(pg.root_dir.is_absolute()); } @@ -195,8 +147,8 @@ mod tests { let pg = build_project_graph(root).expect("build_project_graph"); assert_eq!(pg.fragments.len(), 0); - assert_eq!(pg.node_count(), 0); - assert_eq!(pg.edge_count(), 0); + assert_eq!(pg.graph.node_count(), 0); + assert_eq!(pg.graph.edge_count(), 0); } #[test] diff --git a/crates/diffctx-native/src/pybridge.rs b/crates/diffctx-native/src/pybridge.rs index 128d9089a..f1f3e0771 100644 --- a/crates/diffctx-native/src/pybridge.rs +++ b/crates/diffctx-native/src/pybridge.rs @@ -349,7 +349,6 @@ fn count_tokens(text: &str) -> PyResult { // -- Project graph + analytics + export (Python-facing wrappers) ------------- use rustc_hash::{FxHashMap as RsFxHashMap, FxHashSet as RsFxHashSet}; -use std::path::PathBuf; use crate::analytics; use crate::graph::EdgeCategory; @@ -389,6 +388,11 @@ impl PyProjectGraph { self.inner.graph.edge_count() } + #[getter] + fn root_dir(&self) -> String { + self.inner.root_dir.to_string_lossy().into_owned() + } + fn __repr__(&self) -> String { format!( "ProjectGraph(fragments={}, nodes={}, edges={})", @@ -629,6 +633,7 @@ pub fn _diffctx(m: &Bound<'_, PyModule>) -> PyResult<()> { crate::config::selection::DEFAULT_CORE_BUDGET_FRACTION, )?; m.add("DEFAULT_SCORING", DEFAULT_SCORING)?; + m.add("DEFAULT_TIMEOUT", DEFAULT_PIPELINE_TIMEOUT_SECONDS)?; // Same reason as the constants above: the Python CLI enumerated the accepted // --scoring values in its own literal and fell out of step the moment a mode // was added, so `pit` parsed everywhere except the two CLIs. diff --git a/crates/diffctx-native/src/select.rs b/crates/diffctx-native/src/select.rs index 646ec741b..ac5568623 100644 --- a/crates/diffctx-native/src/select.rs +++ b/crates/diffctx-native/src/select.rs @@ -9,7 +9,7 @@ use crate::config::selection::selection; use crate::interval::IntervalIndex; use crate::types::{Fragment, FragmentId}; use crate::utility::needs::InformationNeed; -use crate::utility::scoring::{ +use crate::utility::objective::{ UtilityState, apply_fragment, compute_density, marginal_gain, utility_value, }; @@ -32,19 +32,6 @@ pub enum SelectionReason { BestSingleton, } -impl SelectionReason { - pub fn as_str(&self) -> &'static str { - match self { - Self::TopK => "topk", - Self::NoCandidates => "no_candidates", - Self::BudgetExhausted => "budget_exhausted", - Self::NoUtility => "no_utility", - Self::StoppedByTau => "stopped_by_tau", - Self::BestSingleton => "best_singleton", - } - } -} - pub struct SelectionResult { pub selected: Vec, pub reason: SelectionReason, diff --git a/crates/diffctx-native/src/utility/mod.rs b/crates/diffctx-native/src/utility/mod.rs index 698686954..ef5b54de1 100644 --- a/crates/diffctx-native/src/utility/mod.rs +++ b/crates/diffctx-native/src/utility/mod.rs @@ -1,9 +1,8 @@ pub mod boltzmann; pub mod importance; pub mod needs; -pub mod scoring; +pub mod objective; pub use boltzmann::{boltzmann_select, calibrate_beta}; pub use importance::compute_file_importance; pub use needs::InformationNeed; -pub use scoring::{UtilityState, apply_fragment, compute_density, marginal_gain, utility_value}; diff --git a/crates/diffctx-native/src/utility/scoring.rs b/crates/diffctx-native/src/utility/objective.rs similarity index 100% rename from crates/diffctx-native/src/utility/scoring.rs rename to crates/diffctx-native/src/utility/objective.rs diff --git a/docs/engineering/leverage.md b/docs/engineering/leverage.md index d3853eccf..9bdb6c64c 100644 --- a/docs/engineering/leverage.md +++ b/docs/engineering/leverage.md @@ -41,9 +41,12 @@ items are removed rather than logged — history lives in git. ## Intentional — do not "fix" -- `_DEFAULT_TAU` / `DEFAULT_MAX_FILE_BYTES` duplicated across `cli.py`, - `mcp/server.py`, `pipeline.py`: the import-linter layering contract - forbids mcp importing cli — documented at the definition sites. +- `DEFAULT_MAX_FILE_BYTES` duplicated across `cli.py` and `mcp/server.py`: + the import-linter layering contract forbids mcp importing cli, and the + engine does not own a file-byte cap to read it from. (`_DEFAULT_TAU`, + `_DEFAULT_ALPHA`, the scoring-mode list and the pipeline timeout were on + this list and are no longer duplicated — all four are read from the + extension, which both layers already sit on.) - `compute_scored_state` / `select_with_params` / `clipboard_available`: product-dead but load-bearing for the eval harness and test skip-guards. diff --git a/src/diffctx/_diffctx.pyi b/src/diffctx/_diffctx.pyi index 6f1b7daf0..d9c9b8f0a 100644 --- a/src/diffctx/_diffctx.pyi +++ b/src/diffctx/_diffctx.pyi @@ -6,7 +6,11 @@ class PyProjectGraph: @property def fragment_count(self) -> int: ... @property + def node_count(self) -> int: ... + @property def edge_count(self) -> int: ... + @property + def root_dir(self) -> str: ... class PyScoredState: ... @@ -37,10 +41,7 @@ def build_diff_context( alpha: float = ..., tau: float = ..., no_content: bool = ..., - ignore_file: str | None = ..., - no_default_ignores: bool = ..., full: bool = ..., - whitelist_file: str | None = ..., scoring_mode: str = ..., timeout: int = ..., ) -> dict[str, Any]: ... @@ -86,11 +87,7 @@ def coupling_metrics( level: str = ..., edge_types: list[str] | None = ..., ) -> list[PyModuleMetrics]: ... -def quotient_graph( - pg: PyProjectGraph, - level: str = ..., - edge_types: list[str] | None = ..., -) -> PyQuotientGraph: ... +def quotient_graph(pg: PyProjectGraph, level: str = ...) -> PyQuotientGraph: ... def to_mermaid(qg: PyQuotientGraph, top_n: int) -> str: ... def graph_summary(pg: PyProjectGraph, top_n: int) -> dict[str, Any]: ... def graph_to_json_string(pg: PyProjectGraph) -> str: ... @@ -102,4 +99,5 @@ DEFAULT_TAU: float DEFAULT_ALPHA: float DEFAULT_CORE_BUDGET_FRACTION: float DEFAULT_SCORING: str +DEFAULT_TIMEOUT: int SCORING_MODES: list[str] diff --git a/src/diffctx/_native/pipeline.py b/src/diffctx/_native/pipeline.py index d516df3fb..19eb09d40 100644 --- a/src/diffctx/_native/pipeline.py +++ b/src/diffctx/_native/pipeline.py @@ -10,9 +10,7 @@ from diffctx._diffctx import DEFAULT_ALPHA as _DEFAULT_ALPHA from diffctx._diffctx import DEFAULT_SCORING as _DEFAULT_SCORING from diffctx._diffctx import DEFAULT_TAU as _DEFAULT_TAU - -_PIPELINE_TIMEOUT = 300 - +from diffctx._diffctx import DEFAULT_TIMEOUT as _PIPELINE_TIMEOUT _UNLIMITED_BUDGET = 10_000_000 diff --git a/src/diffctx/_native/project_graph.py b/src/diffctx/_native/project_graph.py index a358ff6cf..5b7e48ed1 100644 --- a/src/diffctx/_native/project_graph.py +++ b/src/diffctx/_native/project_graph.py @@ -7,9 +7,6 @@ ProjectGraph = Any # opaque PyProjectGraph from the Rust extension -_GRAPH_ROOTS: dict[int, Path] = {} -_GRAPH_ROOTS_MAX = 16 - def build_project_graph( root_dir: Path, @@ -21,16 +18,8 @@ def build_project_graph( # ignore_file / no_default_ignores / whitelist_file are accepted for API # stability but are a no-op until universe.rs exposes a path-spec layer. del ignore_file, no_default_ignores, whitelist_file - pg = _rust_build_project_graph(str(root_dir)) - _register_graph_root(pg, Path(root_dir).resolve()) - return pg - - -def _register_graph_root(pg: ProjectGraph, root: Path) -> None: - if len(_GRAPH_ROOTS) >= _GRAPH_ROOTS_MAX: - _GRAPH_ROOTS.clear() - _GRAPH_ROOTS[id(pg)] = root + return _rust_build_project_graph(str(root_dir)) -def graph_root(pg: ProjectGraph) -> Path | None: - return _GRAPH_ROOTS.get(id(pg)) +def graph_root(pg: ProjectGraph) -> Path: + return Path(pg.root_dir) diff --git a/src/diffctx/cli.py b/src/diffctx/cli.py index 7a01ff899..e8dfd1687 100644 --- a/src/diffctx/cli.py +++ b/src/diffctx/cli.py @@ -10,6 +10,7 @@ from diffctx._diffctx import DEFAULT_ALPHA as _ENGINE_DEFAULT_ALPHA from diffctx._diffctx import DEFAULT_SCORING as _ENGINE_DEFAULT_SCORING from diffctx._diffctx import DEFAULT_TAU as _ENGINE_DEFAULT_TAU +from diffctx._diffctx import DEFAULT_TIMEOUT as _ENGINE_DEFAULT_TIMEOUT from diffctx._diffctx import SCORING_MODES as _ENGINE_SCORING_MODES from .version import __version__ @@ -27,8 +28,7 @@ # and went stale the moment a mode was added to the engine. _SCORING_CHOICES: list[str] = list(_ENGINE_SCORING_MODES) _DEFAULT_SCORING: str = _ENGINE_DEFAULT_SCORING -# Mirrors DEFAULT_PIPELINE_TIMEOUT_SECONDS in crates/diffctx-native/src/config/limits.rs. -_DEFAULT_TIMEOUT = 300 +_DEFAULT_TIMEOUT: int = _ENGINE_DEFAULT_TIMEOUT class _Unset: @@ -645,6 +645,16 @@ def _build_graph_parsed_args(args: argparse.Namespace) -> ParsedArgs: if not args.summary and args.level is not _UNSET and graph_format in ("json", "graphml"): _warn(f"--level {graph_level} applies to mermaid output and --summary; ignored for -f {graph_format}") _warn_quiet_log_level_conflict(args) + # graph mode walks the discovery universe directly and has no path-spec + # layer, so these three are accepted and discarded. Saying so beats a + # silent no-op that reads as a filter the user applied. + for flag, given in ( + ("-i/--ignore", args.ignore is not None), + ("-w/--whitelist", args.whitelist is not None), + ("--no-default-ignores", args.no_default_ignores), + ): + if given: + _warn(f"{flag} ignored: graph mode has no path-spec layer") output_file_path, force_stdout = _resolve_output_file(args.output_file, False, graph_format) ignore_file = _resolve_ignore_file(args.ignore, root_dir) whitelist_file = _resolve_whitelist_file(args.whitelist, root_dir) diff --git a/src/diffctx/mcp/README.md b/src/diffctx/mcp/README.md deleted file mode 100644 index 6cad67147..000000000 --- a/src/diffctx/mcp/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# diffctx MCP Server - -One-line setup for Claude Code / Codex CLI / Gemini CLI / VS Code lives in -the [main README](../../../README.md#mcp-server). Zero-install command: -`uvx --from 'diffctx[mcp]' diffctx-mcp` — use the `diffctx-mcp` entry point, -not the `diffctx mcp` subcommand, which only exists from 1.12.3 onward and -would map a directory named `mcp` on older releases. - -## JSON client configs - -All stdio clients take the same server shape; only the config file differs: - -| Client | Config file | Key | -|---|---|---| -| Claude Code (project) | `.mcp.json` | `mcpServers` | -| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | -| Cursor | `~/.cursor/mcp.json` | `mcpServers` | -| Windsurf | `~/.codeium/windsurf/mcp_config.json` | `mcpServers` | -| Continue | `~/.continue/config.json` | `experimental.modelContextProtocolServers` (transport object) | -| Zed | `~/.config/zed/settings.json` | `context_servers` (`command.path`) | - -```json -{ - "mcpServers": { - "diffctx": { - "command": "uvx", - "args": ["--from", "diffctx[mcp]", "diffctx-mcp"] - } - } -} -``` - -With `pip install 'diffctx[mcp]'` already done, `"command": "diffctx-mcp"` -with no args works everywhere instead. - -Filesystem confinement via `DIFFCTX_ALLOWED_PATHS`: see -[SECURITY.md](../../../SECURITY.md). - -## Tools - -The server pins `tau=0.12` (the CLI default) and applies a 300 s wall-clock -deadline per tool call; every tool caps its response at `max_tokens` -(default `25000`) and returns an advisory message instead of oversized -content. - -Since 1.13 the default surface is **one tool**. Tool definitions are sent on -every request of every session, before any work happens, so the three-tool -surface cost 1063 tokens of every window it was installed in; the single tool -costs 267 (-75%). Measured with `o200k_base` over each definition's serialized -`{name, description, inputSchema}`. - -### `diffctx_context` - -Two-call flow: rank first, then read only what you chose. - -1. `mode="locate"` (**default**) returns compact `diffctx.locate.v1` JSON — the - ranked selection as a navigation list with line spans, scores and provenance - reasons, and no source bodies. Cost scales with the number of ranked items, - not with their source: a few hundred tokens for a small change, ~1.9k for a - 38-item ranking on a large one — against the thousands a pack of the same - selection costs. - - The ranking also discloses its own gaps when it has any: a `coverage` block - (changed files the parser could not see inside, changed files with no graph - edge, a truncated diffusion, and a heuristic `confidence`) and an `overflow` - ranking of candidates the budget left behind, with reasons and no bodies. - Both are omitted when there is nothing to report, so a clean run pays - nothing for them. Treat `confidence` as what it is documented to be — how - much of the changed surface the run could see and fit, not a claim that the - selection is right. -2. Pass ids built from that ranking's own fields — `":"`, e.g. - `"src/calc.py:12-40"` — back as `fragment_ids` to get their source. - -`mode="pack"` skips the split and returns the full selected context in one -call, which is what the pre-1.13 default did. - -- `repo_path` (string, required) — absolute path to a git repository -- `diff_ref` (string, default `"HEAD~1..HEAD"`) -- `mode` (`"locate"` default, or `"pack"`) -- `budget_tokens` (integer, default `8000`) — selection budget; `-1` - unlimited (still capped by `max_tokens`), `0` strict-zero floor -- `fragment_ids` (list of strings, optional) — read these instead of ranking. - Takes precedence over `mode`. Max 40 per call; bodies are read at the diff - range's end revision, so line spans from a historical range resolve against - that revision rather than the working tree. `.gitignore` and - `.diffctx/ignore` are enforced — an id cannot read what the repo withholds - from the other modes. -- `include_raw_diff` (boolean, default `false`) — embed git's raw unified - diff ahead of the fragments (additive, not charged to the budget); - `mode="pack"` only -- `clipboard` (boolean, default `false`) — copy instead of returning -- `max_tokens` (integer, default `25000`) - -### Legacy tools (opt-in) - -`get_tree_map` and `get_file_context` are off by default since 1.13: they are -strictly wider than a diff question needs, their definitions cost every session -that never calls them, and MCP hosts already ship their own file-reading tools. -Set `DIFFCTX_MCP_LEGACY_TOOLS=1` in the server's environment to restore the -pre-1.13 surface. - -```json -{ - "mcpServers": { - "diffctx": { - "command": "diffctx-mcp", - "env": { "DIFFCTX_MCP_LEGACY_TOOLS": "1" } - } - } -} -``` - -#### `get_tree_map` - -- `repo_path` (string, required); `subdirectory` (string, default `""`) -- `output_format` (`"yaml"` default, or `"md"`); `no_content` (boolean) -- `max_depth` (integer, optional); `max_file_bytes` (default `262144`) -- `clipboard`, `max_tokens` as above - -#### `get_file_context` - -Works on any directory, no git required. - -- `repo_path` (string, required); `patterns` (list of globs, required) -- `max_files` (default `50`); `max_file_bytes` (default `262144`) -- `dry_run` (boolean, default `false`) — preview matches without reading -- `clipboard`, `max_tokens` as above diff --git a/src/diffctx/mcp/formatting.py b/src/diffctx/mcp/formatting.py deleted file mode 100644 index b2f6fd70f..000000000 --- a/src/diffctx/mcp/formatting.py +++ /dev/null @@ -1,9 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from diffctx.writer import tree_to_string - - -def format_diff_context_as_markdown(result: dict[str, Any]) -> str: - return tree_to_string(result, "md") diff --git a/src/diffctx/mcp/server.py b/src/diffctx/mcp/server.py index d170605ab..13d68e40c 100644 --- a/src/diffctx/mcp/server.py +++ b/src/diffctx/mcp/server.py @@ -14,10 +14,11 @@ from mcp.types import ToolAnnotations from diffctx._diffctx import DEFAULT_TAU as _ENGINE_DEFAULT_TAU +from diffctx._diffctx import DEFAULT_TIMEOUT as _ENGINE_DEFAULT_TIMEOUT from diffctx._native import GitError, build_diff_context from diffctx.version import __version__ +from diffctx.writer import tree_to_string -from .formatting import format_diff_context_as_markdown from .security import validate_repo_path logger = logging.getLogger(__name__) @@ -41,12 +42,11 @@ # hundreds of thousands of tokens in one response. _DEFAULT_MAX_TOKENS = 25_000 -# Mirror diffctx.cli._DEFAULT_TIMEOUT (300s). Same layering constraint as -# above. The engine caps each git subprocess at this value, but the CPU-bound -# phases (parse, fragment, score) have no cap of their own — without a -# wall-clock deadline here a single tool call can wedge the server for as long -# as a pathological repository takes. -_DEFAULT_TIMEOUT_SECONDS = 300 +# The engine caps each git subprocess at this value, but the CPU-bound phases +# (parse, fragment, score) have no cap of their own — without a wall-clock +# deadline here a single tool call can wedge the server for as long as a +# pathological repository takes. +_DEFAULT_TIMEOUT_SECONDS: int = _ENGINE_DEFAULT_TIMEOUT def _deadline_message(tool: str) -> str: @@ -242,7 +242,7 @@ async def diffctx_context( except GitError as e: raise _git_failure(diff_ref, e) from e - content = format_diff_context_as_markdown(result) + content = tree_to_string(result, "md") if clipboard: degraded_notice = await _copy_or_degrade(content) diff --git a/tests/test_version_consistency.py b/tests/test_version_consistency.py index 6bd407847..a8d1cbaec 100644 --- a/tests/test_version_consistency.py +++ b/tests/test_version_consistency.py @@ -63,6 +63,11 @@ def test_bucket_scoop_manifest_version(): assert data["version"] == __version__ +def test_citation_cff_version(): + data = yaml.safe_load(_load_text("CITATION.cff")) + assert str(data["version"]) == __version__ + + def test_github_action_doc_pins_match_version(): pins = re.findall(r"nikolay-e/diffctx@v(\d+\.\d+\.\d+)", _load_text("docs/product/github-action.md")) assert len(pins) >= 2, f"expected at least 2 '@v' pins in the doc, found {pins}" diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 1058799f7..000000000 --- a/uv.lock +++ /dev/null @@ -1,2758 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.10" -resolution-markers = [ - "python_full_version >= '3.15'", - "python_full_version == '3.14.*' and sys_platform == 'win32'", - "python_full_version == '3.14.*' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version < '3.11'", -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "anyio" -version = "4.13.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, -] - -[[package]] -name = "ast-serialize" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e2/1f/50f241d4e01fe75f4bba6a209edd4047c4b26acf70992ff885fd161f79cb/ast_serialize-0.4.0.tar.gz", hash = "sha256:74e4e634ab82d1466acf0be27043178570b98ebeaa3165f9240a6fad4c286471", size = 60687, upload-time = "2026-05-14T22:44:38.251Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/85/232631c59b5ca7152c08f026e9a46f47d852298acff74edd04a1fc1d0005/ast_serialize-0.4.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:a6f26937ce0293aafbece0e39019e020369a5a70486ff4088227f0cc888844a9", size = 1182685, upload-time = "2026-05-14T22:43:40.205Z" }, - { url = "https://files.pythonhosted.org/packages/5d/5e/4838d4d3ddc4425555601467d4e2a565e4340899e45feee4e32c80fbc911/ast_serialize-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:074032142777e3e6091977dc3c5146a8ca58ae6825b7f64e9a0b604153ddabd8", size = 1173113, upload-time = "2026-05-14T22:43:41.937Z" }, - { url = "https://files.pythonhosted.org/packages/22/fc/d622b19fc1c79a62028ec17f4ad4323177af25b174d32b07c84d61ef9d47/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:404f3462b4532e13a70b8849bba241dbd82e30043ff58d98c7e762fd925b116a", size = 1234117, upload-time = "2026-05-14T22:43:43.977Z" }, - { url = "https://files.pythonhosted.org/packages/d5/b5/72f8c8659da0b64562e6d97f852d5c2022c74577df27c922e1e7065039ce/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97c55336e16f5c4ca2bde7be94cca4b8f7d665d64f7008925a82e02707ba14ac", size = 1231703, upload-time = "2026-05-14T22:43:46.064Z" }, - { url = "https://files.pythonhosted.org/packages/7b/98/ccc51ee4f90f97a1ed0a0848bd4c9d77a80969849db8a262b7d2970a6a15/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:732b4ef76adcb0f298a7d18c4558336d83b1384f9ae0c7eaa1dc8d031b0a4390", size = 1441574, upload-time = "2026-05-14T22:43:47.784Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ce/668c4efe79e09c9cc97a4d0a1c29e61fe6f78857fe1e57c086772af55f89/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b3db87c4772097c0782250bcd550d66b1189a8c889793c7bcf153f4fee70005c", size = 1254040, upload-time = "2026-05-14T22:43:49.879Z" }, - { url = "https://files.pythonhosted.org/packages/3d/be/38b27bc2909b7236939801ca9f0d97cdc6198da4f435a81658e0db506fdb/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43729a5e369ebbe7750635c0c206bc616fcd36e703cb9c4497d6b4df0291ee64", size = 1257847, upload-time = "2026-05-14T22:43:51.607Z" }, - { url = "https://files.pythonhosted.org/packages/68/df/360ebccc361235c167a8be2a0476870cb9ef44c42413bf1289b885684052/ast_serialize-0.4.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:91d3786f3929786cdc4eeedfd110abb4603e7f6c1390c5af398f333a947b742d", size = 1298683, upload-time = "2026-05-14T22:43:53.606Z" }, - { url = "https://files.pythonhosted.org/packages/51/5c/7d5e0b4d47aafa1600c19e3670f962f81a9bf3da1bc25a1382529a447cf3/ast_serialize-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7fba7315fd4bd87cb5560792709f6e66e0606402d362c0a38dd32dfb66ba6066", size = 1409438, upload-time = "2026-05-14T22:43:55.316Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/8875b2f1af3ec1539b88ff193dfbfa5573084ef7fcab27ea4cd09b6dc829/ast_serialize-0.4.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4db9769d57deb5545ce56ebbbbe3436dcc0ae2688ce14c295cd14e106624ece7", size = 1507922, upload-time = "2026-05-14T22:43:56.959Z" }, - { url = "https://files.pythonhosted.org/packages/55/c3/5ec6927eb493ece7ba64263cdc556be889e0c62a013b1851bbe674a0dcda/ast_serialize-0.4.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:dcd04f85a29deb80400e8987cfaceb9907140f763453cbffdbd6ff36f1b32c12", size = 1502817, upload-time = "2026-05-14T22:43:59.081Z" }, - { url = "https://files.pythonhosted.org/packages/9d/c8/40cb818a08396b1f34d6189c0c42aec917dd331e11fb7c3b870cc61b795a/ast_serialize-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:905fc11940831454d93589bd7ce2acb6a5eb01c2936156f751d2a21087c98cd3", size = 1454318, upload-time = "2026-05-14T22:44:01.377Z" }, - { url = "https://files.pythonhosted.org/packages/74/d5/d51494b60cc52f4792be5ddc951631cddb17a2990154634549abdbdbb5bf/ast_serialize-0.4.0-cp314-cp314t-win32.whl", hash = "sha256:3bdde2c4570143791f636aed4e3ef868f5b46eb90a18f8d5c41dd045aab08bef", size = 1060098, upload-time = "2026-05-14T22:44:03.265Z" }, - { url = "https://files.pythonhosted.org/packages/7a/c9/b0086257c79ff95743a3621448a01fc71b234ae359d3d54cda383aa43939/ast_serialize-0.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6551d55b8607b97a7755683d743200b398c61a0b71a11b7f00c89c335a11d0f4", size = 1101015, upload-time = "2026-05-14T22:44:05.055Z" }, - { url = "https://files.pythonhosted.org/packages/3d/6d/3dfddef4990fda47745af6615a3e51c4de711eda56c3a8072a0d8b6181c7/ast_serialize-0.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:7234ff086cb152ea2a3b7ef895b5ebeb6d80779df049d5c6431c8e3536d5b03c", size = 1074495, upload-time = "2026-05-14T22:44:07.186Z" }, - { url = "https://files.pythonhosted.org/packages/be/d5/044c5f995ef75807a0effb56fc288cfdedeeb571222450fb6f7d94fd52f1/ast_serialize-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:dcded5056d9f3d201df7833082c07ebcbc566ffc3d4105c9fc9fe278fa086ecb", size = 1189800, upload-time = "2026-05-14T22:44:09.333Z" }, - { url = "https://files.pythonhosted.org/packages/a9/5a/52163557789d59a8197c10912ab4a1791c9143731ba0e3d9283ac0791db6/ast_serialize-0.4.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:bd50d201098aae0d202805fe9606c0545492f69a3ec4403337e32c54ad29fc41", size = 1181713, upload-time = "2026-05-14T22:44:11.286Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c3/678ce3b6cb594b01c361da87f6c5679d26c1dae1583a082a8cd190e7232e/ast_serialize-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6615b39cd747967c3aabe68bf3f5f26748e823cc6b474ddc1510ed188a824149", size = 1243258, upload-time = "2026-05-14T22:44:13.345Z" }, - { url = "https://files.pythonhosted.org/packages/3d/dd/4810fbeb81c47b7e4e65db15ca65c71330efc59b460bd10c12338dc6012e/ast_serialize-0.4.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91362c0a9fdf1c344b7f50a5b0508b11a0732102998fbd754a191f7187e77031", size = 1239226, upload-time = "2026-05-14T22:44:15.811Z" }, - { url = "https://files.pythonhosted.org/packages/28/38/13a88d90b664c009ed208346ec2ed248b0ab2cb0b582ae467acaa7f44fa4/ast_serialize-0.4.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70d9c5d527bbfa69bd3c7d17dac11fb6781e36186a434a06d7d5892e0b2f88f9", size = 1448867, upload-time = "2026-05-14T22:44:17.99Z" }, - { url = "https://files.pythonhosted.org/packages/4c/19/a069dba1a634b703bf07fb49df8f7e3c04e9ba8ef3f0d9f4495f72630f92/ast_serialize-0.4.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4738790cf54d8b416de992b87ee567056980bc82134d52458bd4985f389d1658", size = 1264135, upload-time = "2026-05-14T22:44:19.8Z" }, - { url = "https://files.pythonhosted.org/packages/2d/4c/76ec4279fecd7e78b60c3c99321f944c43cd11e5ff09c952746f5f9c0f4c/ast_serialize-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:faa008dccfcb793ae9101325e4d6d026caaa5d845c2182f03749c759834b0a3a", size = 1269060, upload-time = "2026-05-14T22:44:21.894Z" }, - { url = "https://files.pythonhosted.org/packages/33/c5/9230ef7481e5cb63b93a1f7738e959586202b081caf32b8bc5d9f673ef56/ast_serialize-0.4.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c5245228e65d38cb48e1251f0ca71b0fa417e527141491e8c92f740e8e2d121", size = 1309654, upload-time = "2026-05-14T22:44:23.725Z" }, - { url = "https://files.pythonhosted.org/packages/b9/54/7d7397528d181ad68e476e0c81aa3ceff7d1f1b5c7fa958d6be28628ef16/ast_serialize-0.4.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8f5153e9c44a02e61f4042c5f9249d2e8a759773d621a0b2f445a899e536e181", size = 1418855, upload-time = "2026-05-14T22:44:25.415Z" }, - { url = "https://files.pythonhosted.org/packages/b8/8f/87d6428adaa0986b817404f09329b64f8d2614cfe061ebf4951b4a7e0d19/ast_serialize-0.4.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1e1fb90def261f6a0db885876f7e1a49ad2dbac38ad9f2f62dba2f9543af16e7", size = 1516040, upload-time = "2026-05-14T22:44:27.535Z" }, - { url = "https://files.pythonhosted.org/packages/b5/bb/5aaa41a21314c8b0d6dee54867b16535682c6660dd28cac64dba1380062d/ast_serialize-0.4.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf2ff7b654c8e95143e20f5d75878cbb78b65b928b26c4d58ef71cdba9d6d981", size = 1511450, upload-time = "2026-05-14T22:44:29.522Z" }, - { url = "https://files.pythonhosted.org/packages/87/16/cc729b5bb4b21da99db1379266cc367512e82ba10f9b3300a6f3e9941325/ast_serialize-0.4.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:90fc5c0d35a22f1a92dd33635508626d50f8fc64deb897c23e78e666a60804c9", size = 1463654, upload-time = "2026-05-14T22:44:31.265Z" }, - { url = "https://files.pythonhosted.org/packages/43/97/7198321b0244d011093387b41affea934d58bda08d59a2adfde72976b6c4/ast_serialize-0.4.0-cp39-abi3-win32.whl", hash = "sha256:9ecd6a1fc1b86f1f4e8ae206759b6319c10019706b3496b01b54d02b9b2cd918", size = 1068636, upload-time = "2026-05-14T22:44:33.189Z" }, - { url = "https://files.pythonhosted.org/packages/10/09/3b868f6d8df4bbe452903a5e0e039ebcec9ea0045f1a77951546205097e8/ast_serialize-0.4.0-cp39-abi3-win_amd64.whl", hash = "sha256:79c8d015c771c8bfdb1208003b227b27c40034790a2c29c09f2317a041825ce2", size = 1107137, upload-time = "2026-05-14T22:44:35.304Z" }, - { url = "https://files.pythonhosted.org/packages/fd/78/9387dffccdc55a12734f83aaccc4a987404a217a2a12a1920d8d4585950b/ast_serialize-0.4.0-cp39-abi3-win_arm64.whl", hash = "sha256:1026f565a7ab846337c630909089b3346a2fe417bf1552b1581ab01852137407", size = 1079199, upload-time = "2026-05-14T22:44:36.816Z" }, -] - -[[package]] -name = "attrs" -version = "26.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, -] - -[[package]] -name = "backports-asyncio-runner" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, -] - -[[package]] -name = "black" -version = "26.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "mypy-extensions" }, - { name = "packaging" }, - { name = "pathspec" }, - { name = "platformdirs" }, - { name = "pytokens" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/c5/61175d618685d42b005847464b8fb4743a67b1b8fdb75e50e5a96c31a27a/black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07", size = 666155, upload-time = "2026-03-12T03:36:03.593Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/a8/11170031095655d36ebc6664fe0897866f6023892396900eec0e8fdc4299/black-26.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86a8b5035fce64f5dcd1b794cf8ec4d31fe458cf6ce3986a30deb434df82a1d2", size = 1866562, upload-time = "2026-03-12T03:39:58.639Z" }, - { url = "https://files.pythonhosted.org/packages/69/ce/9e7548d719c3248c6c2abfd555d11169457cbd584d98d179111338423790/black-26.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5602bdb96d52d2d0672f24f6ffe5218795736dd34807fd0fd55ccd6bf206168b", size = 1703623, upload-time = "2026-03-12T03:40:00.347Z" }, - { url = "https://files.pythonhosted.org/packages/7f/0a/8d17d1a9c06f88d3d030d0b1d4373c1551146e252afe4547ed601c0e697f/black-26.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c54a4a82e291a1fee5137371ab488866b7c86a3305af4026bdd4dc78642e1ac", size = 1768388, upload-time = "2026-03-12T03:40:01.765Z" }, - { url = "https://files.pythonhosted.org/packages/52/79/c1ee726e221c863cde5164f925bacf183dfdf0397d4e3f94889439b947b4/black-26.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:6e131579c243c98f35bce64a7e08e87fb2d610544754675d4a0e73a070a5aa3a", size = 1412969, upload-time = "2026-03-12T03:40:03.252Z" }, - { url = "https://files.pythonhosted.org/packages/73/a5/15c01d613f5756f68ed8f6d4ec0a1e24b82b18889fa71affd3d1f7fad058/black-26.3.1-cp310-cp310-win_arm64.whl", hash = "sha256:5ed0ca58586c8d9a487352a96b15272b7fa55d139fc8496b519e78023a8dab0a", size = 1220345, upload-time = "2026-03-12T03:40:04.892Z" }, - { url = "https://files.pythonhosted.org/packages/17/57/5f11c92861f9c92eb9dddf515530bc2d06db843e44bdcf1c83c1427824bc/black-26.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:28ef38aee69e4b12fda8dba75e21f9b4f979b490c8ac0baa7cb505369ac9e1ff", size = 1851987, upload-time = "2026-03-12T03:40:06.248Z" }, - { url = "https://files.pythonhosted.org/packages/54/aa/340a1463660bf6831f9e39646bf774086dbd8ca7fc3cded9d59bbdf4ad0a/black-26.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf9bf162ed91a26f1adba8efda0b573bc6924ec1408a52cc6f82cb73ec2b142c", size = 1689499, upload-time = "2026-03-12T03:40:07.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/01/b726c93d717d72733da031d2de10b92c9fa4c8d0c67e8a8a372076579279/black-26.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:474c27574d6d7037c1bc875a81d9be0a9a4f9ee95e62800dab3cfaadbf75acd5", size = 1754369, upload-time = "2026-03-12T03:40:09.279Z" }, - { url = "https://files.pythonhosted.org/packages/e3/09/61e91881ca291f150cfc9eb7ba19473c2e59df28859a11a88248b5cbbc4d/black-26.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e9d0d86df21f2e1677cc4bd090cd0e446278bcbbe49bf3659c308c3e402843e", size = 1413613, upload-time = "2026-03-12T03:40:10.943Z" }, - { url = "https://files.pythonhosted.org/packages/16/73/544f23891b22e7efe4d8f812371ab85b57f6a01b2fc45e3ba2e52ba985b8/black-26.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:9a5e9f45e5d5e1c5b5c29b3bd4265dcc90e8b92cf4534520896ed77f791f4da5", size = 1219719, upload-time = "2026-03-12T03:40:12.597Z" }, - { url = "https://files.pythonhosted.org/packages/dc/f8/da5eae4fc75e78e6dceb60624e1b9662ab00d6b452996046dfa9b8a6025b/black-26.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e6f89631eb88a7302d416594a32faeee9fb8fb848290da9d0a5f2903519fc1", size = 1895920, upload-time = "2026-03-12T03:40:13.921Z" }, - { url = "https://files.pythonhosted.org/packages/2c/9f/04e6f26534da2e1629b2b48255c264cabf5eedc5141d04516d9d68a24111/black-26.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cd2012d35b47d589cb8a16faf8a32ef7a336f56356babd9fcf70939ad1897f", size = 1718499, upload-time = "2026-03-12T03:40:15.239Z" }, - { url = "https://files.pythonhosted.org/packages/04/91/a5935b2a63e31b331060c4a9fdb5a6c725840858c599032a6f3aac94055f/black-26.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f76ff19ec5297dd8e66eb64deda23631e642c9393ab592826fd4bdc97a4bce7", size = 1794994, upload-time = "2026-03-12T03:40:17.124Z" }, - { url = "https://files.pythonhosted.org/packages/e7/0a/86e462cdd311a3c2a8ece708d22aba17d0b2a0d5348ca34b40cdcbea512e/black-26.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ddb113db38838eb9f043623ba274cfaf7d51d5b0c22ecb30afe58b1bb8322983", size = 1420867, upload-time = "2026-03-12T03:40:18.83Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e5/22515a19cb7eaee3440325a6b0d95d2c0e88dd180cb011b12ae488e031d1/black-26.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:dfdd51fc3e64ea4f35873d1b3fb25326773d55d2329ff8449139ebaad7357efb", size = 1230124, upload-time = "2026-03-12T03:40:20.425Z" }, - { url = "https://files.pythonhosted.org/packages/f5/77/5728052a3c0450c53d9bb3945c4c46b91baa62b2cafab6801411b6271e45/black-26.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:855822d90f884905362f602880ed8b5df1b7e3ee7d0db2502d4388a954cc8c54", size = 1895034, upload-time = "2026-03-12T03:40:21.813Z" }, - { url = "https://files.pythonhosted.org/packages/52/73/7cae55fdfdfbe9d19e9a8d25d145018965fe2079fa908101c3733b0c55a0/black-26.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8a33d657f3276328ce00e4d37fe70361e1ec7614da5d7b6e78de5426cb56332f", size = 1718503, upload-time = "2026-03-12T03:40:23.666Z" }, - { url = "https://files.pythonhosted.org/packages/e1/87/af89ad449e8254fdbc74654e6467e3c9381b61472cc532ee350d28cfdafb/black-26.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1cd08e99d2f9317292a311dfe578fd2a24b15dbce97792f9c4d752275c1fa56", size = 1793557, upload-time = "2026-03-12T03:40:25.497Z" }, - { url = "https://files.pythonhosted.org/packages/43/10/d6c06a791d8124b843bf325ab4ac7d2f5b98731dff84d6064eafd687ded1/black-26.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7e72339f841b5a237ff14f7d3880ddd0fc7f98a1199e8c4327f9a4f478c1839", size = 1422766, upload-time = "2026-03-12T03:40:27.14Z" }, - { url = "https://files.pythonhosted.org/packages/59/4f/40a582c015f2d841ac24fed6390bd68f0fc896069ff3a886317959c9daf8/black-26.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc622538b430aa4c8c853f7f63bc582b3b8030fd8c80b70fb5fa5b834e575c2", size = 1232140, upload-time = "2026-03-12T03:40:28.882Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/e36e27c9cebc1311b7579210df6f1c86e50f2d7143ae4fcf8a5017dc8809/black-26.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2d6bfaf7fd0993b420bed691f20f9492d53ce9a2bcccea4b797d34e947318a78", size = 1889234, upload-time = "2026-03-12T03:40:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/0e/7b/9871acf393f64a5fa33668c19350ca87177b181f44bb3d0c33b2d534f22c/black-26.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f89f2ab047c76a9c03f78d0d66ca519e389519902fa27e7a91117ef7611c0568", size = 1720522, upload-time = "2026-03-12T03:40:32.346Z" }, - { url = "https://files.pythonhosted.org/packages/03/87/e766c7f2e90c07fb7586cc787c9ae6462b1eedab390191f2b7fc7f6170a9/black-26.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b07fc0dab849d24a80a29cfab8d8a19187d1c4685d8a5e6385a5ce323c1f015f", size = 1787824, upload-time = "2026-03-12T03:40:33.636Z" }, - { url = "https://files.pythonhosted.org/packages/ac/94/2424338fb2d1875e9e83eed4c8e9c67f6905ec25afd826a911aea2b02535/black-26.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0126ae5b7c09957da2bdbd91a9ba1207453feada9e9fe51992848658c6c8e01c", size = 1445855, upload-time = "2026-03-12T03:40:35.442Z" }, - { url = "https://files.pythonhosted.org/packages/86/43/0c3338bd928afb8ee7471f1a4eec3bdbe2245ccb4a646092a222e8669840/black-26.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:92c0ec1f2cc149551a2b7b47efc32c866406b6891b0ee4625e95967c8f4acfb1", size = 1258109, upload-time = "2026-03-12T03:40:36.832Z" }, - { url = "https://files.pythonhosted.org/packages/8e/0d/52d98722666d6fc6c3dd4c76df339501d6efd40e0ff95e6186a7b7f0befd/black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", size = 207542, upload-time = "2026-03-12T03:36:01.668Z" }, -] - -[[package]] -name = "certifi" -version = "2026.4.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, -] - -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, -] - -[[package]] -name = "cfgv" -version = "3.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, - { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, - { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, - { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, - { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, - { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, - { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, - { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, - { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, - { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, - { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, - { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, - { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, -] - -[[package]] -name = "click" -version = "8.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "coverage" -version = "7.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/7f/d0720730a397a999ffc0fd3f5bebef347338e3a47b727da66fbb228e2ff2/coverage-7.14.0.tar.gz", hash = "sha256:057a6af2f160a85384cde4ab36f0d2777bae1057bae255f95413cdd382aa5c74", size = 919489, upload-time = "2026-05-10T18:02:31.397Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/9d/7c83ef51c3eb495f10010094e661833588b7709946da634c8b66520b97c7/coverage-7.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:84c32d90bf4537f0e7b4dec9aaa9a938fb8205136b9d2ecf4d7629d5262dc075", size = 219668, upload-time = "2026-05-10T17:59:23.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/34/898546aefbd28f0af131201d0dc852c9e976f817bd7d5bfb8dc4e02863bb/coverage-7.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7c843572c605ab51cfdb5c6b5f2586e2a8467c0d28eca4bdef4ec70c5fecbd82", size = 220192, upload-time = "2026-05-10T17:59:26.095Z" }, - { url = "https://files.pythonhosted.org/packages/df/4a/b457c88aca72b0df13a98167ebd5d947135ccd9881ea88ce6a570e13aa9b/coverage-7.14.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0c451757d3fa2603354fdc789b5e58a0e327a117c370a40e3476ba4eabab228c", size = 246932, upload-time = "2026-05-10T17:59:27.806Z" }, - { url = "https://files.pythonhosted.org/packages/b5/d9/92600e89486fd074c50f0117422b2c9592c3e144e2f25bd5ac0bc62bc7a0/coverage-7.14.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3fd43f0616e765ab78d069cf8358def7363957a45cee446d65c502dcfeea7893", size = 248762, upload-time = "2026-05-10T17:59:29.479Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e1/9ea1eb9c311da7f15853559dc1d9d82bef88ecd3e59fbeb51f16bc2ffa91/coverage-7.14.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:731e535b1498b27d13594a0527a79b0510867b0ad891532be41cb883f2128e20", size = 250625, upload-time = "2026-05-10T17:59:31.33Z" }, - { url = "https://files.pythonhosted.org/packages/a5/03/57afca1b8106f8549a5329139315041fe166d6099bd9381346b9430dfbd1/coverage-7.14.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c7492f2d493b976941c7ca050f273cbda2f43c381124f7586a3e3c16d1804fec", size = 252539, upload-time = "2026-05-10T17:59:32.692Z" }, - { url = "https://files.pythonhosted.org/packages/57/5e/2e9fc63c9928119c1dbae02222be51407d3e7ebac5811ebbda4af3557795/coverage-7.14.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dc38367eaa2abb1b766ac333142bce7655335a73537f5c8b75aaa89c2b987757", size = 247636, upload-time = "2026-05-10T17:59:34.599Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e2/0b7898cda21041cc67546e19b80ba66cbbb47cbece52a76a5904de6a3aaf/coverage-7.14.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0a951308cde22cf77f953955a754d04dccb57fe3bb8e345d685778ed9fc1632a", size = 248666, upload-time = "2026-05-10T17:59:36.232Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e3/d33662a2fdaef23229c15921f39c84ec38441f3069ba26e134ed402c833b/coverage-7.14.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fab3877e4ebb06bd9d4d4d00ee53309ee5478e66873c66a382272e3ee33eb7ea", size = 246670, upload-time = "2026-05-10T17:59:38.029Z" }, - { url = "https://files.pythonhosted.org/packages/99/b2/533942c3bfbf6770b5c32d7f2ff029fe013dba31f3fe8b45cabbb250365e/coverage-7.14.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b812eb847b19876ebf33fb6c4f11819af05ab6050b0bfa1bc53412ae81779adb", size = 250484, upload-time = "2026-05-10T17:59:39.974Z" }, - { url = "https://files.pythonhosted.org/packages/d8/00/15acbad83a96de13c73831486c7627bfed73dfaec53b04e4a6315edf3fd8/coverage-7.14.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d9c8ef6ed820c433de075657d72dda1f89a2984955e58b8a75feb3f184250218", size = 246942, upload-time = "2026-05-10T17:59:41.659Z" }, - { url = "https://files.pythonhosted.org/packages/70/db/cef0228de493f2c740c760a9057a61d00c6849480073b70a75b87c7d4bab/coverage-7.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d128b1bba9361fbaaf6a19e179e6cfd6a9103ce0c0555876f72780acc93efd85", size = 247544, upload-time = "2026-05-10T17:59:43.471Z" }, - { url = "https://files.pythonhosted.org/packages/77/a0/d9ef8e148f3025c2ae8401d77cda1502b6d2a4d8102603a8af31460aedb6/coverage-7.14.0-cp310-cp310-win32.whl", hash = "sha256:65f267ca1370726ec2c1aa38bbe4df9a71a740f22878d2d4bf59d71a4cd8d323", size = 222285, upload-time = "2026-05-10T17:59:44.908Z" }, - { url = "https://files.pythonhosted.org/packages/85/c0/30c454c7d3cf47b2805d4e06f12443f5eece8a5d030d3b0350e7b74ecb49/coverage-7.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:b34ece8065914f938ed7f2c5872bb865336977a52919149846eac3744327267a", size = 223215, upload-time = "2026-05-10T17:59:46.779Z" }, - { url = "https://files.pythonhosted.org/packages/fc/e4/649c8d4f7f1709b6dbfc474358aa1bba02f67bcd52e2fec291a5014006cd/coverage-7.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a78e2a9d9c5e3b8d4ab9b9d28c985ea66fced0a7d7c2aec1f216e03a2011480", size = 219795, upload-time = "2026-05-10T17:59:48.198Z" }, - { url = "https://files.pythonhosted.org/packages/7f/8d/46692d24b3f395d4cbf17bfcc57136b4f2f9c0c0df864b0bddfc1d71a014/coverage-7.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1816c505187592dcd1c5a5f226601a549f70365fbd00930ac88b0c225b76bb4", size = 220299, upload-time = "2026-05-10T17:59:49.683Z" }, - { url = "https://files.pythonhosted.org/packages/12/c2/a40f5cb295bbcbb697a76947a56081c494c61950366294ee426ffe261099/coverage-7.14.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d8e1762f0e9cbc26ec315471e7b47855218e833cd5a032d706fbf43845d878c7", size = 250721, upload-time = "2026-05-10T17:59:51.494Z" }, - { url = "https://files.pythonhosted.org/packages/fd/35/202235eb5c3c14c212462cd91d61b7386bf8fc44bc7a77f4742d2a69174b/coverage-7.14.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9336e23e8bb3a3925398261385e2a1533957d3e760e91070dcb0e98bfa514eed", size = 252633, upload-time = "2026-05-10T17:59:53.244Z" }, - { url = "https://files.pythonhosted.org/packages/bb/80/5f596e8995785124ee191c42535664c5e62c65995b66f4ca21e28ae04c81/coverage-7.14.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd1169b2230f9cbe9c638ba38022ed7a2b1e641cc07f7cea0365e4be2a74980", size = 254743, upload-time = "2026-05-10T17:59:55.021Z" }, - { url = "https://files.pythonhosted.org/packages/1e/6d/0d178825be2350f0adb27984d0aa7cf84bbdab201f6fb926b535d23a8f5f/coverage-7.14.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d1bb3543b58fea74d2cd1abc4054cc927e4724687cb4560cd2ed88d2c7d820c0", size = 256700, upload-time = "2026-05-10T17:59:56.511Z" }, - { url = "https://files.pythonhosted.org/packages/19/5b/9e549c2f6e9dfea472adadba06c294e64735dabc2dd19015fac082095013/coverage-7.14.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a93bac2cb577ef60074999ed56d8a1535894398e2ed920d4185c3ec0c8864742", size = 250854, upload-time = "2026-05-10T17:59:57.94Z" }, - { url = "https://files.pythonhosted.org/packages/3d/1c/b94f9f5f36396021ee2f62c5834b12e6a3d31f0bed5d6fc6d1c3caec087c/coverage-7.14.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5904abf7e18cddc463219b17552229650c6b79e061d31a1059283051169cf7d5", size = 252433, upload-time = "2026-05-10T17:59:59.688Z" }, - { url = "https://files.pythonhosted.org/packages/b5/cb/d192cd8e1345eccabc32016f2d39072ecd10cb4f4b983ed8d0ebdeaf00dc/coverage-7.14.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:741f57cddc9004a8c81b084660215f33a6b597dbe62c31386b983ee26310e327", size = 250494, upload-time = "2026-05-10T18:00:01.953Z" }, - { url = "https://files.pythonhosted.org/packages/53/c5/aac9f460a41d835dbddef1d377f105f6ac2311d0f3c1588e9f51046d8813/coverage-7.14.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:664123feb0929d7affc135717dbd70d61d98688a08ab1e5ba464739620c6252d", size = 254261, upload-time = "2026-05-10T18:00:03.779Z" }, - { url = "https://files.pythonhosted.org/packages/23/aa/7af7c0081980a9cb3d289c5a435a4b7657dcecbd128e25c580e6a50389b5/coverage-7.14.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c83d2399a51bbec8429266905d33616f04bc5726b1138c35844d5fcd896b2e20", size = 250216, upload-time = "2026-05-10T18:00:05.262Z" }, - { url = "https://files.pythonhosted.org/packages/35/60/a4257538ce2f6b978aeb51870d6c4208c510928a03db7e0339bb625dccb7/coverage-7.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb2e855b87321259a037429288ae85216d191c74de3e79bf57cd2bc0761992c", size = 251125, upload-time = "2026-05-10T18:00:06.858Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ab/f91af47642ec1aa53490e835a95847168d9c77fc39aa58527604c051e145/coverage-7.14.0-cp311-cp311-win32.whl", hash = "sha256:731dc15b385ac52289743d476245b61e1a2927e803bef655b52bc3b2a75a21f3", size = 222300, upload-time = "2026-05-10T18:00:08.608Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f0/a71ddbd874431e7a7cd96071f0c331cfbbad07704833c765d24ffbab8a67/coverage-7.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:bfb0ed8ec5d25e93face268115d7964db9df8b9aae8edcde9ec6b16c726a7cc1", size = 223241, upload-time = "2026-05-10T18:00:10.746Z" }, - { url = "https://files.pythonhosted.org/packages/d8/6e/d9d312a5151a96cd110efee32efc3fc97b01ebd86203fe618ccb29cf4c92/coverage-7.14.0-cp311-cp311-win_arm64.whl", hash = "sha256:7ebb1c6df9f78046a1b1e0a89674cd4bf73b7c648914eebcf976a57fd99a5627", size = 221908, upload-time = "2026-05-10T18:00:12.242Z" }, - { url = "https://files.pythonhosted.org/packages/09/1e/2f996b2c8415cbb6f54b0f5ec1ee850c96d7911961afb4fc05f4a89d8c58/coverage-7.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7ffd19fc8aed057fd686a17a4935eef5f9859d69208f96310e893e64b9b6ccf5", size = 219967, upload-time = "2026-05-10T18:00:13.756Z" }, - { url = "https://files.pythonhosted.org/packages/34/23/35c7aea1274aef7525bdd2dc92f710bdde6d11652239d71d1ec450067939/coverage-7.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:829994cfe1aeb773ca27bf246d4badc1e764893e3bfb98fff820fcecd1ca4662", size = 220329, upload-time = "2026-05-10T18:00:15.264Z" }, - { url = "https://files.pythonhosted.org/packages/75/cf/a8f4b43a16e194b0261257ad28ded5853ec052570afef4a84e1d81189f3b/coverage-7.14.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b4f07cf7edcb7ec39431a5074d7ea83b29a9f71fcfc494f0f40af4e65180420f", size = 251839, upload-time = "2026-05-10T18:00:17.16Z" }, - { url = "https://files.pythonhosted.org/packages/69/ff/6699e7b71e60d3049eb2bdcbc95ee3f35707b2b0e48f32e9e63d3ce30c08/coverage-7.14.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ca3d9cf2c32b521bd9518385608787fa86f38daf993695307531822c3430ed67", size = 254576, upload-time = "2026-05-10T18:00:18.829Z" }, - { url = "https://files.pythonhosted.org/packages/22/ec/c936d495fcd67f48f03a9c4ad3297ff80d1f222a5df3980f15b34c186c21/coverage-7.14.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92af52828e7f29d827346b0294e5a0853fa206db77db0395b282918d41e28db9", size = 255690, upload-time = "2026-05-10T18:00:20.648Z" }, - { url = "https://files.pythonhosted.org/packages/5c/42/5af63f636cc62a4a2b1b3ba9146f6ee6f53a35a50d5cefc54d5670f60999/coverage-7.14.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b2bb6c9d7e769360d0f20a0f219603fd64f0c8f97de17ab25853261602be0fb", size = 257949, upload-time = "2026-05-10T18:00:22.28Z" }, - { url = "https://files.pythonhosted.org/packages/26/d3/a225317bd2012132a27e1176d51660b826f99bb975876463c44ea0d7ee5a/coverage-7.14.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1c9ed6ef99f88fb8c14aa8e2bf8eb0fe55fa2edfea68f8675d78741df1a5ac0e", size = 252242, upload-time = "2026-05-10T18:00:24.076Z" }, - { url = "https://files.pythonhosted.org/packages/f1/7f/9e65495298c3ea414742998539c37d048b5e81cc818fb1828cc6b51d10bf/coverage-7.14.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8231ade007f37959fbf58acc677f26b922c02eda6f0428ea307da0fd39681bf3", size = 253608, upload-time = "2026-05-10T18:00:25.588Z" }, - { url = "https://files.pythonhosted.org/packages/94/46/1522b524a35bdad22b2b8c4f9d32d0a104b524726ec380b2db68db1746f5/coverage-7.14.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d8b013632cc1ce1d09dbe4f32667b4d320ec2f54fc326ebeffcd0b0bcc2bb6c4", size = 251753, upload-time = "2026-05-10T18:00:27.104Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e9/cdf00d38817742c541ade405e115a3f7bf36e6f2a8b99d4f209861b85a2d/coverage-7.14.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1733198802d71ec4c524f322e2867ee05c62e9e75df86bdca545407a221827d1", size = 255823, upload-time = "2026-05-10T18:00:29.038Z" }, - { url = "https://files.pythonhosted.org/packages/38/fc/5e7877cf5f902d08a17ff1c532511476d87e1bea355bd5028cb97f902e79/coverage-7.14.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:72a305291fa8ee01332f1aaf38b348ca34097f6aa0b0ef627eef2837e57bbba5", size = 251323, upload-time = "2026-05-10T18:00:30.647Z" }, - { url = "https://files.pythonhosted.org/packages/18/9d/50f05a72dff8487464fdd4178dda5daed642a060e60afb644e3d45123559/coverage-7.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fcaba850dd317c65423a9d63d88f9573c53b00354d6dd95724576cc98a131595", size = 253197, upload-time = "2026-05-10T18:00:32.211Z" }, - { url = "https://files.pythonhosted.org/packages/00/3f/6f61ffe6439df266c3cf60f5c99cfaa21103d0210d706a42fc6c30683ff8/coverage-7.14.0-cp312-cp312-win32.whl", hash = "sha256:5ac83957a80d0701310e96d8bec68cdcf4f90a7674b7d13f15a344315b41ab27", size = 222515, upload-time = "2026-05-10T18:00:33.717Z" }, - { url = "https://files.pythonhosted.org/packages/85/19/93853133df2cb371083285ef6a93982a0173e7a233b0f61373ba9fd30eb2/coverage-7.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:70390b0da32cb90b501953716302906e8bcce087cb283e70d8c97729f22e92b2", size = 223324, upload-time = "2026-05-10T18:00:35.172Z" }, - { url = "https://files.pythonhosted.org/packages/74/18/9f7fe62f659f24b7a82a0be56bf94c1bd0a89e0ae7ab4c668f6e82404294/coverage-7.14.0-cp312-cp312-win_arm64.whl", hash = "sha256:91b993743d959b8be85b4abf9d5478216a69329c321efe5be0433c1a841d691d", size = 221944, upload-time = "2026-05-10T18:00:37.014Z" }, - { url = "https://files.pythonhosted.org/packages/6b/76/b7c66ee3c66e1b0f9d894c8125983aa0c03fb2336f2fd16559f9c966157f/coverage-7.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f2bbb8254370eb4c628ff3d6fa8a7f74ddc40565394d4f7ab791d1fe568e37ef", size = 219990, upload-time = "2026-05-10T18:00:38.887Z" }, - { url = "https://files.pythonhosted.org/packages/b3/af/e567cbad5ba69c013a50146dfa886dc7193361fda77521f51274ff620e1b/coverage-7.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:23b81107f46d3f21d0cbce30664fcec0f5d9f585638a67081750f99738f6bf66", size = 220365, upload-time = "2026-05-10T18:00:40.864Z" }, - { url = "https://files.pythonhosted.org/packages/44/6f/9ad575d505b4d805b254febc8a5b338a2efe278f8786e56ff1cb8413f9c3/coverage-7.14.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:22a7e06a5f11a757cdfe79018e9095f9f69ae283c5cd8123774c788deec8717b", size = 251363, upload-time = "2026-05-10T18:00:42.489Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5f/b5370068b2f57787454592ed7dcd1002f0f1703b7db1fa30f6a325a4ca6e/coverage-7.14.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9d1aa57a1dc8e05bdc42e81c5d671d849577aeedf279f4c449d6d286f9ed88ca", size = 253961, upload-time = "2026-05-10T18:00:44.079Z" }, - { url = "https://files.pythonhosted.org/packages/29/1e/51adf17738976e8f2b85ddef7b7aa12a0838b056c92f175941d8862767c1/coverage-7.14.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90c1a51bcfddf645b3bb7ec333d9e94393a8e94f55642380fa8a9a5a9e636cb7", size = 255193, upload-time = "2026-05-10T18:00:45.623Z" }, - { url = "https://files.pythonhosted.org/packages/9e/7b/5bfd7ac1df3b881c2ac7a5cbc99c7609e6296c402f5ef587cd81c6f355b3/coverage-7.14.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a841fae2fadcae4f438d43b6ccc4aac2ad609f47cdb6cfdce60cbb3fe5ca7bc2", size = 257326, upload-time = "2026-05-10T18:00:47.173Z" }, - { url = "https://files.pythonhosted.org/packages/7d/38/1d37d316b174fad3843a1d76dbdfe4398771c9ecd0515935dd9ece9cd627/coverage-7.14.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c79d2319cabef1fe8e86df73371126931550804738f78ad7d31e3aad85a67367", size = 251582, upload-time = "2026-05-10T18:00:49.152Z" }, - { url = "https://files.pythonhosted.org/packages/34/46/746704f95980ba220214e1a41e18cec5aea80a898eaa53c51bf2d645ff36/coverage-7.14.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1b23b0c6f0b1db6ad769b7050c8b641c0bf215ded26c1816955b17b7f26edfa9", size = 253325, upload-time = "2026-05-10T18:00:51.252Z" }, - { url = "https://files.pythonhosted.org/packages/e1/b9/bbe87206d9687b192352f893797825b5f5b15ecd3aa9c68fbff0c074d77b/coverage-7.14.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:55d3089079ce181a4566b1065ab28d2575eb76d8ac8f81f4fcda2bf037fee087", size = 251291, upload-time = "2026-05-10T18:00:52.816Z" }, - { url = "https://files.pythonhosted.org/packages/46/57/b8cdb12ac0d73ef0243218bd5e22c9df8f92edab8018213a86aec67c5324/coverage-7.14.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:49c005cba1e2f9677fb2845dcdf9a2e72a52a17d63e8231aaaae35d9f50215ef", size = 255448, upload-time = "2026-05-10T18:00:54.548Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d4/5002019538b2036ce3c84340f54d2fd5100d55b0a6b0894eee56128d03c7/coverage-7.14.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:9117377b823daa28aa8635fbb08cda1cd6be3d7143257345459559aeef852d52", size = 251110, upload-time = "2026-05-10T18:00:56.122Z" }, - { url = "https://files.pythonhosted.org/packages/37/53/20c5009477660f084e6ed60bc02a91894b8e234e617e86ecfd9aaf78e27b/coverage-7.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7b79d646cf46d5cf9a9f40281d4441df5849e445726e369006d2b117710b33fe", size = 252885, upload-time = "2026-05-10T18:00:57.967Z" }, - { url = "https://files.pythonhosted.org/packages/ae/ab/3cf6427ac9c1f1db747dbb1ce71dde47984876d4c2cfd018a3fef0a78d4d/coverage-7.14.0-cp313-cp313-win32.whl", hash = "sha256:fb609b3658479e33f9516d46f1a89dbb9b6c261366e3a11844a96ec487533dae", size = 222539, upload-time = "2026-05-10T18:00:59.581Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b8/9228523e80321c2cb4880d1f589bc0171f2f71432c35118ad04dc01decce/coverage-7.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:0773d8329cf32b6fd222e4b52622c61fe8d503eb966cfc8d3c3c10c96266d50e", size = 223344, upload-time = "2026-05-10T18:01:01.531Z" }, - { url = "https://files.pythonhosted.org/packages/a3/99/118daa192f95e3a6cb2740100fbf8797cda1734b4134ef0b5d501a7fa8f3/coverage-7.14.0-cp313-cp313-win_arm64.whl", hash = "sha256:b4e26a0f1b696faf283bffe5b8569e44e336c582439df5d53281ab89ee0cba96", size = 221966, upload-time = "2026-05-10T18:01:03.16Z" }, - { url = "https://files.pythonhosted.org/packages/e6/f1/a46cc0c013be170216253184a32366d7cbdb9252feaec866b05c2d12a894/coverage-7.14.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:953f521ca9445300397e65fda3dca58b2dbd68fee983777420b57ac3c77e9f90", size = 220679, upload-time = "2026-05-10T18:01:05.058Z" }, - { url = "https://files.pythonhosted.org/packages/64/8c/9c30a3d311a34177fa432995be7fbfc64477d8bac5630bd38055b1c9b424/coverage-7.14.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:98af83fd65ae24b1fdd03aaead967a9f523bcd2f1aab2d4f3ffda65bb568a6f1", size = 221033, upload-time = "2026-05-10T18:01:07.002Z" }, - { url = "https://files.pythonhosted.org/packages/9a/cd/3fb5e06c3badefd0c1b47e2044fdca67f8220a4ec2e7fcfb476aa0a67c6c/coverage-7.14.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:668b92e6958c4db7cf92e81caac328dfbbdbb215db2850ad28f0cbe1eea0bfbd", size = 262333, upload-time = "2026-05-10T18:01:08.903Z" }, - { url = "https://files.pythonhosted.org/packages/a8/e6/fbc322325c7294d3e22c1ad6b79e45d0806b25228c8e5842aed6d8169aa7/coverage-7.14.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9fbd898551762dea00d3fef2b1c4f99afd2c6a3ff952ea07d60a9bd5ed4f34bc", size = 264410, upload-time = "2026-05-10T18:01:10.531Z" }, - { url = "https://files.pythonhosted.org/packages/08/92/c497b264bec1673c47cc77e26f760fcda4654cabf1f39546d1a23a3b8c35/coverage-7.14.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68af363c07ecd8d4b7d4043d85cb376d7d227eceb54e5323ee45da73dbd3e426", size = 266836, upload-time = "2026-05-10T18:01:12.19Z" }, - { url = "https://files.pythonhosted.org/packages/78/fc/045da320987f401af5d2815d351e8aa799aec859f60e29f445e3089eeedb/coverage-7.14.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e57054a583da8ac55edf24117ea4c9133032cfc4cf72aa2d48c1e5d4b52f899", size = 267974, upload-time = "2026-05-10T18:01:13.926Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ae/227b1e379497fb7a4fc3286e620f80c8a1e7cec66d45695a01639eb1af65/coverage-7.14.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cc3499459bbcdd51a65b64c35ab7ed2764eaf3cba826e0df3f1d7fe2e102b70b", size = 261578, upload-time = "2026-05-10T18:01:15.564Z" }, - { url = "https://files.pythonhosted.org/packages/a0/f5/3570342900f2acea31d33ff1590c5d8bac1a8e1a2e1c6d34a5d5e61de681/coverage-7.14.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:45899ec2138a4346ed34d601dedf5076fb74edf2d1dd9dc76a78e82397edee90", size = 264394, upload-time = "2026-05-10T18:01:17.607Z" }, - { url = "https://files.pythonhosted.org/packages/16/29/de1bbc01c935b28f89b1dc3db85b011c055e843a8e5e3b83141c3f80af7f/coverage-7.14.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8767486808c436f05b23ab98eb963fb29185e32a9357a166971685cb3459900f", size = 262022, upload-time = "2026-05-10T18:01:19.304Z" }, - { url = "https://files.pythonhosted.org/packages/35/95/f53890b0bf2fc10ab168e05d38869215e73ca24c4cb521c3bb0eb62fe16b/coverage-7.14.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a3b5ddfd6aa7ddad53ee3edb231e88a2151507a43229b7d71b953916deca127d", size = 265732, upload-time = "2026-05-10T18:01:21.494Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ea/c919e259081dd2bdf0e43b87209709ba7ec2e4117c2a7f5185379c43463c/coverage-7.14.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:63df0fe568e698e1045792399f8ab6da3a6c2dce3182813fb92afa2641087b47", size = 260921, upload-time = "2026-05-10T18:01:23.533Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2c/c2831889705a81dc5d1c6ca12e4d8e9b95dfc146d153488a6c0ea685d28e/coverage-7.14.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:827d6397dbd95144939b18f89edf31f63e1f99633e8d5f32f22ba8bdda567477", size = 263109, upload-time = "2026-05-10T18:01:25.165Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a9/2fcae5003cac3d63fe344d2166243c2756935f48420863c5272b240d550b/coverage-7.14.0-cp313-cp313t-win32.whl", hash = "sha256:7bf43e000d24012599b879791cff41589af90674722421ef11b11a5431920bab", size = 223212, upload-time = "2026-05-10T18:01:27.157Z" }, - { url = "https://files.pythonhosted.org/packages/3f/bb/18e94d7b14b9b398164197114a587a04ab7c9fdbe1d237eef57311c5e883/coverage-7.14.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3f5549365af25d770e06b1f8f5682d9a5637d06eb494db91c6fa75d3950cc917", size = 224272, upload-time = "2026-05-10T18:01:29.107Z" }, - { url = "https://files.pythonhosted.org/packages/db/56/4f14fad782b035c81c4ffd09159e7103d42bb1d93ac8496d04b90a11b7da/coverage-7.14.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6d160217ec6fe890f16ad3a9531761589443749e448f91986c972714fad361c8", size = 222530, upload-time = "2026-05-10T18:01:31.151Z" }, - { url = "https://files.pythonhosted.org/packages/1c/18/b9a6586d73992807c26f9a5f274131be3d76b56b18a82b9392e2a25d2e45/coverage-7.14.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9aed9fa983514ca032790f3fe0d1c0e42ca7e16b42432af1706b50a9a46bef5d", size = 220036, upload-time = "2026-05-10T18:01:33.057Z" }, - { url = "https://files.pythonhosted.org/packages/f3/9b/4165a1d56ddc302a0e2d518fd9d412a4fd0b57562618c78c5f21c57194f5/coverage-7.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ba3b8390db29296dbbf49e91b6fe08f990743a90c8f447ba4c2ffc29670dfa63", size = 220368, upload-time = "2026-05-10T18:01:34.705Z" }, - { url = "https://files.pythonhosted.org/packages/69/aa/c12e52a5ba148d9995229d557e3be6e554fe469addc0e9241b2f0956d8ea/coverage-7.14.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3a5d8e876dfa2f102e970b183863d6dedd023d3c0eeca1fe7a9787bc5f28b212", size = 251417, upload-time = "2026-05-10T18:01:36.949Z" }, - { url = "https://files.pythonhosted.org/packages/d7/51/ec641c26e6dca1b25a7d2035ba6ecb7c884ef1a100a9e42fbe4ce4405139/coverage-7.14.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ebb8f4614a3787d567e610bbfdf96a4798dd69a1afb1bd8ad228d4111fe6ff3", size = 253924, upload-time = "2026-05-10T18:01:38.985Z" }, - { url = "https://files.pythonhosted.org/packages/33/c4/59c3de0bd1b538824173fd518fed51c1ce740ca5ed68e74545983f4053a9/coverage-7.14.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b9bf47223dd8db3d4c4b2e443b02bace480d428f0822c3f991600448a176c97", size = 255269, upload-time = "2026-05-10T18:01:40.957Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a9/36dfa153a62040296f6e7febfdb20a5720622f6ef5a81a41e8237b9a5344/coverage-7.14.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3485a836550b303d006d57cc06e3d5afaabc642c77050b7c985a97b13e3776b8", size = 257583, upload-time = "2026-05-10T18:01:42.607Z" }, - { url = "https://files.pythonhosted.org/packages/26/7b/cc2c048d4114d9ab1c2409e9ee365e5ae10736df6dffcfc9444effa6c708/coverage-7.14.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3e7e88110bae996d199d1693ca8ec3fd52441d426401ae963437598667b4c5eb", size = 251434, upload-time = "2026-05-10T18:01:44.537Z" }, - { url = "https://files.pythonhosted.org/packages/ee/df/6770eaa576e604575e9a78055313250faef5faa84bd6f71a39fece519c43/coverage-7.14.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15228a6800ce7bdf1b74800595e56db7138cecb338fdbf044806e10dcf182dfe", size = 253280, upload-time = "2026-05-10T18:01:46.175Z" }, - { url = "https://files.pythonhosted.org/packages/ad/9e/1c0264514a3f98259a6d64765a397b2c8373e3ba59ee722a4802d3ec0c61/coverage-7.14.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9d26ac7f5398bafc5b57421ad994e8a4749e8a7a0e62d05ec7d53014d5963bfa", size = 251241, upload-time = "2026-05-10T18:01:48.732Z" }, - { url = "https://files.pythonhosted.org/packages/64/16/4efdf3e3c4079cdbf0ece56a2fea872df9e8a3e15a13a0af4400e1075944/coverage-7.14.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb73254ff43c911c967a899e1359bc5049b4b115d6e8fbdde4937d0a2246cd5", size = 255516, upload-time = "2026-05-10T18:01:50.819Z" }, - { url = "https://files.pythonhosted.org/packages/93/69/b1de96346603881b3d1bc8d6447c83200e1c9700ffbaff926ba01ff5724c/coverage-7.14.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:454a380af72c6adada298ed270d38c7a391288198dbfb8467f786f588751a90c", size = 251059, upload-time = "2026-05-10T18:01:52.773Z" }, - { url = "https://files.pythonhosted.org/packages/a4/66/2881853e0363a5e0a724d1103e53650795367471b6afb234f8b49e713bc6/coverage-7.14.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:65c86fb646d2bd2972e96bd1a8b45817ed907cee68655d6295fe7ec031d04cca", size = 252716, upload-time = "2026-05-10T18:01:54.506Z" }, - { url = "https://files.pythonhosted.org/packages/55/5c/0d3305d002c41dcde873dbe456491e663dc55152ca526b630b5c47efd62f/coverage-7.14.0-cp314-cp314-win32.whl", hash = "sha256:6a6516b02a6101398e19a3f44820f69bab2590697f7def4331f668b14adaf828", size = 222788, upload-time = "2026-05-10T18:01:56.487Z" }, - { url = "https://files.pythonhosted.org/packages/f9/58/6e1b8f52fdc3184b47dc5037f5070d83a3d11042db1594b02d2a44d786c8/coverage-7.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:45e0f79d8351fa76e256716df91eab12890d32678b9590df7ae1042e4bd4cf5d", size = 223600, upload-time = "2026-05-10T18:01:58.497Z" }, - { url = "https://files.pythonhosted.org/packages/00/70/a18c408e674bc26281cadaedc7351f929bd2094e191e4b15271c30b084cc/coverage-7.14.0-cp314-cp314-win_arm64.whl", hash = "sha256:4b899594a8b2d81e5cc064a0d7f9cac2081fed91049456cae7676787e41549c9", size = 222168, upload-time = "2026-05-10T18:02:00.411Z" }, - { url = "https://files.pythonhosted.org/packages/3d/89/2681f071d238b62aff8dfc2ab44fc24cfdb38d1c01f391a80522ff5d3a16/coverage-7.14.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f580f8c80acd94ac72e863efe2cab791d8c38d153e0b463b92dfa000d5c84cd1", size = 220766, upload-time = "2026-05-10T18:02:02.313Z" }, - { url = "https://files.pythonhosted.org/packages/bd/c7/c987babafd9207ffa1995e1ef1f9b26762cf4963aa768a66b6f0501e4616/coverage-7.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a2bd259c442cd43c49b30fbafc51776eb19ea396faf159d26a83e6a0a5f13b0c", size = 221035, upload-time = "2026-05-10T18:02:04.017Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e9/d6a5ac3b333088143d6fc877d398a9a674dc03124a2f776e131f03864823/coverage-7.14.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a706b908dfa85538863504c624b237a3cc34232bf403c057414ebfdb3b4d9f84", size = 262405, upload-time = "2026-05-10T18:02:05.915Z" }, - { url = "https://files.pythonhosted.org/packages/38/b1/e70838d29a7c08e22d44398a46db90815bbcbf28de06992bd9210d1a8d8e/coverage-7.14.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7333cd944ee4393b9b3d3c1b598c936d4fc8d70573a4c7dacfec5590dd50e436", size = 264530, upload-time = "2026-05-10T18:02:07.582Z" }, - { url = "https://files.pythonhosted.org/packages/6b/73/5c31ef97763288d03d9995152b96d5475b527c63d91c84b01caea894b83a/coverage-7.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f162bc9a15b82d947b02651b0c7e1609d6f7a8735ca330cfadec8481dd97d5a", size = 266932, upload-time = "2026-05-10T18:02:09.401Z" }, - { url = "https://files.pythonhosted.org/packages/e1/76/dd56d80f29c5f05b4d76f7e7c6d47cafacae017189c75c5759d24f9ff0cc/coverage-7.14.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:362cb78e01a5dc82009d88004cf60f2e6b6d6fcbfdec05b05af73b0abf40118f", size = 268062, upload-time = "2026-05-10T18:02:11.399Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c7/27ba85cd5b95614f159ff93ebff1901584a8d192e2e5e24c4943a7453f59/coverage-7.14.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:acebd068fca5512c3a6fde9c045f901613478781a73f0e82b307b214daef23fb", size = 261504, upload-time = "2026-05-10T18:02:13.257Z" }, - { url = "https://files.pythonhosted.org/packages/13/2e/e8149f60ab5d5684c6eee881bdf34b127115cddbb958b196768dd9d63473/coverage-7.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:29fe3da551dface75deb2ccbf87b6b66e2e7ef38f6d89050b428be94afff3490", size = 264398, upload-time = "2026-05-10T18:02:15.063Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7f/1261b025285323225f4b4abffa5a643649dfd67e25ddca7ebcbdea3b7cb3/coverage-7.14.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b4cc4fce8672fffcb09b0eafc167b396b3ba53c4a7230f54b7aaffbf6c835fa9", size = 262000, upload-time = "2026-05-10T18:02:16.756Z" }, - { url = "https://files.pythonhosted.org/packages/d3/dc/829c54f60b9d08389439c00f813c752781c496fc5788c78d8006db4b4f2b/coverage-7.14.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5d4a51aad8ba8bdcd2b8bd8f03d4aca19693fa2327a3470e4718a25b03481020", size = 265732, upload-time = "2026-05-10T18:02:18.817Z" }, - { url = "https://files.pythonhosted.org/packages/ed/b0/70bd1419941652fa062689cba9c3eeafb8f5e6fbb890bce41c3bdda5dbd6/coverage-7.14.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9f323af3e1e4f68b60b7b247e37b8515563a61375518fa59de1af48ba28a3db6", size = 260847, upload-time = "2026-05-10T18:02:20.528Z" }, - { url = "https://files.pythonhosted.org/packages/f2/73/be40b2390656c654d35ea0015ea7ba3d945769cf80790ad5e0bb2d56d2ba/coverage-7.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1a0abc7342ea9711c469dd8b821c6c311e6bc6aac1442e5fbd6b27fae0a8f3db", size = 263166, upload-time = "2026-05-10T18:02:22.337Z" }, - { url = "https://files.pythonhosted.org/packages/29/55/4a643f712fcf7cf2881f8ec1e0ccb7b164aff3108f69b51801246c8799f2/coverage-7.14.0-cp314-cp314t-win32.whl", hash = "sha256:a9f864ef57b7172e2db87a096642dd51e179e085ab6b2c371c29e885f65c8fb2", size = 223573, upload-time = "2026-05-10T18:02:24.11Z" }, - { url = "https://files.pythonhosted.org/packages/27/96/3acae5da0953be042c0b4dea6d6789d2f080701c77b88e44d5bd41b9219b/coverage-7.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:29943e552fdc08e082eb51400fb2f58e118a83b5542bd06531214e084399b644", size = 224680, upload-time = "2026-05-10T18:02:25.896Z" }, - { url = "https://files.pythonhosted.org/packages/93/3d/6ab5d2dd8325d838737c6f8d83d62eb6230e0d70b87b51b57bbfd08fa767/coverage-7.14.0-cp314-cp314t-win_arm64.whl", hash = "sha256:742a73ea621953b012f2c4c2219b512180dd84489acf5b1596b0aafc55b9100b", size = 222703, upload-time = "2026-05-10T18:02:27.822Z" }, - { url = "https://files.pythonhosted.org/packages/61/e8/cb8e80d6f9f55b99588625062822bf946cf03ed06315df4bd8397f5632a1/coverage-7.14.0-py3-none-any.whl", hash = "sha256:8de5b61163aee3d05c8a2beab6f47913df7981dad1baf82c414d99158c286ab1", size = 211764, upload-time = "2026-05-10T18:02:29.538Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version <= '3.11'" }, -] - -[[package]] -name = "cryptography" -version = "48.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/bc/ee4137cbbe105652c0ee4252792b78fc8e7afa4b8e61d9d5dc05a7f45731/cryptography-48.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1", size = 8008324, upload-time = "2026-06-09T22:31:00.702Z" }, - { url = "https://files.pythonhosted.org/packages/d5/85/6379d42181bfc713094f081360fc5784d6c816b599d45e7f082502d173ce/cryptography-48.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225", size = 4696243, upload-time = "2026-06-09T22:32:33.446Z" }, - { url = "https://files.pythonhosted.org/packages/9c/87/c85d147b53323c7eb4d850920c8901377323c2a0ff8d79c262d4fee89aa2/cryptography-48.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691", size = 4713235, upload-time = "2026-06-09T22:31:40.141Z" }, - { url = "https://files.pythonhosted.org/packages/79/58/67cbf8cf1ee7c54b439ca07bbecf8362c07afc11a3724fea70f745784add/cryptography-48.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242", size = 4702323, upload-time = "2026-06-09T22:31:42.191Z" }, - { url = "https://files.pythonhosted.org/packages/89/c6/24266ac10c47f6cd2a865f4446062b466da1d1f10b27189eac00e61bf0c9/cryptography-48.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08", size = 5300085, upload-time = "2026-06-09T22:31:58.703Z" }, - { url = "https://files.pythonhosted.org/packages/d2/bb/cc4b78784f97efc8c5874c2a9743708d172be6663024b34a0467885ae0c8/cryptography-48.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6", size = 4746137, upload-time = "2026-06-09T22:31:31.01Z" }, - { url = "https://files.pythonhosted.org/packages/1f/52/0c44de3f5267f8fbe8e835138017522a333436166e406f0db9b9e6e3033f/cryptography-48.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8", size = 4333867, upload-time = "2026-06-09T22:32:28.096Z" }, - { url = "https://files.pythonhosted.org/packages/9a/2e/772d7adbfa931537bc401640b7cac9976bff689bda187833e5d63b428e49/cryptography-48.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429", size = 4701805, upload-time = "2026-06-09T22:31:38.284Z" }, - { url = "https://files.pythonhosted.org/packages/f8/a3/b06844f303873493c963caf581c04df31c7035e0c1b0f02c4814d319ec80/cryptography-48.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f", size = 5258461, upload-time = "2026-06-09T22:31:04.187Z" }, - { url = "https://files.pythonhosted.org/packages/9f/13/8b765e2e12b07c74941caadb9d1c8fdc006c4dfbf2b8f2d610519758954d/cryptography-48.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f", size = 4745488, upload-time = "2026-06-09T22:32:30.07Z" }, - { url = "https://files.pythonhosted.org/packages/2e/aa/48972bce55049b32a94f4907eda4d75fa385aad8a39506cc2fc72196ecf0/cryptography-48.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41", size = 4830256, upload-time = "2026-06-09T22:31:43.868Z" }, - { url = "https://files.pythonhosted.org/packages/47/a2/e5079a032fb85cf6005046ca92bbd78b0c82dad2b5751ab8c311659da06f/cryptography-48.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6", size = 4979117, upload-time = "2026-06-09T22:31:05.845Z" }, - { url = "https://files.pythonhosted.org/packages/b7/a0/8f50cae9c74e718ed769d63ed5c74bd0ea830c9550a74629cebd1b9c7bc7/cryptography-48.0.1-cp311-abi3-win32.whl", hash = "sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158", size = 3304154, upload-time = "2026-06-09T22:32:16.845Z" }, - { url = "https://files.pythonhosted.org/packages/c5/69/0572c77dbace6fef72f33755bd52ea399c71367250d366237f8691826b9e/cryptography-48.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24", size = 3817138, upload-time = "2026-06-09T22:32:00.388Z" }, - { url = "https://files.pythonhosted.org/packages/42/06/3e768b4c3bc78201583fa35a0e18f640dd782ff41afba88f8545481a8874/cryptography-48.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:f817adc181390bd54f2f700107a7419040fb7c1bdf2fc26f36551a06a68c3345", size = 7989830, upload-time = "2026-06-09T22:31:07.8Z" }, - { url = "https://files.pythonhosted.org/packages/8a/13/6476736484b94041110c8340a3eb63962fea4975baea8cb4a512adb44d4d/cryptography-48.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d5d30989c6917b478b5817902e85fddaea2261efa8648383d965381ccb9e1ac4", size = 4689201, upload-time = "2026-06-09T22:31:09.745Z" }, - { url = "https://files.pythonhosted.org/packages/79/62/65a87f34d2a431546e2509b85d55e8c90df86d668f6731da64d538512ac2/cryptography-48.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df637c05205ea7c1d7fbcbe54bbfea648a52951155f997af13d895d0ecc96991", size = 4702822, upload-time = "2026-06-09T22:32:24.409Z" }, - { url = "https://files.pythonhosted.org/packages/7f/59/810b5204b0a9b10f4b6bc06bd551a8b609803cd931806bc3b71884b225e5/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:869c3b8a53bfe27147832df48b32adadf558249d50e76cb3769d40e986b13265", size = 4694875, upload-time = "2026-06-09T22:32:08.737Z" }, - { url = "https://files.pythonhosted.org/packages/24/dc/d8ca05ffea724eec6d232ea6f18e74c269eb6bdfdcc9bfba689790d1325f/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:e361afba8918070d376df76f408a4f67fec0ee9cff81a99e48fe9a233ef59e17", size = 5290385, upload-time = "2026-06-09T22:31:15.212Z" }, - { url = "https://files.pythonhosted.org/packages/03/8c/3be6cb4da181f5bb6c19cf560c2359d60644a6b5fc5b57854e528f47b296/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d069066deead00ac7f090be101be875a06855908f7ec004c27b8fefb4acfb411", size = 4737082, upload-time = "2026-06-09T22:32:22.66Z" }, - { url = "https://files.pythonhosted.org/packages/aa/f6/d5f60a5a1434dbfd949e227fd0065d194c7e6b6ac526b17f5c06152b8231/cryptography-48.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:09f73a725d582cef64b91281a322cd798d14a33b2b6f2b7ad9531dc336d84c02", size = 4325328, upload-time = "2026-06-09T22:32:10.777Z" }, - { url = "https://files.pythonhosted.org/packages/17/b7/ba75dd947a14b6ad907b01ae8f6b5b348cdd1b48142f0063dee9e20c1d9d/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:15254441469dd6bf027039453288e2072124f8b6603563f5d759e1c9b69273fa", size = 4694530, upload-time = "2026-06-09T22:31:53.105Z" }, - { url = "https://files.pythonhosted.org/packages/62/29/50d6b9e8aff12d8b67afaeb3569335e32dc83a5723e3bbded24fdac9f809/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:8ace4507d1e6533c125f4fac754f8bb8b6a74c08e92179dabd7e16571a3efbf3", size = 5245046, upload-time = "2026-06-09T22:31:25.774Z" }, - { url = "https://files.pythonhosted.org/packages/9f/04/618f4115cfc0add0838c82507aa18a346089428da8653ad38b3ff36f5cb3/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:b4e391975f038e66432328639620a4aff2d307513b004f1ca06d6225bced815c", size = 4736660, upload-time = "2026-06-09T22:32:12.676Z" }, - { url = "https://files.pythonhosted.org/packages/24/9c/06e062462a0de28a3b3911322eded4c16deb9f441b1b7575d3dc59488ab5/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42fcd8e26fe555d9b3577a135f5091fefa0aa4e99129c23fb56787a1bd4ada72", size = 4822229, upload-time = "2026-06-09T22:31:17.062Z" }, - { url = "https://files.pythonhosted.org/packages/f4/be/0561971eaaee4b8a0e7d5113c536921063ab91aaf23278ac374eaf881e11/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1400da5e32a43253392277eac7490a60e497d810a63dd5608d71bbd7af507c9", size = 4966364, upload-time = "2026-06-09T22:31:32.842Z" }, - { url = "https://files.pythonhosted.org/packages/a4/27/728c77876f12b000820b69ae490f3c4083775e79e07827e9e60be07ad209/cryptography-48.0.1-cp314-cp314t-win32.whl", hash = "sha256:0df56b056bc17c1b7d6821dfa65216e62bd232d8ab05eb3db44e71d235651471", size = 3278498, upload-time = "2026-06-09T22:31:29.154Z" }, - { url = "https://files.pythonhosted.org/packages/06/e3/79a612c6d7b1e6ee0edd43633d53035bec2cfb78c82b76f7864f39e36f34/cryptography-48.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9de21387aa95e2a895823d0745b430bed4f33503ba9ab5e0b5311f33e37d66d2", size = 3798790, upload-time = "2026-06-09T22:31:56.697Z" }, - { url = "https://files.pythonhosted.org/packages/ca/6c/00fa2a95997164c8b2072ce327c23d4ab20809ccc323ea5fab91e53a4bba/cryptography-48.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67", size = 7987408, upload-time = "2026-06-09T22:32:20.777Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d9/45f309a7e4e5f3f8f121d6d3be9e94024a7726ec598d6e08ae04edb2f04d/cryptography-48.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8", size = 4690196, upload-time = "2026-06-09T22:31:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/5f/9f/a1bc8bcc798811b8527eb374bbccf30a3f3e806829d967118222bf1125eb/cryptography-48.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a", size = 4696782, upload-time = "2026-06-09T22:31:45.615Z" }, - { url = "https://files.pythonhosted.org/packages/66/c2/81a4fb4e4373c500bb526bc337ac5719dd31dd15b970b84a238168c6aa08/cryptography-48.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577", size = 4696618, upload-time = "2026-06-09T22:31:11.564Z" }, - { url = "https://files.pythonhosted.org/packages/e5/0b/aa68b221dde92d09cb29a024ede17550ee21e77a404e59fc093c82bb51e1/cryptography-48.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1", size = 5289970, upload-time = "2026-06-09T22:31:20.368Z" }, - { url = "https://files.pythonhosted.org/packages/78/13/fba657f958d2af66ea959a4ba01212632089249d34af1ae48054136344d7/cryptography-48.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d", size = 4731873, upload-time = "2026-06-09T22:31:22.253Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4c/9a964756d24a26b3e34dfcb16f961b89838786e6700b635b0d1e3adff4b6/cryptography-48.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6", size = 4330804, upload-time = "2026-06-09T22:31:36.56Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0f/a10f3a6eb12950a10e3a874070283aa2dd5875b2bfd15fad8a3e17b3f13e/cryptography-48.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46", size = 4696217, upload-time = "2026-06-09T22:31:13.351Z" }, - { url = "https://files.pythonhosted.org/packages/f3/6f/5cd12f951165ea73ef85266775d97e4c763b2474ccfd816dd69d3a18d6f8/cryptography-48.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401", size = 5245252, upload-time = "2026-06-09T22:32:02.193Z" }, - { url = "https://files.pythonhosted.org/packages/68/ab/8aaa12e4516ec4464033ab79b6f3b592bd5a92102467c4ace8a0d970203f/cryptography-48.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b", size = 4731388, upload-time = "2026-06-09T22:32:04.019Z" }, - { url = "https://files.pythonhosted.org/packages/1b/24/50027ea4dca85ec1f40688f3c24fb32ccacd520583c9592c3cc95628e6fb/cryptography-48.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1", size = 4824186, upload-time = "2026-06-09T22:32:18.707Z" }, - { url = "https://files.pythonhosted.org/packages/52/41/04cb5eb17085ade6f50cc611fb657df6a0f5885350de8764ece89c050197/cryptography-48.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475", size = 4964539, upload-time = "2026-06-09T22:31:18.793Z" }, - { url = "https://files.pythonhosted.org/packages/36/bf/ed70785c496e89d7e73b7cda2d21f2447fd6d4e821714b8d04ff217fed92/cryptography-48.0.1-cp39-abi3-win32.whl", hash = "sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1", size = 3282307, upload-time = "2026-06-09T22:30:53.162Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ff/371ea7d252656ee1eb6d83eeeef3d1d0c6baf1d6497687d081ea03814670/cryptography-48.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac", size = 3793408, upload-time = "2026-06-09T22:32:15.191Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d3/eb4e394e587341fdad09a09101fa76478ead3a78b0ad63e55c22f0d75c02/cryptography-48.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:08a597acce1ff37f347400087776599e2348a3a8bc53b44120e463cd274efe4a", size = 3951747, upload-time = "2026-06-09T22:31:23.871Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4a/3f43451b4f858bfceaaaffc649e6e787e8d4fb332a1d443af39ab02cc8f1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:735824ec41b7f74a7c45fb1591349333e4c696cb6c044e5f46356e560143e4cd", size = 4641226, upload-time = "2026-06-09T22:31:02.532Z" }, - { url = "https://files.pythonhosted.org/packages/73/4e/855584c2c23b09e4ce2d3b9c30e983e679cd60b068c513c6bbdb91e11782/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:92a46e1d638daa264ba2971c0b0489c9409787943efae4d60ffda3d091ef832c", size = 4668958, upload-time = "2026-06-09T22:32:06.213Z" }, - { url = "https://files.pythonhosted.org/packages/42/3b/d35750e41d803d1e516fd6d6011f065424924da7af1748cef4cc9cb3ede1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:7e234ac052af99f2700826a5c29ea99d9c1b1f80341cde62d11c8154dc8e0bd9", size = 4640793, upload-time = "2026-06-09T22:32:26.331Z" }, - { url = "https://files.pythonhosted.org/packages/ca/aa/cdb7181fe865285e87e96825aaab239400f1de0c3bfba9bd9769b79f1a92/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:33842cf0888951cef5bc7ac724ab844a42044c1727b967b7f8997289a0464f92", size = 4668505, upload-time = "2026-06-09T22:31:27.534Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8c/ce3823c06c2804f194f9e64f0d67fa3f4094a39f2bb1a990cd03603af8fc/cryptography-48.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6184ca7b174f28d7c703f1290d4b297217c45355f77a98f67e9b7f14549ac54a", size = 3742204, upload-time = "2026-06-09T22:31:34.773Z" }, -] - -[[package]] -name = "diffctx" -version = "1.11.0" -source = { editable = "." } -dependencies = [ - { name = "pathspec" }, -] - -[package.optional-dependencies] -dev = [ - { name = "black" }, - { name = "charset-normalizer" }, - { name = "coverage" }, - { name = "hypothesis" }, - { name = "import-linter" }, - { name = "mypy" }, - { name = "pre-commit" }, - { name = "pygit2", version = "1.18.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pygit2", version = "1.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "pytest-cov" }, - { name = "pytest-timeout" }, - { name = "pytest-xdist" }, - { name = "pyyaml" }, - { name = "radon" }, - { name = "ruff" }, - { name = "tiktoken" }, - { name = "tree-sitter" }, - { name = "tree-sitter-c" }, - { name = "tree-sitter-c-sharp" }, - { name = "tree-sitter-cpp" }, - { name = "tree-sitter-elixir" }, - { name = "tree-sitter-go" }, - { name = "tree-sitter-html" }, - { name = "tree-sitter-java" }, - { name = "tree-sitter-javascript" }, - { name = "tree-sitter-lua" }, - { name = "tree-sitter-php" }, - { name = "tree-sitter-python" }, - { name = "tree-sitter-ruby" }, - { name = "tree-sitter-rust" }, - { name = "tree-sitter-scala" }, - { name = "tree-sitter-swift" }, - { name = "tree-sitter-typescript" }, - { name = "types-pyyaml" }, -] -diffctx = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] -full = [ - { name = "charset-normalizer" }, - { name = "tree-sitter" }, - { name = "tree-sitter-c" }, - { name = "tree-sitter-c-sharp" }, - { name = "tree-sitter-cpp" }, - { name = "tree-sitter-elixir" }, - { name = "tree-sitter-go" }, - { name = "tree-sitter-html" }, - { name = "tree-sitter-java" }, - { name = "tree-sitter-javascript" }, - { name = "tree-sitter-lua" }, - { name = "tree-sitter-php" }, - { name = "tree-sitter-python" }, - { name = "tree-sitter-ruby" }, - { name = "tree-sitter-rust" }, - { name = "tree-sitter-scala" }, - { name = "tree-sitter-swift" }, - { name = "tree-sitter-typescript" }, -] -mcp = [ - { name = "anyio" }, - { name = "mcp" }, -] -tree-sitter = [ - { name = "tree-sitter" }, - { name = "tree-sitter-c" }, - { name = "tree-sitter-c-sharp" }, - { name = "tree-sitter-cpp" }, - { name = "tree-sitter-elixir" }, - { name = "tree-sitter-go" }, - { name = "tree-sitter-html" }, - { name = "tree-sitter-java" }, - { name = "tree-sitter-javascript" }, - { name = "tree-sitter-lua" }, - { name = "tree-sitter-php" }, - { name = "tree-sitter-python" }, - { name = "tree-sitter-ruby" }, - { name = "tree-sitter-rust" }, - { name = "tree-sitter-scala" }, - { name = "tree-sitter-swift" }, - { name = "tree-sitter-typescript" }, -] - -[package.metadata] -requires-dist = [ - { name = "anyio", marker = "extra == 'mcp'", specifier = ">=4.5,<5.0" }, - { name = "black", marker = "extra == 'dev'", specifier = ">=23.0.0,<27.0" }, - { name = "charset-normalizer", marker = "extra == 'dev'", specifier = ">=3.0,<4.0" }, - { name = "charset-normalizer", marker = "extra == 'full'", specifier = ">=3.0,<4.0" }, - { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.0,<8.0" }, - { name = "diffctx", extras = ["tree-sitter"], marker = "extra == 'dev'" }, - { name = "diffctx", extras = ["tree-sitter"], marker = "extra == 'full'" }, - { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, - { name = "import-linter", marker = "extra == 'dev'", specifier = ">=2.0,<3.0" }, - { name = "mcp", marker = "extra == 'mcp'", specifier = ">=1.27,<2.0" }, - { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.0,<3.0" }, - { name = "numpy", marker = "extra == 'diffctx'", specifier = ">=1.24,<3.0" }, - { name = "pathspec", specifier = ">=0.11,<2.0" }, - { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=3.0,<5.0" }, - { name = "pygit2", marker = "extra == 'dev'", specifier = ">=1.12,<2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0,<10.0" }, - { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.23,<2.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=3.0,<8.0" }, - { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.1,<3.0" }, - { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.0,<4.0" }, - { name = "pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.2,<8.0" }, - { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.4,<1.0" }, - { name = "tiktoken", marker = "extra == 'dev'", specifier = ">=0.9,<1.0" }, - { name = "tree-sitter", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-c", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-c-sharp", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-cpp", marker = "extra == 'tree-sitter'", specifier = ">=0.22,<1.0" }, - { name = "tree-sitter-elixir", marker = "extra == 'tree-sitter'", specifier = ">=0.3,<1.0" }, - { name = "tree-sitter-go", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-html", marker = "extra == 'tree-sitter'", specifier = ">=0.23,<1.0" }, - { name = "tree-sitter-java", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-javascript", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-lua", marker = "extra == 'tree-sitter'", specifier = ">=0.5,<1.0" }, - { name = "tree-sitter-php", marker = "extra == 'tree-sitter'", specifier = ">=0.24,<1.0" }, - { name = "tree-sitter-python", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-ruby", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-rust", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "tree-sitter-scala", marker = "extra == 'tree-sitter'", specifier = ">=0.24,<1.0" }, - { name = "tree-sitter-swift", marker = "extra == 'tree-sitter'", specifier = ">=0.0.1,<1.0" }, - { name = "tree-sitter-typescript", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, - { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, -] -provides-extras = ["dev", "diffctx", "full", "mcp", "tree-sitter"] - -[[package]] -name = "distlib" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - -[[package]] -name = "execnet" -version = "2.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, -] - -[[package]] -name = "filelock" -version = "3.29.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" }, -] - -[[package]] -name = "grimp" -version = "3.14" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/46/79764cfb61a3ac80dadae5d94fb10acdb7800e31fecf4113cf3d345e4952/grimp-3.14.tar.gz", hash = "sha256:645fbd835983901042dae4e1b24fde3a89bf7ac152f9272dd17a97e55cb4f871", size = 830882, upload-time = "2025-12-10T17:55:01.287Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/a0/de4e6fef8cbe60db6e0be253f68d8e8375df7209eeb73b7286d33a67f701/grimp-3.14-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:17364365c27c111514fd9d17844f275ed074ec9feca0d6cf9bd5bf9218db2412", size = 2184283, upload-time = "2025-12-10T17:53:39.922Z" }, - { url = "https://files.pythonhosted.org/packages/ce/45/4d0926cee327855e719ea5efea28adfcb434fedf2e0c60c054784c635d12/grimp-3.14-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:25273ea53ac1492e7343bd9d9d9b60445f707bc0d162eca85288c7325579ee47", size = 2118617, upload-time = "2025-12-10T17:53:16.911Z" }, - { url = "https://files.pythonhosted.org/packages/fb/9a/e84ac4acfd0cc87116d79a13ac66f30028d35750a823723c9d14b0c143d1/grimp-3.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53b8f69bdf070fddbbc13f60a5cdb42efb102516770b34f076456ec4ce960627", size = 2283636, upload-time = "2025-12-10T17:52:04.371Z" }, - { url = "https://files.pythonhosted.org/packages/66/db/1451492b350a12371a77ed0f32da4a667623747b2a17b4310360704f999d/grimp-3.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1aa397596bb6d616200be1fd6570e87ddc225c192845c649d4f6015175b77bc6", size = 2234938, upload-time = "2025-12-10T17:52:17.702Z" }, - { url = "https://files.pythonhosted.org/packages/1d/42/999148c107f19ccaca34462e2fb1714bec95443b1c296bda8e6f8e556086/grimp-3.14-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2892ca934fc19c6d51d6c0a609d4db7e97c4721cc9a609f2bab8fe8e1ec1821", size = 2389984, upload-time = "2025-12-10T17:52:59.21Z" }, - { url = "https://files.pythonhosted.org/packages/18/35/e7c8fd66cfea469a04a1f360654fba24c0253c5c7544fbe75b8397dac5ef/grimp-3.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e9367b9fa9c97cb8d1974a164d5981852b498977a097ad7335fc012ab96498b", size = 2569059, upload-time = "2025-12-10T17:52:32.162Z" }, - { url = "https://files.pythonhosted.org/packages/88/31/0d717f976e88c435d2b0adb430040ef6658abcef0a10bea4b845f9ff924d/grimp-3.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87f398915c716c13736460a54f8dc5d70494d7d616039f547c0093f252307109", size = 2357843, upload-time = "2025-12-10T17:52:45.72Z" }, - { url = "https://files.pythonhosted.org/packages/c6/62/c76f56a7d4f9dabf705171510e63947d1fbc97e9b7f89d81cdc2d862519b/grimp-3.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5551a825b14e52642428ef7c4a5790819bfaee0fdae94f89ce248cff3d7109bb", size = 2308577, upload-time = "2025-12-10T17:53:08.329Z" }, - { url = "https://files.pythonhosted.org/packages/fc/09/abb8eb3611dcb778c34172be8c91416e1fef3a1df8bdb0b11d8e66cf54cd/grimp-3.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6ee7a2fab52ce0c6ae81fa1f2319bad5bd361110994567477f26be018043d63d", size = 2465683, upload-time = "2025-12-10T17:53:47.815Z" }, - { url = "https://files.pythonhosted.org/packages/97/b8/64d44c6f269421b1fe38df324f082b86cc3ae1c3790340ee89ec4ea3f9c2/grimp-3.14-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6d1434172a02cd97425126260dec80a8fd0491d9467b822d871498199c296c91", size = 2500554, upload-time = "2025-12-10T17:54:01.969Z" }, - { url = "https://files.pythonhosted.org/packages/9d/3c/be6c50b58f4e97ce3c90ba803769ebf7cc08d8f5d760f64df7b8f622a2a2/grimp-3.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9a85bf0a8c4b58db12184fe53a469a7189b4c63397a2eaca0d9efe410f6f68e7", size = 2502900, upload-time = "2025-12-10T17:54:31.478Z" }, - { url = "https://files.pythonhosted.org/packages/cd/31/90daee1de255465216011b1713d6ae22d08c8a1c3463d8f2d76c59f76f0a/grimp-3.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:53d9ed23fb7da4c886affeb6b8bce7c19d8b09f2e1631a482c9446a20d504bdf", size = 2515218, upload-time = "2025-12-10T17:54:46.001Z" }, - { url = "https://files.pythonhosted.org/packages/f8/26/4c20dbbafaf1108e8640985d6a18da684828319c775e10674f15d21620fa/grimp-3.14-cp310-cp310-win32.whl", hash = "sha256:d05110b9afda361ff8d90740a8344ccfd2d59a5a1977d517b9bce178738ed34f", size = 1874010, upload-time = "2025-12-10T17:55:10.458Z" }, - { url = "https://files.pythonhosted.org/packages/91/00/bcfa3bcca8de826c594404d66726150a861aacab8e22715b6f7b8cfe8292/grimp-3.14-cp310-cp310-win_amd64.whl", hash = "sha256:fad2a819756b5c0441b8841c2e6f541960b13edd09b672e6e199232dcf9bcb7a", size = 2014136, upload-time = "2025-12-10T17:55:02.7Z" }, - { url = "https://files.pythonhosted.org/packages/25/31/d4a86207c38954b6c3d859a1fc740a80b04bbe6e3b8a39f4e66f9633dfa4/grimp-3.14-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f1c91e3fa48c2196bf62e3c71492140d227b2bfcd6d15e735cbc0b3e2d5308e0", size = 2185572, upload-time = "2025-12-10T17:53:41.287Z" }, - { url = "https://files.pythonhosted.org/packages/f5/61/ed4cba5bd75d37fe46e17a602f616619a9e4f74ad8adfcf560ce4b2a1697/grimp-3.14-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6291c8f1690a9fe21b70923c60b075f4a89676541999e3d33084cbc69ac06a1", size = 2118002, upload-time = "2025-12-10T17:53:18.546Z" }, - { url = "https://files.pythonhosted.org/packages/77/6a/688f6144d0b207d7845bd8ab403820a83630ce3c9420cbbc7c9e9282f9c0/grimp-3.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ec312383935c2d09e4085c8435780ada2e13ebef14e105609c2988a02a5b2ce", size = 2283939, upload-time = "2025-12-10T17:52:06.228Z" }, - { url = "https://files.pythonhosted.org/packages/a5/98/4c540de151bf3fd58d6d7b3fe2269b6a6af6c61c915de1bc991802bfaff8/grimp-3.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f43cbf640e73ee703ad91639591046828d20103a1c363a02516e77a66a4ac07", size = 2233693, upload-time = "2025-12-10T17:52:18.938Z" }, - { url = "https://files.pythonhosted.org/packages/3e/7b/84b4b52b6c6dd5bf083cb1a72945748f56ea2e61768bbebf87e8d9d0ef75/grimp-3.14-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a93c9fddccb9ff16f5c6b5fca44227f5f86cba7cffc145d2176119603d2d7c7", size = 2389745, upload-time = "2025-12-10T17:53:00.659Z" }, - { url = "https://files.pythonhosted.org/packages/a7/33/31b96907c7dd78953df5e1ce67c558bd6057220fa1203d28d52566315a2e/grimp-3.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5653a2769fdc062cb7598d12200352069c9c6559b6643af6ada3639edb98fcc3", size = 2569055, upload-time = "2025-12-10T17:52:33.556Z" }, - { url = "https://files.pythonhosted.org/packages/b2/24/ce1a8110f3d5b178153b903aafe54b6a9216588b5bff3656e30af43e9c29/grimp-3.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:071c7ddf5e5bb7b2fdf79aefdf6e1c237cd81c095d6d0a19620e777e85bf103c", size = 2358044, upload-time = "2025-12-10T17:52:47.545Z" }, - { url = "https://files.pythonhosted.org/packages/05/7f/16d98c02287bc99884843478b9a68b04a2ef13b5cb8b9f36a9ca7daea75b/grimp-3.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e01b7a4419f535b667dfdcb556d3815b52981474f791fb40d72607228389a31", size = 2310304, upload-time = "2025-12-10T17:53:09.679Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8c/0fde9781b0f6b4f9227d485685f48f6bcc70b95af22e2f85ff7f416cbfc1/grimp-3.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c29682f336151d1d018d0c3aa9eeaa35734b970e4593fa396b901edca7ef5c79", size = 2463682, upload-time = "2025-12-10T17:53:49.185Z" }, - { url = "https://files.pythonhosted.org/packages/51/cb/2baff301c2c2cc2792b6e225ea0784793ca587c81b97572be0bad122cfc8/grimp-3.14-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a5c4fd71f363ea39e8aab0630010ced77a8de9789f27c0acdd0d7e6269d4a8ef", size = 2500573, upload-time = "2025-12-10T17:54:03.899Z" }, - { url = "https://files.pythonhosted.org/packages/96/69/797e4242f42d6665da5fe22cb250cae3f14ece4cb22ad153e9cd97158179/grimp-3.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:766911e3ba0b13d833fdd03ad1f217523a8a2b2527b5507335f71dca1153183d", size = 2503005, upload-time = "2025-12-10T17:54:32.993Z" }, - { url = "https://files.pythonhosted.org/packages/fd/45/da1a27a6377807ca427cd56534231f0920e1895e16630204f382a0df14c5/grimp-3.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:154e84a2053e9f858ae48743de23a5ad4eb994007518c29371276f59b8419036", size = 2515776, upload-time = "2025-12-10T17:54:47.962Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8d/b918a29ce98029cd7a9e33a584be43a93288d5283fb7ccef5b6b2ba39ede/grimp-3.14-cp311-cp311-win32.whl", hash = "sha256:3189c86c3e73016a1907ee3ba9f7a6ca037e3601ad09e60ce9bf12b88877f812", size = 1873189, upload-time = "2025-12-10T17:55:11.872Z" }, - { url = "https://files.pythonhosted.org/packages/90/d7/2327c203f83a25766fbd62b0df3b24230d422b6e53518ff4d1c5e69793f1/grimp-3.14-cp311-cp311-win_amd64.whl", hash = "sha256:201f46a6a4e5ee9dfba4a2f7d043f7deab080d1d84233f4a1aee812678c25307", size = 2014277, upload-time = "2025-12-10T17:55:04.144Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/a35ff62f35aa5fd148053506eddd7a8f2f6afaed31870dc608dd0eb38e4f/grimp-3.14-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ffabc6940301214753bad89ec0bfe275892fa1f64b999e9a101f6cebfc777133", size = 2178573, upload-time = "2025-12-10T17:53:42.836Z" }, - { url = "https://files.pythonhosted.org/packages/93/e2/bd2e80273da4d46110969fc62252e5372e0249feb872bc7fe76fdc7f1818/grimp-3.14-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:075d9a1c78d607792d0ed8d4d3d7754a621ef04c8a95eaebf634930dc9232bb2", size = 2110452, upload-time = "2025-12-10T17:53:19.831Z" }, - { url = "https://files.pythonhosted.org/packages/44/c3/7307249c657d34dca9d250d73ba027d6cfe15a98fb3119b6e5210bc388b7/grimp-3.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06ff52addeb20955a4d6aa097bee910573ffc9ef0d3c8a860844f267ad958156", size = 2283064, upload-time = "2025-12-10T17:52:07.673Z" }, - { url = "https://files.pythonhosted.org/packages/c7/d2/cae4cf32dc8d4188837cc4ab183300d655f898969b0f169e240f3b7c25be/grimp-3.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10e0663e961fcbe8d0f54608854af31f911f164c96a44112d5173050132701f", size = 2235893, upload-time = "2025-12-10T17:52:20.418Z" }, - { url = "https://files.pythonhosted.org/packages/04/92/3f58bc3064fc305dac107d08003ba65713a5bc89a6d327f1c06b30cce752/grimp-3.14-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ab874d7ddddc7a1291259cf7c31a4e7b5c612e9da2e24c67c0eb1a44a624e67", size = 2393376, upload-time = "2025-12-10T17:53:02.397Z" }, - { url = "https://files.pythonhosted.org/packages/06/b8/f476f30edf114f04cb58e8ae162cb4daf52bda0ab01919f3b5b7edb98430/grimp-3.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54fec672ec83355636a852177f5a470c964bede0f6730f9ba3c7b5c8419c9eab", size = 2571342, upload-time = "2025-12-10T17:52:35.214Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ae/2e44d3c4f591f95f86322a8f4dbb5aac17001d49e079f3a80e07e7caaf09/grimp-3.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9e221b5e8070a916c780e88c877fee2a61c95a76a76a2a076396e459511b0bb", size = 2359022, upload-time = "2025-12-10T17:52:49.063Z" }, - { url = "https://files.pythonhosted.org/packages/69/ac/42b4d6bc0ea119ce2e91e1788feabf32c5433e9617dbb495c2a3d0dc7f12/grimp-3.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eea6b495f9b4a8d82f5ce544921e76d0d12017f5d1ac3a3bd2f5ac88ab055b1c", size = 2309424, upload-time = "2025-12-10T17:53:11.069Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c7/6a731989625c1790f4da7602dcbf9d6525512264e853cda77b3b3602d5e0/grimp-3.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:655e8d3f79cd99bb859e09c9dd633515150e9d850879ca71417d5ac31809b745", size = 2462754, upload-time = "2025-12-10T17:53:50.886Z" }, - { url = "https://files.pythonhosted.org/packages/cd/4d/3d1571c0a39a59dd68be4835f766da64fe64cbab0d69426210b716a8bdf0/grimp-3.14-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a14f10b1b71c6c37647a76e6a49c226509648107abc0f48c1e3ecd158ba05531", size = 2501356, upload-time = "2025-12-10T17:54:06.014Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d1/8950b8229095ebda5c54c8784e4d1f0a6e19423f2847289ef9751f878798/grimp-3.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:81685111ee24d3e25f8ed9e77ed00b92b58b2414e1a1c2937236026900972744", size = 2504631, upload-time = "2025-12-10T17:54:34.441Z" }, - { url = "https://files.pythonhosted.org/packages/0a/e6/23bed3da9206138d36d01890b656c7fb7adfb3a37daac8842d84d8777ade/grimp-3.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce8352a8ea0e27b143136ea086582fc6653419aa8a7c15e28ed08c898c42b185", size = 2514751, upload-time = "2025-12-10T17:54:49.384Z" }, - { url = "https://files.pythonhosted.org/packages/eb/45/6f1f55c97ee982f133ec5ccb22fc99bf5335aee70c208f4fb86cd833b8d5/grimp-3.14-cp312-cp312-win32.whl", hash = "sha256:3fc0f98b3c60d88e9ffa08faff3200f36604930972f8b29155f323b76ea25a06", size = 1875041, upload-time = "2025-12-10T17:55:13.326Z" }, - { url = "https://files.pythonhosted.org/packages/cf/cf/03ba01288e2a41a948bc8526f32c2eeaddd683ed34be1b895e31658d5a4c/grimp-3.14-cp312-cp312-win_amd64.whl", hash = "sha256:6bca77d1d50c8dc402c96af21f4e28e2f1e9938eeabd7417592a22bd83cde3c3", size = 2013868, upload-time = "2025-12-10T17:55:05.907Z" }, - { url = "https://files.pythonhosted.org/packages/3b/bd/d12a9c821b79ba31fc52243e564712b64140fc6d011c2bdbb483d9092a12/grimp-3.14-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:af8a625554beea84530b98cc471902155b5fc042b42dc47ec846fa3e32b0c615", size = 2178632, upload-time = "2025-12-10T17:53:44.55Z" }, - { url = "https://files.pythonhosted.org/packages/96/8c/d6620dbc245149d5a5a7a9342733556ba91a672f358259c0ab31d889b56b/grimp-3.14-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0dd1942ffb419ad342f76b0c3d3d2d7f312b264ddc578179d13ce8d5acec1167", size = 2110288, upload-time = "2025-12-10T17:53:21.662Z" }, - { url = "https://files.pythonhosted.org/packages/60/9d/ea51edc4eb295c99786040051c66466bfa235fd1def9f592057b36e03d0f/grimp-3.14-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:537f784ce9b4acf8657f0b9714ab69a6c72ffa752eccc38a5a85506103b1a194", size = 2282197, upload-time = "2025-12-10T17:52:09.304Z" }, - { url = "https://files.pythonhosted.org/packages/28/6e/7db27818ced6a797f976ca55d981a3af5c12aec6aeda12d63965847cd028/grimp-3.14-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:78ab18c08770aa005bef67b873bc3946d33f65727e9f3e508155093db5fa57d6", size = 2235720, upload-time = "2025-12-10T17:52:21.806Z" }, - { url = "https://files.pythonhosted.org/packages/37/26/0e3bbae4826bd6eaabf404738400414071e73ddb1e65bf487dcce17858c4/grimp-3.14-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28ca58728c27e7292c99f964e6ece9295c2f9cfdefc37c18dea0679c783ffb6f", size = 2393023, upload-time = "2025-12-10T17:53:04.149Z" }, - { url = "https://files.pythonhosted.org/packages/49/f2/7da91db5703da34c7ef4c7cddcbb1a8fc30cd85fe54756eba942c6fb27d8/grimp-3.14-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b5577de29c6c5ae6e08d4ca0ac361b45dba323aa145796e6b320a6ea35414b7", size = 2571108, upload-time = "2025-12-10T17:52:36.523Z" }, - { url = "https://files.pythonhosted.org/packages/25/5e/4d6278f18032c7208696edf8be24a4b5f7fad80acc20ffca737344bcecb5/grimp-3.14-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d7d1f9f42306f455abcec34db877e4887ff15f2777a43491f7ccbd6936c449b", size = 2358531, upload-time = "2025-12-10T17:52:50.521Z" }, - { url = "https://files.pythonhosted.org/packages/24/fb/231c32493161ac82f27af6a56965daefa0ec6030fdaf5b948ddd5d68d000/grimp-3.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39bd5c9b7cef59ee30a05535e9cb4cbf45a3c503f22edce34d0aa79362a311a9", size = 2308831, upload-time = "2025-12-10T17:53:12.587Z" }, - { url = "https://files.pythonhosted.org/packages/27/70/f6db325bf5efbbebc9c85cad0af865e821a12a0ba58ee309e938cbd5fedf/grimp-3.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7fec3116b4f780a1bc54176b19e6b9f2e36e2ef3164b8fc840660566af35df88", size = 2462138, upload-time = "2025-12-10T17:53:52.403Z" }, - { url = "https://files.pythonhosted.org/packages/41/2e/cc3fe29cf07f70364018086840c228a190539ab8105147e34588db590792/grimp-3.14-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0233a35a5bbb23688d63e1736b54415fa9994ace8dfeb7de8514ed9dee212968", size = 2501393, upload-time = "2025-12-10T17:54:22.486Z" }, - { url = "https://files.pythonhosted.org/packages/e5/eb/54cada9a726455148da23f64577b5cd164164d23a6449e3fa14551157356/grimp-3.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e46b2fef0f1da7e7e2f8129eb93c7e79db716ff7810140a22ce5504e10ed86df", size = 2504514, upload-time = "2025-12-10T17:54:36.34Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c7/e6afe4f0652df07e8762f61899d1202b73c22c559c804d0a09e5aab2ff17/grimp-3.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e6d9b50623ee1c3d2a1927ec3f5d408995ea1f92f3e91ed996c908bb40e856f", size = 2514018, upload-time = "2025-12-10T17:54:50.76Z" }, - { url = "https://files.pythonhosted.org/packages/75/13/2b8550acc1f010301f02c4fe9664810929fd9277cd032ab608b8534a96fb/grimp-3.14-cp313-cp313-win32.whl", hash = "sha256:fd57c56f5833c99320ec77e8ba5508d56f6fb48ec8032a942f7931cc6ebb80ce", size = 1874922, upload-time = "2025-12-10T17:55:15.239Z" }, - { url = "https://files.pythonhosted.org/packages/46/c7/bc9db5a54ef22972cd17d15ad80a8fee274a471bd3f02300405702d29ea5/grimp-3.14-cp313-cp313-win_amd64.whl", hash = "sha256:173307cf881a126fe5120b7bbec7d54384002e3c83dcd8c4df6ce7f0fee07c53", size = 2013705, upload-time = "2025-12-10T17:55:07.488Z" }, - { url = "https://files.pythonhosted.org/packages/80/7e/02710bf5e50997168c84ac622b10dd41d35515efd0c67549945ad20996a0/grimp-3.14-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebe29f8f13fbd7c314908ed535183a36e6db71839355b04869b27f23c58fa082", size = 2281868, upload-time = "2025-12-10T17:52:10.589Z" }, - { url = "https://files.pythonhosted.org/packages/15/88/2e440c6762cc78bd50582e1b092357d2255f0852ccc6218d8db25170ab31/grimp-3.14-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:073d285b00100153fd86064c7726bb1b6d610df1356d33bb42d3fd8809cb6e72", size = 2230917, upload-time = "2025-12-10T17:52:23.212Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bb/2e7dce129b88f07fc525fe5c97f28cfb7ed7b62c59386d39226b4d08969c/grimp-3.14-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6d6efc37e1728bbfcd881b89467be5f7b046292597b3ebe5f8e44e89ea8b6cb", size = 2571371, upload-time = "2025-12-10T17:52:37.84Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2b/8f1be8294af60c953687db7dec25525d87ed9c2aa26b66dcbe5244abaca2/grimp-3.14-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5337d65d81960b712574c41e85b480d4480bbb5c6f547c94e634f6c60d730889", size = 2356980, upload-time = "2025-12-10T17:52:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/35/ca/ead91e04b3ddd4774ae74601860ea0f0f21bcf6b970b6769ba9571eb2904/grimp-3.14-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:84a7fea63e352b325daa89b0b7297db411b7f0036f8d710c32f8e5090e1fc3ca", size = 2461540, upload-time = "2025-12-10T17:53:53.749Z" }, - { url = "https://files.pythonhosted.org/packages/94/aa/f8a085ff73c37d6e6a37de9f58799a3fea9e16badf267aaef6f11c9a53a3/grimp-3.14-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d0b19a3726377165fe1f7184a8af317734d80d32b371b6c5578747867ab53c0b", size = 2497925, upload-time = "2025-12-10T17:54:23.842Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a3/db3c2d6df07fe74faf5a28fcf3b44fad2831d323ba4a3c2ff66b77a6520c/grimp-3.14-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9caa4991f530750f88474a3f5ecf6ef9f0d064034889d92db00cfb4ecb78aa24", size = 2501794, upload-time = "2025-12-10T17:54:38.05Z" }, - { url = "https://files.pythonhosted.org/packages/e5/de/095f4e3765e7b60425a41e9fbd2b167f8b0acb957cc88c387f631778a09d/grimp-3.14-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1876efc119b99332a5cc2b08a6bdaada2f0ad94b596f0372a497e2aa8bda4d94", size = 2515203, upload-time = "2025-12-10T17:54:52.555Z" }, - { url = "https://files.pythonhosted.org/packages/c6/5f/ee02a3a1237282d324f596a50923bf9d2cb1b1230ef2fef49fb4d3563c2c/grimp-3.14-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3ccf03e65864d6bc7bf1c003c319f5330a7627b3677f31143f11691a088464c2", size = 2177150, upload-time = "2025-12-10T17:53:46.145Z" }, - { url = "https://files.pythonhosted.org/packages/f2/64/2a92889e5fc78e8ef5c548e6a5c6fed78b817eeb0253aca586c28108393a/grimp-3.14-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9ecd58fa58a270e7523f8bec9e6452f4fdb9c21e4cd370640829f1e43fa87a69", size = 2109280, upload-time = "2025-12-10T17:53:23.345Z" }, - { url = "https://files.pythonhosted.org/packages/69/02/5d0b9ab54821e7fbdeb02f3919fa2cb8b9f0c3869fa6e4b969a5766f0ffa/grimp-3.14-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d75d1f8f7944978b39b08d870315174f1ffcd5123be6ccff8ce90467ace648a", size = 2283367, upload-time = "2025-12-10T17:52:11.875Z" }, - { url = "https://files.pythonhosted.org/packages/c2/96/a77c40c92faf7500f42ac019ab8de108b04ffe3db8ec8d6f90416d2322ce/grimp-3.14-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6f70bbb1dd6055d08d29e39a78a11c4118c1778b39d17cd8271e18e213524ca7", size = 2237125, upload-time = "2025-12-10T17:52:24.606Z" }, - { url = "https://files.pythonhosted.org/packages/6a/5e/3e1483721c83057bff921cf454dd5ff3e661ae1d2e63150a380382d116c2/grimp-3.14-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f21b7c003626c902669dc26ede83a91220cf0a81b51b27128370998c2f247b4", size = 2391735, upload-time = "2025-12-10T17:53:05.619Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cb/25fad4a174fe672d42f3e5616761a8120a3b03c8e9e2ae3f31159561968a/grimp-3.14-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80d9f056415c936b45561310296374c4319b5df0003da802c84d2830a103792a", size = 2571388, upload-time = "2025-12-10T17:52:39.337Z" }, - { url = "https://files.pythonhosted.org/packages/29/7e/456df7f6a765ce3f160eb32a0f64ed0c1c3cd39b518555dde02087f9b6e4/grimp-3.14-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0332963cd63a45863775d4237e59dedf95455e0a1ea50c356be23100c5fc1d7c", size = 2359637, upload-time = "2025-12-10T17:52:53.341Z" }, - { url = "https://files.pythonhosted.org/packages/7c/98/3e5005ef21a4e2243f0da489aba86aaaff0bc11d5240d67113482cba88e0/grimp-3.14-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4144350d074f2058fe7c89230a26b34296b161f085b0471a692cb2fe27036f", size = 2308335, upload-time = "2025-12-10T17:53:13.893Z" }, - { url = "https://files.pythonhosted.org/packages/8a/03/4e055f756946d6f71ab7e9d1f8536a9e476777093dd7a050f40412d1a2b1/grimp-3.14-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e148e67975e92f90a8435b1b4c02180b9a3f3d725b7a188ba63793f1b1e445a0", size = 2463680, upload-time = "2025-12-10T17:53:55.507Z" }, - { url = "https://files.pythonhosted.org/packages/26/b9/3c76b7c2e1587e4303a6eff6587c2117c3a7efe1b100cd13d8a4a5613572/grimp-3.14-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1093f7770cb5f3ca6f99fb152f9c949381cc0b078dfdfe598c8ab99abaccda3b", size = 2502808, upload-time = "2025-12-10T17:54:25.383Z" }, - { url = "https://files.pythonhosted.org/packages/20/80/ada10b85ad3125ebedea10256d9c568b6bf28339d2f79d2d196a7b94f633/grimp-3.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a213f45ec69e9c2b28ffd3ba5ab12cc9859da17083ba4dc39317f2083b618111", size = 2504013, upload-time = "2025-12-10T17:54:39.762Z" }, - { url = "https://files.pythonhosted.org/packages/05/45/7c369f749d50b0ceac23cd6874ca4695cc1359a96091c7010301e5c8b619/grimp-3.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f003ac3f226d2437a49af0b6036f26edba57f8a32d329275dbde1b2b2a00a56", size = 2515043, upload-time = "2025-12-10T17:54:54.437Z" }, - { url = "https://files.pythonhosted.org/packages/5c/32/85135fe83826ce11ae56a340d32a1391b91eed94d25ce7bc318019f735de/grimp-3.14-cp314-cp314-win32.whl", hash = "sha256:eec81be65a18f4b2af014b1e97296cc9ee20d1115529bf70dd7e06f457eac30b", size = 1877509, upload-time = "2025-12-10T17:55:17.062Z" }, - { url = "https://files.pythonhosted.org/packages/db/61/e4a2234edecb3bb3cff8963bc4ec5cc482a9e3c54f8df0946d7d90003830/grimp-3.14-cp314-cp314-win_amd64.whl", hash = "sha256:cd3bab6164f1d5e313678f0ab4bf45955afe7f5bdb0f2f481014aa9cca7e81ba", size = 2014364, upload-time = "2025-12-10T17:55:08.896Z" }, - { url = "https://files.pythonhosted.org/packages/16/be/3d304443fbf1df4d60c09668846d0c8a605c6c95646226e41d8f5c3254da/grimp-3.14-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1df33de479be4d620f69633d1876858a8e64a79c07907d47cf3aaf896af057", size = 2281385, upload-time = "2025-12-10T17:52:13.668Z" }, - { url = "https://files.pythonhosted.org/packages/fe/13/493e2648dbb83b3fc517ee675e464beb0154551d726053c7982a3138c6a8/grimp-3.14-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07096d4402e9d5a2c59c402ea3d601f4b7f99025f5e32f077468846fc8d3821b", size = 2231470, upload-time = "2025-12-10T17:52:26.104Z" }, - { url = "https://files.pythonhosted.org/packages/80/84/e772b302385a6b7ec752c88f84ffe35c33d14076245ae27a635aed9c63a2/grimp-3.14-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:712bc28f46b354316af50c469c77953ba3d6cb4166a62b8fb086436a8b05d301", size = 2571579, upload-time = "2025-12-10T17:52:40.889Z" }, - { url = "https://files.pythonhosted.org/packages/69/92/5b23aa7b89c5f4f2cfa636cbeaf33e784378a6b0a823d77a3448670dfacc/grimp-3.14-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abe2bbef1cf8e27df636c02f60184319f138dee4f3a949405c21a4b491980397", size = 2356545, upload-time = "2025-12-10T17:52:54.887Z" }, - { url = "https://files.pythonhosted.org/packages/15/af/bcf2116f4b1c3939ab35f9cdddd9ca59e953e57e9a0ac0c143deaf9f29cc/grimp-3.14-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2f9ae3fabb7a7a8468ddc96acc84ecabd84f168e7ca508ee94d8f32ea9bd5de2", size = 2461022, upload-time = "2025-12-10T17:53:56.923Z" }, - { url = "https://files.pythonhosted.org/packages/81/ce/1a076dce6bc22bca4b9ad5d1bbcd7e1023dcf7bf20ea9404c6462d78f049/grimp-3.14-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:efaf11ea73f7f12d847c54a5d6edcbe919e0369dce2d1aabae6c50792e16f816", size = 2498256, upload-time = "2025-12-10T17:54:27.214Z" }, - { url = "https://files.pythonhosted.org/packages/45/ea/ac735bed202c1c5c019e611b92d3861779e0cfbe2d20fdb0dec94266d248/grimp-3.14-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e089c9ab8aa755ff5af88c55891727783b4eb6b228e7bdf278e17209d954aa1e", size = 2502056, upload-time = "2025-12-10T17:54:41.537Z" }, - { url = "https://files.pythonhosted.org/packages/80/8f/774ce522de6a7e70fbeceeaeb6fbe502f5dfb8365728fb3bb4cb23463da8/grimp-3.14-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a424ad14d5deb56721ac24ab939747f72ab3d378d42e7d1f038317d33b052b77", size = 2515157, upload-time = "2025-12-10T17:54:55.874Z" }, - { url = "https://files.pythonhosted.org/packages/4e/5d/c3f19b63b79a2dea14f0f8e6ba0c48df44518269e74c7f1d81ba996a4244/grimp-3.14-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1d4f96c0159b33647295ad36683fe7be55fa620de6e54e970c913cb88d0a5a6", size = 2285654, upload-time = "2025-12-10T17:52:15.021Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6d/eff77f352b7e4dc42a4db8a6246229d91eb0bd656b05e414f7ae6a768832/grimp-3.14-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e715f78fda0019b493459f97efc48462912b4c5b5d261215d94c05115511d311", size = 2236470, upload-time = "2025-12-10T17:52:29.369Z" }, - { url = "https://files.pythonhosted.org/packages/29/7e/7a4db594ed4d102027457284ded598699e7fed6127915dabb1d541fe4972/grimp-3.14-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d0a885b04edbe908cd6f2f8cb0999dd2a348091d241bd9842f9ea593fabdce5", size = 2571826, upload-time = "2025-12-10T17:52:42.303Z" }, - { url = "https://files.pythonhosted.org/packages/65/c3/42909708a3c85f6c708baa88ac2e65895fac7aeb231d8d68c47ecca19a39/grimp-3.14-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6995b20574313ba66b73d288f431af24b9d23d60c861e8f5cbf0d0e26ad9c49", size = 2359312, upload-time = "2025-12-10T17:52:56.53Z" }, - { url = "https://files.pythonhosted.org/packages/a8/aa/74e8f72667e2b06c50636af945fb7782e326a6cae63d0fc3a26238da1e3d/grimp-3.14-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d2a170deb9f4790221dcde8c47e60be7fcd52999062241ac944ce556efa1d24d", size = 2467674, upload-time = "2025-12-10T17:53:58.827Z" }, - { url = "https://files.pythonhosted.org/packages/d3/b7/a7877641a1abff217c9ae31528ebde6117873c6a64ab4868de5bf98b79a0/grimp-3.14-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1d4a28e2545a83c853a6357ccf4a5105e3f74419a75312b5ebaf0435085cd938", size = 2502271, upload-time = "2025-12-10T17:54:28.708Z" }, - { url = "https://files.pythonhosted.org/packages/13/88/1893d76889db0b4829d536710a9ee272117df7c45450a61750c5641fadeb/grimp-3.14-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9aa74d848c083725add12e0e6d42a01ddfd8ee84e9504ad7254204985e3c5c92", size = 2504368, upload-time = "2025-12-10T17:54:42.995Z" }, - { url = "https://files.pythonhosted.org/packages/50/b7/400c93f07cc651ff8ee7cd40faf42b5ac5447d88dd42dac440e53ba020d1/grimp-3.14-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:acf0acedaf105c8d3747abf073c6a2dd1379bafcb5807926fd6d5fe4b0980698", size = 2516841, upload-time = "2025-12-10T17:54:57.322Z" }, - { url = "https://files.pythonhosted.org/packages/65/cc/dbc00210d0324b8fc1242d8e857757c7e0b62ff0fc0c1bc8dcc42342da85/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c8a8aab9b4310a7e69d7d845cac21cf14563aa0520ea322b948eadeae56d303", size = 2284804, upload-time = "2025-12-10T17:52:16.379Z" }, - { url = "https://files.pythonhosted.org/packages/80/89/851d3d345342e9bcec3fe85d3997db29501fa59f958c1566bf3e24d9d7d9/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d781943b27e5875a41c8f9cfc80f8f0a349f864379192b8c3faa0e6a22593313", size = 2235176, upload-time = "2025-12-10T17:52:30.795Z" }, - { url = "https://files.pythonhosted.org/packages/58/78/5f94702a8d5c121cafcdc9664de34c34f19d0d91a1127bf3946a2631f7a3/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9630d4633607aff94d0ac84b9c64fef1382cdb05b00d9acbde47f8745e264871", size = 2391258, upload-time = "2025-12-10T17:53:06.906Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a2/df8c79de5c9e227856d048cc1551c4742a5f97660c40304ac278bd48607f/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb00e1bcca583668554a8e9e1e4229a1d11b0620969310aae40148829ff6a32", size = 2571443, upload-time = "2025-12-10T17:52:43.853Z" }, - { url = "https://files.pythonhosted.org/packages/f0/21/747b7ed9572bbdc34a76dfec12ce510e80164b1aa06d3b21b34994e5f567/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3389da4ceaaa7f7de24a668c0afc307a9f95997bd90f81ec359a828a9bd1d270", size = 2357767, upload-time = "2025-12-10T17:52:57.84Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e6/485c5e3b64933e71f72f0cc45b0d7130418a6a5a13cedc2e8411bd76f290/grimp-3.14-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd7a32970ef97e42d4e7369397c7795287d84a736d788ccb90b6c14f0561d975", size = 2309069, upload-time = "2025-12-10T17:53:15.203Z" }, - { url = "https://files.pythonhosted.org/packages/31/bd/12024a8cba1c77facc1422a7b48cd0d04c252fc9178fd6f99dc05a8af57b/grimp-3.14-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:fd1278623fa09f62abc0fd8a6500f31b421a1fd479980f44c2926020a0becf02", size = 2466429, upload-time = "2025-12-10T17:54:00.286Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7f/0e5977887e1c8f00f84bb4125217534806ffdcef9cf52f3580aa3b151f4b/grimp-3.14-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:9cfa52c89333d3d8fe9dc782529e888270d060231c3783e036d424044671dde0", size = 2501190, upload-time = "2025-12-10T17:54:30.107Z" }, - { url = "https://files.pythonhosted.org/packages/42/6b/06acb94b6d0d8c7277bb3e33f93224aa3be5b04643f853479d3bf7b23ace/grimp-3.14-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:48a5be4a12fca6587e6885b4fc13b9e242ab8bf874519292f0f13814aecf52cc", size = 2503440, upload-time = "2025-12-10T17:54:44.444Z" }, - { url = "https://files.pythonhosted.org/packages/5b/4d/2e531370d12e7a564f67f680234710bbc08554238a54991cd244feb61fb6/grimp-3.14-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3fcc332466783a12a42cd317fd344c30fe734ba4fa2362efff132dc3f8d36da7", size = 2516525, upload-time = "2025-12-10T17:54:58.987Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, -] - -[[package]] -name = "httpx-sse" -version = "0.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, -] - -[[package]] -name = "hypothesis" -version = "6.152.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "sortedcontainers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/dd/19d273652eb20dac15f32bbc484f2f6d51ccd8fe51fdb27da3f85f9017e8/hypothesis-6.152.7.tar.gz", hash = "sha256:741dedcede2ae0f32c32929a5992804b61f2b0400403b6a51a881a2b58482782", size = 468147, upload-time = "2026-05-13T04:19:34.124Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/1e/8222edaee03c37350eaa726213614e343a62f1e56396dd000ad9277bfa3d/hypothesis-6.152.7-py3-none-any.whl", hash = "sha256:c0b17dd428fcb6e962f60315f6f4a77816c72fbb281ce9ba73699dabead5ec82", size = 533802, upload-time = "2026-05-13T04:19:30.635Z" }, -] - -[[package]] -name = "identify" -version = "2.6.19" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, -] - -[[package]] -name = "idna" -version = "3.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" }, -] - -[[package]] -name = "import-linter" -version = "2.11" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "grimp" }, - { name = "rich" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ba/66/55b697a17bb15c6cb88d97d73716813f5427281527b90f02cc0a600abc6e/import_linter-2.11.tar.gz", hash = "sha256:5abc3394797a54f9bae315e7242dc98715ba485f840ac38c6d3192c370d0085e", size = 1153682, upload-time = "2026-03-06T12:11:38.198Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/aa/2ed2c89543632ded7196e0d93dcc6c7fe87769e88391a648c4a298ea864a/import_linter-2.11-py3-none-any.whl", hash = "sha256:3dc54cae933bae3430358c30989762b721c77aa99d424f56a08265be0eeaa465", size = 637315, upload-time = "2026-03-06T12:11:36.599Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.26.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, -] - -[[package]] -name = "librt" -version = "0.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/40/08/9e7f6b5d2b5bed6ad055cdd5925f192bb403a51280f86b56554d9d0699a2/librt-0.11.0.tar.gz", hash = "sha256:075dc3ef4458a278e0195cbf6ac9d38808d9b906c5a6c7f7f79c3888276a3fb1", size = 200139, upload-time = "2026-05-10T18:17:25.138Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/10/37fd9e9ba96cb0bd742dfb20fc3d082e54bdbec759d7300df927f360ef07/librt-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6e94ebfcfa2d5e9926d6c3b9aa4617ffc42a845b4321fb84021b872358c82a0f", size = 141706, upload-time = "2026-05-10T18:15:16.129Z" }, - { url = "https://files.pythonhosted.org/packages/cf/72/1b1466f358e4a0b728051f69bc27e67b432c6eaa2e05b88db49d3785ae0d/librt-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae627397a2f351560440d872d6f7c8dbb4072e57868e7b2fc5b8b430fe489d45", size = 142605, upload-time = "2026-05-10T18:15:18.148Z" }, - { url = "https://files.pythonhosted.org/packages/ca/85/ed26dd2f6bc9a0baf48306433e579e8d354d70b2bcb78134ed950a5d0e1e/librt-0.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc329359321b67d24efdf4bc69012b0597001649544db662c001db5a0184794c", size = 476555, upload-time = "2026-05-10T18:15:19.569Z" }, - { url = "https://files.pythonhosted.org/packages/66/fe/11891191c0e0a3fd617724e891f6e67a71a7658974a892b9a9a97fdb2977/librt-0.11.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:7e82e642ab0f7608ce2fe53d76ca2280a9ee33a1b06556142c7c6fe80a86fc33", size = 468434, upload-time = "2026-05-10T18:15:20.87Z" }, - { url = "https://files.pythonhosted.org/packages/6f/50/5ec949d7f9ce1a07af903aa3e13abb98b717923bdead6e719b2f824ccc07/librt-0.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88145c15c67731d54283d135b03244028c750cc9edc334a96a4f5950ebdb2884", size = 496918, upload-time = "2026-05-10T18:15:22.616Z" }, - { url = "https://files.pythonhosted.org/packages/ea/c4/177336c7524e34875a38bf668e88b193a6723a4eb4045d07f74df6e1506c/librt-0.11.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9d36a51b3d93320b686588e27123f4995804dbf1bce81df78c02fc3c6eea9280", size = 490334, upload-time = "2026-05-10T18:15:24.2Z" }, - { url = "https://files.pythonhosted.org/packages/13/1f/da3112f7569eda3b49f9a2629bae1fe059812b6085df16c885f6454dff49/librt-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3ac06a2a8b246327f11e186a53a100a4d5c7ed52346367e5ec751d51586c", size = 511287, upload-time = "2026-05-10T18:15:26.226Z" }, - { url = "https://files.pythonhosted.org/packages/fa/94/03fec301522e172d105581431223be56b27594ff46440ebfbb658a3735d5/librt-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:461bbceede621f1ffb8839755f8663e886087ee7af16294cab7fb4d782c62eeb", size = 517202, upload-time = "2026-05-10T18:15:27.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/6e/339f6e5a7b413ce014f1917a756dae630fe59cc99f34153205b1cb540901/librt-0.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0cad8a4d6a8ff03c9b76f9414caccd78e7cfbc8a2e12fa334d8e1d9932753783", size = 497517, upload-time = "2026-05-10T18:15:29.614Z" }, - { url = "https://files.pythonhosted.org/packages/cd/43/acdd5ce317cb46e8253ca9bfbdb8b12e68a24d745949336a7f3d5fb79ba0/librt-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f37aa505b3cf60701562eddb32df74b12a9e380c207fd8b06dd157a943ac7ea0", size = 538878, upload-time = "2026-05-10T18:15:30.928Z" }, - { url = "https://files.pythonhosted.org/packages/29/b5/7a25bb12e3172839f647f196b3e988318b7bb1ca7501732a225c4dce2ec0/librt-0.11.0-cp310-cp310-win32.whl", hash = "sha256:94663a21534637f0e787ec2a2a756022df6e5b7b2335a5cdd7d8e33d68a2af89", size = 100070, upload-time = "2026-05-10T18:15:32.551Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0d/ebbcf4d77999c02c937b05d2b90ff4cd4dcc7e9a365ba132329ac1fe7a0f/librt-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:dec7db73758c2b54953fd8b7fe348c45188fe26b39ee18446196edd08453a5d4", size = 117918, upload-time = "2026-05-10T18:15:33.678Z" }, - { url = "https://files.pythonhosted.org/packages/fe/87/2bf31fe17587b29e3f93ec31421e2b1e1c3e349b8bf6c7c313dbad1d5340/librt-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:93d95bd45b7d58343d8b90d904450a545144eec19a002511163426f8ab1fae29", size = 141092, upload-time = "2026-05-10T18:15:34.795Z" }, - { url = "https://files.pythonhosted.org/packages/cf/08/5c5bf772920b7ebac6e32bc91a643e0ab3870199c0b542356d3baa83970a/librt-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ee278c769a713638cdacd4c0436d72156e75df3ebc0166ab2b9dc43acc386c9", size = 142035, upload-time = "2026-05-10T18:15:36.242Z" }, - { url = "https://files.pythonhosted.org/packages/06/20/662a03d254e5b000d838e8b345d83303ddb768c080fd488e40634c0fa66b/librt-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f230cb1cbc9faaa616f9a678f530ebcf186e414b6bcbd88b960e4ba1b92428d5", size = 475022, upload-time = "2026-05-10T18:15:37.56Z" }, - { url = "https://files.pythonhosted.org/packages/de/f3/aa81523e45184c6ec23dc7f63263362ec55f80a09d424c012359ecbe7e35/librt-0.11.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5d63c855d86938d9de93e265c9bd8c705b51ec494de5738340ee93767a686e4b", size = 467273, upload-time = "2026-05-10T18:15:39.182Z" }, - { url = "https://files.pythonhosted.org/packages/6b/6f/59c74b560ca8853834d5501d589c8a2519f4184f273a085ffd0f37a1cc47/librt-0.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f028be9e96a08d31df3479ac80d99be374d17f3b78e4796b3fd3c913d4e89", size = 497083, upload-time = "2026-05-10T18:15:40.634Z" }, - { url = "https://files.pythonhosted.org/packages/fe/7b/5aa4d2c9600a719401160bf7055417df0b2a47439b9d88286ce45e56b65f/librt-0.11.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:258d73a0aa66a055e65b2e4d1b8cdb23b9d132c5bb915d9547d804fcaed116cc", size = 489139, upload-time = "2026-05-10T18:15:41.934Z" }, - { url = "https://files.pythonhosted.org/packages/d6/31/9143803d7da6856a69153785768c4936864430eec0fd9461c3ea527d9922/librt-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0827efe7854718f04aaddf6496e96960a956e676fe1d0f04eb41511fd8ad06d5", size = 508442, upload-time = "2026-05-10T18:15:43.206Z" }, - { url = "https://files.pythonhosted.org/packages/2f/5a/bce08184488426bda4ccc2c4964ac048c8f68ae89bd7120082eef4233cfd/librt-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7753e57d6e12d019c0d8786f1c09c709f4c3fcc57c3887b24e36e6c06ec938b7", size = 514230, upload-time = "2026-05-10T18:15:44.761Z" }, - { url = "https://files.pythonhosted.org/packages/89/8c/bb5e213d254b7505a0e658da199d8ab719086632ce09eef311ab27976523/librt-0.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11bd19822431cc21af9f27374e7ae2e58103c7d98bda823536a6c47f6bb2bb3d", size = 494231, upload-time = "2026-05-10T18:15:46.308Z" }, - { url = "https://files.pythonhosted.org/packages/9d/fb/541cdad5b1ab1300398c74c4c9a497b88e5074c21b1244c8f49731d3a284/librt-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:22bdf239b219d3993761a148ffa134b19e52e9989c84f845d5d7b71d70a17412", size = 537585, upload-time = "2026-05-10T18:15:47.629Z" }, - { url = "https://files.pythonhosted.org/packages/8f/f2/464bb69295c320cb06bddb4f14a4ec67934ee14b2bffb12b19fb7ab287ba/librt-0.11.0-cp311-cp311-win32.whl", hash = "sha256:46c60b61e308eb535fbd6fa622b1ee1bb2815691c1ad9c98bf7b84952ec3bc8d", size = 100509, upload-time = "2026-05-10T18:15:49.157Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e7/a17ee1788f9e4fbf548c19f4afa07c92089b9e24fef6cb2410863781ef4c/librt-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:902e546ff044f579ff1c953ff5fce97b636fe9e3943996b2177710c6ef076f73", size = 118628, upload-time = "2026-05-10T18:15:50.345Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c7/6c766214f9f9903bcfcfbef97d807af8d8f5aa3502d247858ab17582d212/librt-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:65ac3bc20f78aa0ee5ae84baa68917f89fef4af63e941084dd019a0d0e749f0c", size = 103122, upload-time = "2026-05-10T18:15:52.068Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d0/07c77e067f0838949b43bd89232c29d72efebb9d2801a9750184eb706b71/librt-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b87504f1690a23b9a2cca841191a04f83895d4fc2dd04df91d82b1a04ca2ad46", size = 144147, upload-time = "2026-05-10T18:15:53.227Z" }, - { url = "https://files.pythonhosted.org/packages/7a/24/8493538fa4f62f982686398a5b8f68008138a75086abdea19ade64bf4255/librt-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40071fc5fe0ce8daa6de616702314a01e1250711682b0523d6ab8d4525910cb3", size = 143614, upload-time = "2026-05-10T18:15:54.657Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1e/f8bad050810d9171f34a1648ed910e56814c2ba61639f2bd53c6377ae24b/librt-0.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:137e79445c896a0ea7b265f52d23954e05b64222ee1af69e2cb34219067cbb67", size = 485538, upload-time = "2026-05-10T18:15:56.117Z" }, - { url = "https://files.pythonhosted.org/packages/c0/fe/3594ebfbaf03084ba4b120c9ba5c3183fd938a48725e9bbe6ff0a5159ad8/librt-0.11.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:cca6644054e78746d8d4ef238681f9c34ff8b584fe6b988ecebb8db3b15e622a", size = 479623, upload-time = "2026-05-10T18:15:57.544Z" }, - { url = "https://files.pythonhosted.org/packages/b0/da/5d1876984b3746c85dbd219dbfcb73c85f54ee263fd32e5b2a632ec14571/librt-0.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5b0eea49f5562861ee8d757a32ef7d559c1d35be2aaaa1ec28941d74c9ffc8a", size = 513082, upload-time = "2026-05-10T18:15:58.805Z" }, - { url = "https://files.pythonhosted.org/packages/19/6e/55bdf5d5ca00c3e18430690bf2c953d8d3ffd3c337418173d33dec985dc9/librt-0.11.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0d1029d7e1ae1a7e647ed6fb5df8c4ce2dffefb7a9f5fd1376a4554d96dac09f", size = 508105, upload-time = "2026-05-10T18:16:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/f1f23a7c595ee90ece4d35c851e5d104b1311a887ed1b4ac4c35bbd13da8/librt-0.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bc3ce6b33c5828d9e80592011a5c584cb2ce86edbc4088405f70da47dc1d1b3b", size = 522268, upload-time = "2026-05-10T18:16:01.708Z" }, - { url = "https://files.pythonhosted.org/packages/b6/02/5720f5697a7f54b78b3aefbe20df3a48cedcff1276618c4aa481177942ed/librt-0.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:936c5995f3514a42111f20099397d8177c79b4d7e70961e396c6f5a0a3566766", size = 527348, upload-time = "2026-05-10T18:16:03.496Z" }, - { url = "https://files.pythonhosted.org/packages/50/db/b4a47c6f91db4ff76348a0b3dd0cc65e090a078b765a810a62ff9434c3d3/librt-0.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9bc0ca6ad9381cbe8e4aa6e5726e4c80c78115a6e9723c599ed1d73e092bc49d", size = 516294, upload-time = "2026-05-10T18:16:05.173Z" }, - { url = "https://files.pythonhosted.org/packages/9e/58/9384b2f4eb1ed1d273d40948a7c5c4b2360213b402ef3be4641c06299f9c/librt-0.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:070aa8c26c0a74774317a72df8851facc7f0f012a5b406557ac56992d92e1ec8", size = 553608, upload-time = "2026-05-10T18:16:06.839Z" }, - { url = "https://files.pythonhosted.org/packages/21/7b/5aa8848a7c6a9278c79375146da1812e695754ceec5f005e6043461a7315/librt-0.11.0-cp312-cp312-win32.whl", hash = "sha256:6bf14feb84b05ae945277395451998c89c54d0def4070eb5c08de544930b245a", size = 101879, upload-time = "2026-05-10T18:16:08.103Z" }, - { url = "https://files.pythonhosted.org/packages/37/33/8a745436944947575b584231750a41417de1a38cf6a2e9251d1065651c09/librt-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:75672f0bc524ede266287d532d7923dbce94c7514ad07627bac3d0c6d92cc4d9", size = 119831, upload-time = "2026-05-10T18:16:09.174Z" }, - { url = "https://files.pythonhosted.org/packages/59/67/a6739ac96e28b7855808bdb0370e250606104a859750d209e5a0716fe7ab/librt-0.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f10cf143e4a9bb0f4f5af568a00df94a2d69ef41c2579584454bb0fe5cc642c", size = 103470, upload-time = "2026-05-10T18:16:10.369Z" }, - { url = "https://files.pythonhosted.org/packages/82/61/e59168d4d0bf2bf90f4f0caf7a001bfc60254c3af4586013b04dc3ef517b/librt-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78dc31f7fdfe9c9d0eb0e8f42d139db230e826415bbcabd9f0e9faaaee909894", size = 144119, upload-time = "2026-05-10T18:16:11.771Z" }, - { url = "https://files.pythonhosted.org/packages/61/fd/caa1d60b12f7dd79ccea23054e06eeaebe266a5f52c40a6b651069200ce5/librt-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fa475675db22290c3158e1d42326d0f5a65f04f44a0e68c3630a25b53560fb9c", size = 143565, upload-time = "2026-05-10T18:16:13.334Z" }, - { url = "https://files.pythonhosted.org/packages/b8/a9/dc744f5c2b4978d48db970be29f22716d3413d28b14ad99740817315cf2c/librt-0.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:621db29691044bdeda22e789e482e1b0f3a985d90e3426c9c6d17606416205ea", size = 485395, upload-time = "2026-05-10T18:16:14.729Z" }, - { url = "https://files.pythonhosted.org/packages/8f/21/7f8e97a1e4dae952a5a95948f6f8507a173bc1e669f54340bba6ca1ca31b/librt-0.11.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:a9010e2ed5b3a9e158c5fd966b3ab7e834bb3d3aacc8f66c91dd4b57a3799230", size = 479383, upload-time = "2026-05-10T18:16:16.321Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6d/d8ee9c114bebf2c50e29ec2aa940826fccb62a645c3e4c18760987d0e16d/librt-0.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c39513d8b7477a2e1ed8c43fc21c524e8d5a0f8d4e8b7b074dbdbe7820a08e2", size = 513010, upload-time = "2026-05-10T18:16:17.647Z" }, - { url = "https://files.pythonhosted.org/packages/f0/43/0b5708af2bd30a46400e72ba6bdaa8f066f15fb9a688527e34220e8d6c06/librt-0.11.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7aef3cf1d5af86e770ab04bfd993dfc4ae8b8c17f66fb77dd4a7d50de7bbb1a3", size = 508433, upload-time = "2026-05-10T18:16:19.309Z" }, - { url = "https://files.pythonhosted.org/packages/4a/50/356187247d09013490481033183b3532b58acf8028bcb34b2b56a375c9b2/librt-0.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:557183ddc36babe46b27dd60facbd5adb4492181a5be887587d57cda6e092f21", size = 522595, upload-time = "2026-05-10T18:16:20.642Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/c6ac4240899c7f3248079d5a9900debe0dadb3fdeaf856684c987105ba47/librt-0.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83d3e1f72bd42f6c5c0b7daec530c3f829bd02db42c70b8ddf0c2d90a2459930", size = 527255, upload-time = "2026-05-10T18:16:22.352Z" }, - { url = "https://files.pythonhosted.org/packages/eb/b5/a81322dbeedeeaf9c1ee6f001734d28a09d8383ac9e6779bc24bbd0743c6/librt-0.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4ce1f21fbe589bc1afd7872dece84fb0e1144f794a288e58a10d2c54a55c43be", size = 516847, upload-time = "2026-05-10T18:16:23.627Z" }, - { url = "https://files.pythonhosted.org/packages/ae/66/6e6323787d592b55204a42595ff1102da5115601b53a7e9ddebc889a6da5/librt-0.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b09f7044ea2b64c9da42fd3d335666518cfd1c6e8a182c95da73d0214b41e", size = 553920, upload-time = "2026-05-10T18:16:25.025Z" }, - { url = "https://files.pythonhosted.org/packages/9c/21/623f8ca230857102066d9ca8c6c1734995908c4d0d1bee7bb2ef0021cb33/librt-0.11.0-cp313-cp313-win32.whl", hash = "sha256:78fddc31cd4d3caa897ad5d31f856b1faadc9474021ad6cb182b9018793e254e", size = 101898, upload-time = "2026-05-10T18:16:26.649Z" }, - { url = "https://files.pythonhosted.org/packages/b3/1d/b4ebd44dd723f768469007515cb92251e0ae286c94c140f374801140fa74/librt-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ca8aa88751a775870b764e93bad5135385f563cb8dcee399abf034ea4d3cb47", size = 119812, upload-time = "2026-05-10T18:16:27.859Z" }, - { url = "https://files.pythonhosted.org/packages/3b/e4/b2f4ca7965ca373b491cdb4bc25cdb30c1649ca81a8782056a83850292a9/librt-0.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:96f044bb325fd9cf1a723015638c219e9143f0dfbc0ca54c565df2b7fc748b44", size = 103448, upload-time = "2026-05-10T18:16:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/29/eb/dbce197da4e227779e56b5735f2decc3eb36e55a1cdbf1bd65d6639d76c1/librt-0.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4a017a95e5837dc15a8c5661d60e05daa96b90908b1aa6b7acdf443cd25c8ebd", size = 143345, upload-time = "2026-05-10T18:16:30.674Z" }, - { url = "https://files.pythonhosted.org/packages/76/a3/254bebd0c11c8ba684018efb8006ff22e466abce445215cca6c778e7d9de/librt-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b1ecbd9819deccc39b7542bf4d2a740d8a620694d39989e58661d3763458f8d4", size = 143131, upload-time = "2026-05-10T18:16:32.037Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3f/f77d6122d21ac7bf6ae8a7dfced1bd2a7ac545d3273ebdcaf8042f6d619f/librt-0.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7da327dacd7be8f8ec36547373550744a3cc0e536d54665cd83f8bcd961200e8", size = 477024, upload-time = "2026-05-10T18:16:33.493Z" }, - { url = "https://files.pythonhosted.org/packages/ac/0a/2c996dadebaa7d9bbbd43ef2d4f3e66b6da545f838a41694ef6172cebec8/librt-0.11.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:0dc56b1f8d06e60db362cc3fdae206681817f86ce4725d34511473487f12a34b", size = 474221, upload-time = "2026-05-10T18:16:34.864Z" }, - { url = "https://files.pythonhosted.org/packages/0a/7e/f5d92af8486b8272c23b3e686b46ff72d89c8169585eb61eef01a2ac7147/librt-0.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05fb8fb2ab90e21c8d12ea240d744ad514da9baf381ebfa70d91d20d21713175", size = 505174, upload-time = "2026-05-10T18:16:36.705Z" }, - { url = "https://files.pythonhosted.org/packages/af/1a/cb0734fe86398eb33193ab753b7326255c74cac5eb09e76b9b16536e7adb/librt-0.11.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cae74872be221df4374d10fec61f93ed1513b9546ea84f2c0bf73ab3e9bd0b03", size = 497216, upload-time = "2026-05-10T18:16:38.418Z" }, - { url = "https://files.pythonhosted.org/packages/18/06/094820f91558b66e29943c0ec41c9914f460f48dd51fc503c3101e10842d/librt-0.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:32bcc918c0148eb7e3d57385125bac7e5f9e4359d05f07448b09f6f778c2f31c", size = 513921, upload-time = "2026-05-10T18:16:39.848Z" }, - { url = "https://files.pythonhosted.org/packages/0b/c2/00de9018871a282f530cacb457d5ec0428f6ac7e6fedde9aff7468d9fb04/librt-0.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f9743fc99135d5f78d2454435615f6dec0473ca507c26ce9d92b10b562a280d3", size = 520850, upload-time = "2026-05-10T18:16:41.471Z" }, - { url = "https://files.pythonhosted.org/packages/51/9d/64631832348fd1834fb3a61b996434edddaaf25a31d03b0a76273159d2cf/librt-0.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5ba067f4aadae8fda802d91d2124c90c42195ff32d9161d3549e6d05cfe26f96", size = 504237, upload-time = "2026-05-10T18:16:43.15Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ec/ae5525eb16edc827a044e7bb8777a455ff95d4bca9379e7e6bddd7383647/librt-0.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:de3bf945454d032f9e390b85c4072e0a0570bf825421c8be0e71209fa65e1abe", size = 546261, upload-time = "2026-05-10T18:16:44.408Z" }, - { url = "https://files.pythonhosted.org/packages/5a/09/adce371f27ca039411da9659f7430fcc2ba6cd0c7b3e4467a0f091be7fa9/librt-0.11.0-cp314-cp314-win32.whl", hash = "sha256:d2277a05f6dcb9fd13db9566aac4fabd68c3ea1ea46ee5567d4eef8efa495a2f", size = 96965, upload-time = "2026-05-10T18:16:46.039Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ee/8ac720d98548f173c7ce2e632a7ca94673f74cacd5c8162a84af5b35958a/librt-0.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:ab73e8db5e3f564d812c1f5c3a175930a5f9bc96ccb5e3b22a34d7858b401cf7", size = 115151, upload-time = "2026-05-10T18:16:47.133Z" }, - { url = "https://files.pythonhosted.org/packages/94/20/c900cf14efeb09b6bef2b2dff20779f73464b97fd58d1c6bccc379588ae3/librt-0.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:aea3caa317752e3a466fa8af45d91ee0ea8c7fdd96e42b0a8dd9b76a7931eba1", size = 98850, upload-time = "2026-05-10T18:16:48.597Z" }, - { url = "https://files.pythonhosted.org/packages/0c/71/944bfe4b64e12abffcd3c15e1cce07f72f3d55655083786285f4dedeb532/librt-0.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d1b36540d7aaf9b9101b3a6f376c8d8e9f7a9aec93ed05918f2c69d493ffef72", size = 151138, upload-time = "2026-05-10T18:16:49.839Z" }, - { url = "https://files.pythonhosted.org/packages/b6/10/99e64a5c86989357fda078c8143c533389585f6473b7439172dd8f3b3b2d/librt-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:efbb343ab2ce3540f4ecbe6315d677ed70f37cd9a72b1e58066c918ca83acbaa", size = 151976, upload-time = "2026-05-10T18:16:51.062Z" }, - { url = "https://files.pythonhosted.org/packages/21/31/5072ad880946d83e5ea4147d6d018c78eefce85b77819b19bdd0ee229435/librt-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0dd688aab3f7914d3e6e5e3554978e0383312fb8e771d84be008a35b9ee548", size = 557927, upload-time = "2026-05-10T18:16:52.632Z" }, - { url = "https://files.pythonhosted.org/packages/5e/8d/70b5fb7cfbab60edbe7381614ab985da58e144fbf465c86d44c95f43cdca/librt-0.11.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f5fb36b8c6c63fdcbb1d526d94c0d1331610d43f4118cc1beb4efef4f3faacb2", size = 539698, upload-time = "2026-05-10T18:16:53.934Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a3/ba3495a0b3edbd24a4cae0d1d3c64f39a9fc45d06e812101289b50c1a619/librt-0.11.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a9a237d13addb93715b6fee74023d5ee3469b53fce527626c0e088aa585805f", size = 577162, upload-time = "2026-05-10T18:16:55.589Z" }, - { url = "https://files.pythonhosted.org/packages/f7/db/36e25fb81f99937ff1b96612a1dc9fd66f039cb9cc3aee12c01fac31aab9/librt-0.11.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5ddd17bd87b2c56ddd60e546a7984a2e64c4e8eab92fb4cf3830a48ad5469d51", size = 566494, upload-time = "2026-05-10T18:16:56.975Z" }, - { url = "https://files.pythonhosted.org/packages/33/0d/3f622b47f0b013eeb9cf4cc07ae9bfe378d832a4eec998b2b209fe84244d/librt-0.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd43992b4473d42f12ff9e68326079f0696d9d4e6000e8f39a0238d482ba6ee2", size = 596858, upload-time = "2026-05-10T18:16:58.374Z" }, - { url = "https://files.pythonhosted.org/packages/a9/02/71b90bc93039c46a2000651f6ad60122b114c8f54c4ad306e0e96f5b75ad/librt-0.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:f8e3e8056dd674e279741485e2e512d6e9a751c7455809d0114e6ebf8d781085", size = 590318, upload-time = "2026-05-10T18:16:59.676Z" }, - { url = "https://files.pythonhosted.org/packages/04/04/418cb3f75621e2b761fb1ab0f017f4d70a1a72a6e7c74ee4f7e8d198c2f3/librt-0.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c1f708d8ae9c56cf38a903c44297243d2ec83fd82b396b977e0144a3e76217e3", size = 575115, upload-time = "2026-05-10T18:17:01.007Z" }, - { url = "https://files.pythonhosted.org/packages/cc/2c/5a2183ac58dd911f26b5d7e7d7d8f1d87fcecdddd99d6c12169a258ff62c/librt-0.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0add982e0e7b9fc14cf4b33789d5f13f66581889b88c2f58099f6ce8f92617bd", size = 617918, upload-time = "2026-05-10T18:17:02.682Z" }, - { url = "https://files.pythonhosted.org/packages/15/1f/dc6771a52592a4451be6effa200cbfc9cec61e4393d3033d81a9d307961d/librt-0.11.0-cp314-cp314t-win32.whl", hash = "sha256:2b481d846ac894c4e8403c5fd0e87c5d11d6499e404b474602508a224ff531c8", size = 103562, upload-time = "2026-05-10T18:17:03.99Z" }, - { url = "https://files.pythonhosted.org/packages/62/4a/7d1415567027286a75ba1093ec4aca11f073e0f559c530cf3e0a757ad55c/librt-0.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:28edb433edde181112a908c78907af28f964eabc15f4dd16c9d66c834302677c", size = 124327, upload-time = "2026-05-10T18:17:05.465Z" }, - { url = "https://files.pythonhosted.org/packages/ce/62/b40b382fa0c66fee1478073eb8db352a4a6beda4a1adccf1df911d8c289c/librt-0.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dee008f20b542e3cd162ba338a7f9ec0f6d23d395f66fe8aeeec3c9d067ea253", size = 102572, upload-time = "2026-05-10T18:17:06.809Z" }, -] - -[[package]] -name = "mando" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/35/24/cd70d5ae6d35962be752feccb7dca80b5e0c2d450e995b16abd6275f3296/mando-0.7.1.tar.gz", hash = "sha256:18baa999b4b613faefb00eac4efadcf14f510b59b924b66e08289aa1de8c3500", size = 37868, upload-time = "2022-02-24T08:12:27.316Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl", hash = "sha256:26ef1d70928b6057ee3ca12583d73c63e05c49de8972d620c278a7b206581a8a", size = 28149, upload-time = "2022-02-24T08:12:25.24Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "4.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, -] - -[[package]] -name = "mcp" -version = "1.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "httpx" }, - { name = "httpx-sse" }, - { name = "jsonschema" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "pyjwt", extra = ["crypto"] }, - { name = "python-multipart" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, - { name = "sse-starlette" }, - { name = "starlette" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, - { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "mypy" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ast-serialize" }, - { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, - { name = "mypy-extensions" }, - { name = "pathspec" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/82/15/cca9d88503549ed6fedeaa1d448cdddd542ee8a490232d732e278036fbf2/mypy-2.1.0.tar.gz", hash = "sha256:81e76ad12c2d804512e9b13240d1588316531bfba07558286078bfbce9613633", size = 3898359, upload-time = "2026-05-11T18:37:36.237Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/71/d351dca3e9b30da2328ee9d445c88b8388072808ebfbc49eb69d30b67749/mypy-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:11a6beb180257a805961aea9ec591bbd0bd17f1e18d35b8456d57aee5bedfedc", size = 14778792, upload-time = "2026-05-11T18:36:23.605Z" }, - { url = "https://files.pythonhosted.org/packages/2f/45/7d51594b644c17c0bcf74ed8cd5fc33b324276d708e8506f220b70dab9d9/mypy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ef78c1d306bbf9a8a12f526c44902c9c28dffd6c52c52bf6a72641ce18d3849", size = 13645739, upload-time = "2026-05-11T18:37:22.752Z" }, - { url = "https://files.pythonhosted.org/packages/65/01/455c31b170e9468265074840bf18863a8482a24103fdaabe4e199392aa5f/mypy-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c209a90853081ff01d01ee895cafe10f7db1474e0d95beaeef0f6c1db9119bbd", size = 14074199, upload-time = "2026-05-11T18:35:09.292Z" }, - { url = "https://files.pythonhosted.org/packages/41/5a/93093f0b29a9e982deafde698f740a2eb2e05886e79ccf0594c7fd5413a3/mypy-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47cebf61abde7c088a4e27718a8b13a81655686b2e9c251f5c0915a802248166", size = 14953128, upload-time = "2026-05-11T18:31:57.678Z" }, - { url = "https://files.pythonhosted.org/packages/7f/2f/a196f5331d96170ad3d28f144d2aba690d4b2911381f68d51e489c7ab82a/mypy-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d57a90ae5e872138a425ec328edbc9b235d1934c4377881a33ec05b341acc9a8", size = 15249378, upload-time = "2026-05-11T18:33:00.101Z" }, - { url = "https://files.pythonhosted.org/packages/54/de/94d321cc12da9f71341ac0c270efbed5c725750c7b4c334d957de9a087d9/mypy-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:aea7f7a8a55b459c34275fc468ada6ca7c173a5e43a68f5dbe588a563d8a06b8", size = 11060994, upload-time = "2026-05-11T18:33:18.848Z" }, - { url = "https://files.pythonhosted.org/packages/e1/62/0c27ca55219a7c764a7fb88c7bb2b7b2f9780ade8bbf16bc8ed8400eef6b/mypy-2.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c989640253f0d76843e9c6c1bbf4bd48c5e85ada61bde4beb37cb3eca035685e", size = 9976743, upload-time = "2026-05-11T18:31:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a1/639f3024794a2a15899cb90707fe02e044c4412794c39c5769fd3df2e2ef/mypy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a683016b16fe2f572dc04c72be7ee0504ac1605a265d0200f5cea695fb788f41", size = 14691685, upload-time = "2026-05-11T18:33:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/3b/08/9a585dea4325f20d8b80dc78623fa50d1fd2173b710f6237afd6ba6ab39b/mypy-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a293c534adb55271fef24a26da04b855540a8c13cc07bc5917b9fd2c394f2ca", size = 13555165, upload-time = "2026-05-11T18:32:16.107Z" }, - { url = "https://files.pythonhosted.org/packages/81/dc/7c42cc9c6cb01e8eb09961f1f738741d3e9c7e9d5c5b30ec69222625cd5f/mypy-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7406f4d048e71e576f5356d317e5b0a9e666dfd966bd99f9d14ca06e1a341538", size = 13994376, upload-time = "2026-05-11T18:32:39.256Z" }, - { url = "https://files.pythonhosted.org/packages/d4/fa/285946c33bce716e082c11dfeee9ee196eaf1f5042efb3581a31f9f205e4/mypy-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0210d626fc8b31ccc90233754c7bc90e1f43205e85d96387f7db1285b55c398", size = 14864618, upload-time = "2026-05-11T18:34:49.765Z" }, - { url = "https://files.pythonhosted.org/packages/2b/83/82397f48af6c27e295d57979ded8490c9829040152cf7571b2f026aeb9a0/mypy-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3712c20deed54e814eaaa825603bada8ea1c390670a397c95b98405347acc563", size = 15102063, upload-time = "2026-05-11T18:34:05.855Z" }, - { url = "https://files.pythonhosted.org/packages/40/68/b02dec39057b88eb03dc0aa854732e26e8361f34f9d0e20c7614967d1eba/mypy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fcaa0e479066e31f7cceb6a3bea39cb22b2ff51a6b2f24f193d19179ba17c389", size = 11060564, upload-time = "2026-05-11T18:35:36.494Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a8/ea3dcbef31f99b634f2ee23bb0321cbc8c1b388b76a861eb849f13c347dc/mypy-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:0b1a5260c95aa443083f9ed3592662941951bca3d4ca224a5dc517c38b7cf666", size = 9966983, upload-time = "2026-05-11T18:37:14.139Z" }, - { url = "https://files.pythonhosted.org/packages/95/b1/55861beb5c339b44f9a2ba92df9e2cb1eeb4ae1eee674cdf7772c797778b/mypy-2.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:244358bf1c0da7722230bce60683d52e8e9fd030554926f15b747a84efb5b3af", size = 14874381, upload-time = "2026-05-11T18:37:31.784Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b3/b7f770114b7d0ac92d0f76e8d93c2780844a70488a90e91821927850da86/mypy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ec7c57657493c7a75534df2751c8ae2cda383c16ecc55d2106c54476b1b16f6", size = 13665501, upload-time = "2026-05-11T18:34:23.063Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f3/8ae2037967e2126689a0c11d99e2b707134a565191e92c60ca2572aec60a/mypy-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8161b6ff4392410023224f0969d17db93e1e154bc3e4ba62598e720723ae211", size = 14045750, upload-time = "2026-05-11T18:31:48.151Z" }, - { url = "https://files.pythonhosted.org/packages/a0/32/615eb5911859e43d054941b0d0a7d06cfa2870eba86529cf385b052b111c/mypy-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf03e12003084a67395184d3eb8cbd6a489dc3655b5664b28c210a9e2403ab0b", size = 15061630, upload-time = "2026-05-11T18:37:06.898Z" }, - { url = "https://files.pythonhosted.org/packages/d4/03/4eafbfff8bfab1b87082741eae6e6a624028c984e6708b73bce2a8570c9d/mypy-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:20509760fd791c51579d573153407d226385ec1f8bcce55d730b354f3336bc22", size = 15288831, upload-time = "2026-05-11T18:31:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/99/ee/919661478e5891a3c96e549c036e467e64563ab85995b10c53c8358e16a3/mypy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:6753d0c1fdd6b1a23b9e4f283ce80b2153b724adcb2653b20b85a8a28ac6436b", size = 11135228, upload-time = "2026-05-11T18:34:31.23Z" }, - { url = "https://files.pythonhosted.org/packages/24/0a/6a12b9782ca0831a553192f351679f4548abc9d19a7cc93bb7feb02084c7/mypy-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:98ebb6589bb3b6d0c6f0c459d53ca55b8091fbc13d277c4041c885392e8195e8", size = 10040684, upload-time = "2026-05-11T18:36:48.199Z" }, - { url = "https://files.pythonhosted.org/packages/6e/dd/c7191469c777f07689c032a8f7326e393ea34c92d6d76eb7ce5ba57ea66d/mypy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35aac3bb114e03888f535d5eb51b8bafbb3266586b599da1940f9b1be3ec5bd5", size = 14852174, upload-time = "2026-05-11T18:31:38.929Z" }, - { url = "https://files.pythonhosted.org/packages/55/8c/aed55408879043d72bb9135f4d0d19a02b886dd569631e113e3d2706cb8d/mypy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8de55a8c861f2a49331f807be98d90caeceeef520bde13d43a160207f8af613e", size = 13651542, upload-time = "2026-05-11T18:36:04.636Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8e/f371a824b1f1fa8ea6e3dbb8703d232977d572be2329554a3bc4d960302f/mypy-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fdf2941a07434af755837d9880f7d7d25f1dacb1af9dcd4b9b66f2220a3024e", size = 14033929, upload-time = "2026-05-11T18:35:55.742Z" }, - { url = "https://files.pythonhosted.org/packages/94/21/f54be870d6dd53a82c674407e0f8eed7174b05ec78d42e5abd7b42e84fd5/mypy-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e195b817c13f02352a9c124301f9f30f078405444679b6753c1b96b6eed37285", size = 15039200, upload-time = "2026-05-11T18:33:10.281Z" }, - { url = "https://files.pythonhosted.org/packages/17/99/bf21748626a40ce59fd29a39386ab46afec88b7bd2f0fa6c3a97c995523f/mypy-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5431d42af987ebd92ba2f71d45c85ed41d8e6ca9f5fd209a69f68f707d2469e5", size = 15272690, upload-time = "2026-05-11T18:32:07.205Z" }, - { url = "https://files.pythonhosted.org/packages/d6/d7/9e90d2cf47100bea550ed2bc7b0d4de3a62181d84d5e37da0003e8462637/mypy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:767fe8c66dc3e01e19e1737d4c38ebefead16125e1b8e58ad421903b376f5c65", size = 11147435, upload-time = "2026-05-11T18:33:56.477Z" }, - { url = "https://files.pythonhosted.org/packages/ec/46/e5c449e858798e35ffc90946282a27c62a77be743fe17480e4977374eb91/mypy-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ecfe70d43775ab99562ab128ce49854a362044c9f894961f68f898c23cb7429d", size = 10035052, upload-time = "2026-05-11T18:32:30.049Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ca/b279a672e874aedd5498ae25f722dacc8aa86bbffb939b3f97cbb1cf6686/mypy-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7354c5a7f69d9345c3d6e69921d57088eea3ddeeb6b20d34c1b3855b02c36ec2", size = 14848422, upload-time = "2026-05-11T18:35:45.984Z" }, - { url = "https://files.pythonhosted.org/packages/27/e6/3efe56c631d959b9b4454e208b0ac4b7f4f58b404c89f8bec7b49efdfc21/mypy-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:49890d4f76ac9e06ec117f9e09f3174da70a620a0c300953d8595c926e80947f", size = 13677374, upload-time = "2026-05-11T18:36:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/84/7f/8107ea87a44fd1f1b59882442f033c9c3488c127201b1d1d15f1cbd6022e/mypy-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:761be68e023ef5d94678772396a8af1220030f80837a3afd8d0aef3b419666f4", size = 14055743, upload-time = "2026-05-11T18:35:18.361Z" }, - { url = "https://files.pythonhosted.org/packages/51/4d/b6d34db183133b83761b9199a82d31557cdbb70a380d8c3b3438e11882a3/mypy-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c90345fc182dc363b891350457ec69c35140858538f38b4540845afcc32b1aef", size = 15020937, upload-time = "2026-05-11T18:34:59.618Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d7/f08360c691d758acb02f45022c34d98b92892f4ea756644e1000d4b9f3d8/mypy-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b84802e7b5a6daf1f5e15bc9fcd7ddae77be13981ffab037f1c67bb84d67d135", size = 15253371, upload-time = "2026-05-11T18:36:41.081Z" }, - { url = "https://files.pythonhosted.org/packages/67/1b/09460a13719530a19bce27bd3bc8449e83569dd2ba7faf51c9c3c30c0b61/mypy-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:022c771234936ceac541ebaf836fe9e2abeb3f5e09aff21588fe543ff006fe21", size = 11326429, upload-time = "2026-05-11T18:34:13.526Z" }, - { url = "https://files.pythonhosted.org/packages/40/62/75dbf0f82f7b6680340efc614af29dd0b3c17b8a4f1cd09b8bd2fd6bc814/mypy-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:498207db725cec88829a6a5c2fc771205fd043719ef98bc49aba8fb9fc4e6d57", size = 10218799, upload-time = "2026-05-11T18:32:23.491Z" }, - { url = "https://files.pythonhosted.org/packages/b2/66/caca04ed7d972fb6eb6dd1ccd6df1de5c38fae8c5b3dc1c4e8e0d85ee6b9/mypy-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d5e5cad0efeba72b93cd17490cc0d69c5ac9ca132994fe3fb0314808aeeb83e", size = 15923458, upload-time = "2026-05-11T18:35:28.64Z" }, - { url = "https://files.pythonhosted.org/packages/ed/52/2d90cbe49d014b13ed7ff337930c30bad35893fe38a1e4641e756bb62191/mypy-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ff715050c127d724fd260a2e666e7747fdd83511c0c47d449d98238970aef780", size = 14757697, upload-time = "2026-05-11T18:36:14.208Z" }, - { url = "https://files.pythonhosted.org/packages/ac/37/d98f4a14e081b238992d0ed96b6d39c7cc0148c9699eb71eaa68629665ea/mypy-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82208da9e09414d520e912d3e462d454854bed0810b71540bb016dcbca7308fd", size = 15405638, upload-time = "2026-05-11T18:33:48.249Z" }, - { url = "https://files.pythonhosted.org/packages/a3/c2/15c46613b24a84fad2aea1248bf9619b99c2767ae9071fe224c179a0b7d4/mypy-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e79ebc1b904b84f0310dff7469655a9c36c7a68bddb37bdd42b67a332df61d08", size = 16215852, upload-time = "2026-05-11T18:32:50.296Z" }, - { url = "https://files.pythonhosted.org/packages/5c/90/9c16a57f482c76d25f6379762b56bbf65c711d8158cf271fb2802cfb0640/mypy-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e583edc957cfb0deb142079162ae826f58449b116c1d442f2d91c69d9fced081", size = 16452695, upload-time = "2026-05-11T18:33:38.182Z" }, - { url = "https://files.pythonhosted.org/packages/0f/4c/215a4eeb63cacc5f17f516691ea7285d11e249802b942476bff15922a314/mypy-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b33b6cd332695bba180d55e717a79d3038e479a2c49cc5eb3d53603409b9a5d7", size = 12866622, upload-time = "2026-05-11T18:34:39.945Z" }, - { url = "https://files.pythonhosted.org/packages/4b/50/1043e1db5f455ffe4c9ab22747cd8ca2bc492b1e4f4e21b130a44ee2b217/mypy-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:4f910fe825376a7b66ef7ca8c98e5a149e8cd64c19ae71d84047a74ee060d4e6", size = 10610798, upload-time = "2026-05-11T18:36:31.444Z" }, - { url = "https://files.pythonhosted.org/packages/0d/2a/13ca1f292f6db1b98ff495ef3467736b331621c5917cad984b7043e7348d/mypy-2.1.0-py3-none-any.whl", hash = "sha256:a663814603a5c563fb87a4f96fb473eeb30d1f5a4885afcf44f9db000a366289", size = 2693302, upload-time = "2026-05-11T18:31:29.246Z" }, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, -] - -[[package]] -name = "nodeenv" -version = "1.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, -] - -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, -] - -[[package]] -name = "numpy" -version = "2.4.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.15'", - "python_full_version == '3.14.*' and sys_platform == 'win32'", - "python_full_version == '3.14.*' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", -] -sdist = { url = "https://files.pythonhosted.org/packages/50/8e/b8041bc719f056afd864478029d52214789341ac6583437b0ee5031e9530/numpy-2.4.5.tar.gz", hash = "sha256:ca670567a5683b7c1670ec03e0ddd5862e10934e92a70751d68d7b7b74ca7f9f", size = 20735669, upload-time = "2026-05-15T20:25:19.492Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/44/1383ee4d1e916a9e610e46c876b5c83ea023526117d23cd911983929ec34/numpy-2.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3176dc8ff71dbb593606f91a69ad0c3cd3303c7eb546af477370ab9edf760288", size = 16969261, upload-time = "2026-05-15T20:22:23.036Z" }, - { url = "https://files.pythonhosted.org/packages/3d/61/54bacfbec7550bc398e6b6d9a861db35d64f75844e1d7920f5722c3cd5e7/numpy-2.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1811150e5148f5a01a7cc282cb2f489b4a3050a773e173adb480e507bad3a3d7", size = 14964009, upload-time = "2026-05-15T20:22:25.819Z" }, - { url = "https://files.pythonhosted.org/packages/7a/55/fe86c64561761f185339c26001164a2687bd4787af681e961431abd2d534/numpy-2.4.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0d63a780070871210853ba01e90b88f9b85cf2abf63a7f143d5127189265ddf6", size = 5469106, upload-time = "2026-05-15T20:22:28.13Z" }, - { url = "https://files.pythonhosted.org/packages/2f/74/cf29b8317627f0e3aa2c9fb332d386bd734308cecd9e07da9f407d9ce0c3/numpy-2.4.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:0c6919cefafb3b76cd46a89dbb203bf1dd95529d2a6d09fef2d325d95d6a79d8", size = 6798945, upload-time = "2026-05-15T20:22:30.061Z" }, - { url = "https://files.pythonhosted.org/packages/80/a9/b61730a17fa87d5abb13ce560a1b4ce3485d37a13e03eb7b414e598e72f8/numpy-2.4.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d51efede1e58e8b11877536a5518f60e318d8ff69b89ad7b38ee5e431b24d772", size = 15967025, upload-time = "2026-05-15T20:22:32.328Z" }, - { url = "https://files.pythonhosted.org/packages/03/39/70bcd187eb4d223c21fde02c2bdfbffbffef3288cbb3947c04c74ae39a08/numpy-2.4.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07ce7e74da92d7c71b5df157b9758bcdd53d7fea10602154de3afd2b3ddc34dd", size = 16918685, upload-time = "2026-05-15T20:22:34.759Z" }, - { url = "https://files.pythonhosted.org/packages/ab/31/400fd1315bbe228af3937cf8a74e32023df6217af36077919d00adc382e4/numpy-2.4.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d7828234a13185effb34979e146f9921f2a65dfbbe215e6dbb57d6478fc8e059", size = 17322963, upload-time = "2026-05-15T20:22:37.557Z" }, - { url = "https://files.pythonhosted.org/packages/18/6a/bbbafb657e6f6ee826b4ecdb8722a2e0aae4a981888eaf59eae6a535cc13/numpy-2.4.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f96083adc3dfc1bbf778f2c79654d88115fa07074c97cb724fe9508f12d91c55", size = 18651594, upload-time = "2026-05-15T20:22:40.449Z" }, - { url = "https://files.pythonhosted.org/packages/de/0c/857a515154a2a18b0dfae04089600d166d352d473ec17a0680d879582d06/numpy-2.4.5-cp311-cp311-win32.whl", hash = "sha256:4ed78c904a638b6e5d7cd4db90c06fca5fc6ec2f28d258305368f454a50e79cf", size = 6233849, upload-time = "2026-05-15T20:22:43.139Z" }, - { url = "https://files.pythonhosted.org/packages/f0/66/d215f3fb93541617adb5d58b3b9508e8a6413e499711e0adc0b80bcb445d/numpy-2.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:079b0fad6f2899b23c5da89792b5409d2d83fc83e8bd5c2299cc9c397a264864", size = 12608238, upload-time = "2026-05-15T20:22:45.229Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c4/611d66d3fcfa931954d37a19ce5575f3283d023e89ff0df6ad43b334ae9c/numpy-2.4.5-cp311-cp311-win_arm64.whl", hash = "sha256:d6c78e260b53affe9b395a9d54fc61f101f9521c4d9452c7e9e3718b19e2215b", size = 10479452, upload-time = "2026-05-15T20:22:47.962Z" }, - { url = "https://files.pythonhosted.org/packages/6c/18/3275231e98620002681c922e792db04d72c356e9d8073c387344fc0e4ff1/numpy-2.4.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:654fb8674b61b1c4bd568f944d13a908566fdcb0d797303521d4149d16da05ef", size = 16689166, upload-time = "2026-05-15T20:22:50.761Z" }, - { url = "https://files.pythonhosted.org/packages/db/23/000aab6a16bdec53307f0f72546b57a3ac9266a62d8c257bee97d85fd078/numpy-2.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4cd9f6fa7ce10dc4627f2bb81dd9075dab67e94632e04c2b638e12575ddaa862", size = 14699514, upload-time = "2026-05-15T20:22:53.678Z" }, - { url = "https://files.pythonhosted.org/packages/47/cc/ddaf3af9c46966fef5be879256f213d85a0c56c75d07a3b7defec7cf6b4c/numpy-2.4.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4f5bc96d35d94e4ceab8b38a92241b4611e95dc44e63b9f1fa2a331858ee3507", size = 5204601, upload-time = "2026-05-15T20:22:56.257Z" }, - { url = "https://files.pythonhosted.org/packages/07/ea/627fadd11959b3c7759008f34c92a35af8ff942dd8284a66ced648bbe516/numpy-2.4.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4bb33e900ee81730ad77a258965134aa8ceac805124f7e5229347beda4b8d0aa", size = 6551360, upload-time = "2026-05-15T20:22:58.334Z" }, - { url = "https://files.pythonhosted.org/packages/a1/47/0728b986b8682d742ff68c16baa5af9d185484abfc635c5cc700f44e62be/numpy-2.4.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32f8f852273ef32b291201ac2a2c97629c4a1ee8632bb670e3443eaa09fc2e72", size = 15671157, upload-time = "2026-05-15T20:23:01.081Z" }, - { url = "https://files.pythonhosted.org/packages/d1/0b/b905ae82d9419dc38123523862db64978ca2954b69609c3ae8fdaca1084c/numpy-2.4.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:685681e956fc8dcb75adc6ff26694e1dfd738b24bd8d4696c51ca0110157f912", size = 16645703, upload-time = "2026-05-15T20:23:04.358Z" }, - { url = "https://files.pythonhosted.org/packages/5f/24/e27fc3f5236b4118ed9eed67111675f5c61a07ea333acec87c869c3b359d/numpy-2.4.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6f64dd84b277a737eb59513f6b9bb6195bf41ab11941ef15b2562dbab43fa8ef", size = 17021018, upload-time = "2026-05-15T20:23:07.021Z" }, - { url = "https://files.pythonhosted.org/packages/d3/a7/9041af38d527ab80a06a93570a77e29425b41507ad41f6acf5da78cfb4a4/numpy-2.4.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b42d9496f79e3a728192f05a42d86e36163217b7cdecb3813d0028a0aa6b72d7", size = 18368768, upload-time = "2026-05-15T20:23:09.44Z" }, - { url = "https://files.pythonhosted.org/packages/49/82/326a014442f32c2663434fd424d9298791f47f8a0f17585ad60519a5606e/numpy-2.4.5-cp312-cp312-win32.whl", hash = "sha256:86d980970f5110595ca14855768073b08585fc1acc36895de303e039e7dee4a5", size = 5962819, upload-time = "2026-05-15T20:23:11.631Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f0/cbf5d391b0b3a5e8cad264603e2fae256b0bde8ce43566b13b78faedc659/numpy-2.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:3333dba6a4e611d666f69e177ba8fe4140366ff681a5feb2374d3fd4fff3acb6", size = 12321621, upload-time = "2026-05-15T20:23:14.305Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d0/0f18909d9bc37a5f3f969fc737d2bb5df9f2ff295f71b467e6f52a0d6c4e/numpy-2.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:4593d197270b894efeb538dcbe227e4bcf1c77f88c4c6bf933ead812cfaa4453", size = 10221430, upload-time = "2026-05-15T20:23:16.887Z" }, - { url = "https://files.pythonhosted.org/packages/e3/a4/fb50657c7cab297bf34edcd60a074cb0647f61771430d6363575274160fe/numpy-2.4.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ef248460b645c102026b82337cc4e88231909c66dd77b59ec6d6cac7e44f277", size = 16684760, upload-time = "2026-05-15T20:23:19.436Z" }, - { url = "https://files.pythonhosted.org/packages/3e/43/87e731299b9408eda705b3b9cb31c7bceb9347d2af9cbb16b2b1e4b5bc0f/numpy-2.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4603622bdcdbf8dccb1d9d5b21d16a7aa4e473ae6c8e14048d846fd4ca2907a0", size = 14694117, upload-time = "2026-05-15T20:23:21.832Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c7/0b2bb8acea222e9dd6e582afc2bc553b89b8833cbdccc68e68f050fb31f8/numpy-2.4.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6c18d49c67689c562854b53fdc433b93e47c12952aa6fa6d59f185e1a5992419", size = 5199141, upload-time = "2026-05-15T20:23:24.066Z" }, - { url = "https://files.pythonhosted.org/packages/39/60/b6972b5d47033d90000f0097c81a98b9486589a2d7003bf725bff275cb0d/numpy-2.4.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:b1c663ddc641f4192e90511bec61a09bc231e3bbdb996cdc6edbcaa0e528d685", size = 6546954, upload-time = "2026-05-15T20:23:26.099Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e9/ed667cb12c11ca0adde431f685d3a5dd78e6f78b27228c581c8415198e9e/numpy-2.4.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93793222b524f692f12b2f8752ce8b1d9d9125b2bfd5dbf0fb69c92c5e1ce86c", size = 15669430, upload-time = "2026-05-15T20:23:28.147Z" }, - { url = "https://files.pythonhosted.org/packages/44/e5/679f6ffeb01294b0008e5ada4a113cb47617bc0e1819a529fd7973c6d7f4/numpy-2.4.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1616bde34b2bcba2fa9bde06217ce00da4f3d1bdfb264d54525a99e8fe170d83", size = 16633390, upload-time = "2026-05-15T20:23:31.622Z" }, - { url = "https://files.pythonhosted.org/packages/36/46/42bfffc9a780ec902ccd7470d3219192ee82b7b442710307dd85b4d121b0/numpy-2.4.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:09d7d97da1c2c62f4818b3e150a57572ff8dcf1cf5ac501aac832ffd4ebd9566", size = 17020709, upload-time = "2026-05-15T20:23:34.08Z" }, - { url = "https://files.pythonhosted.org/packages/44/00/3e840bfee0cc6cec22209f2c97057f26eeb30de031e4933b4dfc0395416c/numpy-2.4.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d68d0b355ab2e39fe0de59001d7151dfdbbb880ef67baeed806661e03df5097", size = 18357818, upload-time = "2026-05-15T20:23:36.965Z" }, - { url = "https://files.pythonhosted.org/packages/72/cb/3447b400b9da84134575486f0f656541559b00d4b262477bce9b678bbca8/numpy-2.4.5-cp313-cp313-win32.whl", hash = "sha256:fe28b64777ddfa0eca9b5f51474034ebe3dcb8324f48f27b28f479085673ae33", size = 5961114, upload-time = "2026-05-15T20:23:39.586Z" }, - { url = "https://files.pythonhosted.org/packages/28/f9/a90d2220ffcdc0798f5d55bb5d5463cd6254ec9ef43f384dae80217d7a2f/numpy-2.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:fb4a6c9c537d6ccec9cc4aeae4261bd3cc79b070c67ddc0646f5b1c07fddde42", size = 12318553, upload-time = "2026-05-15T20:23:41.436Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c9/96f531fb3234545315152d34efdf3de7daee81254448447eb619e8d16967/numpy-2.4.5-cp313-cp313-win_arm64.whl", hash = "sha256:6d7df2da2e7ea0624a43aa368104b3a3ce14aae98ad4bb2c9a93fecef76f1c97", size = 10222200, upload-time = "2026-05-15T20:23:43.681Z" }, - { url = "https://files.pythonhosted.org/packages/e1/f4/a291caab5a3c520babf93ff77c54fd5fdb1ebbc3296cee2eb2146ce773b1/numpy-2.4.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:2a235607a18df941760a695927051af4b1cd5d3ee85840d0e2af816785771feb", size = 14821438, upload-time = "2026-05-15T20:23:45.911Z" }, - { url = "https://files.pythonhosted.org/packages/85/26/13dbb1159b864370568e7309063fd72667984df89db74e9caeb175d067c7/numpy-2.4.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:58dcf64969d870f36bc7fbd557d2617e997db7dc06261b6e3327148ea460d0a4", size = 5326663, upload-time = "2026-05-15T20:23:48.18Z" }, - { url = "https://files.pythonhosted.org/packages/7c/99/d233408072a0e019e2288e27edd23f7d572ccd4a73d1539baa3270ede85d/numpy-2.4.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:235f54b0156274d8fa3155db3ed6d2f401c7e8f3367c90db0a12f02a58fde6ed", size = 6646874, upload-time = "2026-05-15T20:23:49.856Z" }, - { url = "https://files.pythonhosted.org/packages/c5/00/eeb6f193dfe767725e952e0464f3e51f44145c5dd261cd7389aa36ac0713/numpy-2.4.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef3b5bb65437a3555c648e706475db01c645559ca80dc8b03e4f202ea757e0d6", size = 15728147, upload-time = "2026-05-15T20:23:51.655Z" }, - { url = "https://files.pythonhosted.org/packages/e5/c9/b8ed039f1fde1b13a8807c893e7e2f9432a379f4d6401edecf0028da5b2c/numpy-2.4.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7f09a7e5f017d7098c66522097c96257411c9620c0926212200d66bc8cee3976", size = 16681770, upload-time = "2026-05-15T20:23:53.933Z" }, - { url = "https://files.pythonhosted.org/packages/11/5b/0198ef6cb7016eca6d895d392106012138127fab23f46637e76d5e25c9f5/numpy-2.4.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:993a88d8fdd8554466a8765cd8bacd97ba56b70ca6b0a04bcdca77f5afed4222", size = 17086218, upload-time = "2026-05-15T20:23:56.646Z" }, - { url = "https://files.pythonhosted.org/packages/f0/fe/8821f3cfc660ae84c92ee158505941874b62c56a42e035a41425228cd8cf/numpy-2.4.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:84f58bed609b5669f5ad3d597901a4f1f86ee5b3c3708aaa55f05b4fe6e0f656", size = 18403542, upload-time = "2026-05-15T20:23:59.173Z" }, - { url = "https://files.pythonhosted.org/packages/0e/00/e64ecaf498865e7b091f57658b2c522503e5d1b70e43b807f5f8247e1d88/numpy-2.4.5-cp313-cp313t-win32.whl", hash = "sha256:7200c58f3f933ca61e66346667dcc8510bb111995e9ce15398a731e6a4afa4bb", size = 6084903, upload-time = "2026-05-15T20:24:01.506Z" }, - { url = "https://files.pythonhosted.org/packages/20/c0/354997dedaf74e8311c2cf9a6027b476fd8d424cb92189cc0ae2b25f501c/numpy-2.4.5-cp313-cp313t-win_amd64.whl", hash = "sha256:c26c71080d35db5002102f5d9ff614d45de02aa1f7802943e691e063e5ee93bc", size = 12458420, upload-time = "2026-05-15T20:24:03.735Z" }, - { url = "https://files.pythonhosted.org/packages/66/dc/917ee5ea4a31ca1a6e4c9a85386477efa318dcc60db257c5ef4adda096c1/numpy-2.4.5-cp313-cp313t-win_arm64.whl", hash = "sha256:2caa576d1707b275cba1aeb60a5c50daa6fa2a3f28ecb08123bc05fd439005db", size = 10291826, upload-time = "2026-05-15T20:24:06.535Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c1/3be0bf102fc17cff5bd142e3be0bfffabec6fa46da0a462396c76b0765d0/numpy-2.4.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:889ca2c072315de638a5194a772aa1fa2df92bdd6175f6a222d4784040424b61", size = 16683455, upload-time = "2026-05-15T20:24:08.988Z" }, - { url = "https://files.pythonhosted.org/packages/e8/3e/0742d724901fa36bc54b338c6e62e463a7601180da896aa44978f0adf004/numpy-2.4.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:89e89304fb1f8c3f0ecfa4a7d48f311dd79771336a940e920159d643d1307e77", size = 14704577, upload-time = "2026-05-15T20:24:11.542Z" }, - { url = "https://files.pythonhosted.org/packages/25/1c/196c610ff4c6782d697ba780ebdc1616be143213701bf22c1a270f3bf7dd/numpy-2.4.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:144fcc5a3a17679b2b82543b4a2d8dd29937230a7af13232b5f753872feb6361", size = 5209756, upload-time = "2026-05-15T20:24:14.091Z" }, - { url = "https://files.pythonhosted.org/packages/52/c0/23fb1bc506f774e03db66219a2830e720f4d3dbcaaddf855a7ff7bb6d96f/numpy-2.4.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:398bb16772b265b9fa5c07b07072646ea97137c10ffb62a9a087b277fc825c29", size = 6543937, upload-time = "2026-05-15T20:24:16.223Z" }, - { url = "https://files.pythonhosted.org/packages/9f/49/db4662c26e68520afcc84d672a6f9f5294063dee0e57a46d61afdaa7f9ed/numpy-2.4.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb352e7b8876da1249e72254736d6c58c505fa4e58a3d7e30efca241ca9ca9ce", size = 15685292, upload-time = "2026-05-15T20:24:17.978Z" }, - { url = "https://files.pythonhosted.org/packages/43/80/1315439acedd8398319bac177d6de3d48ab39c62cc0c810f74f0a9a73996/numpy-2.4.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7341b08ff8124d7353939778e2707b8732d03c78c1c30e0815aba2dacbe1245a", size = 16638528, upload-time = "2026-05-15T20:24:20.478Z" }, - { url = "https://files.pythonhosted.org/packages/56/81/364388600932618fe735d97fdd2437cb8dd87a23377ac11d8b9d5db098b7/numpy-2.4.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:deb01226f012539f3945261ffe1c10aec081a0fa0a5c925419933c70f3ae2d23", size = 17036709, upload-time = "2026-05-15T20:24:22.949Z" }, - { url = "https://files.pythonhosted.org/packages/32/4a/a1185b18a94a6d9587e54b437e7d0ba36ecf6e614f1bea03f5249912c64e/numpy-2.4.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d888bdf7335f76878c3c7b264ac1ff089863e211ec81249f9fb5795c2183dc25", size = 18363254, upload-time = "2026-05-15T20:24:25.402Z" }, - { url = "https://files.pythonhosted.org/packages/b9/8e/95c1d2ed15ae97750ede8c8a0ac487c9c01207afff430f47078b1d9d7dc5/numpy-2.4.5-cp314-cp314-win32.whl", hash = "sha256:15f90d1256e9b2320aff24fde44815b787ab6d7c49a1a11bfd8138b321c5f080", size = 6010184, upload-time = "2026-05-15T20:24:27.852Z" }, - { url = "https://files.pythonhosted.org/packages/aa/92/d063df4d63d988b20d881856c74df76c0c1786229bb870f3a52af0981d4d/numpy-2.4.5-cp314-cp314-win_amd64.whl", hash = "sha256:4bd2cd4ef9c0afa87de73723c0a33c0edff62143e1432917458e26d3d195d87f", size = 12450344, upload-time = "2026-05-15T20:24:29.856Z" }, - { url = "https://files.pythonhosted.org/packages/3d/64/c0ae481f7c3b2f85869bcd8fc5d30aa7c96b394162eef9c9315957f115c5/numpy-2.4.5-cp314-cp314-win_arm64.whl", hash = "sha256:db304568c650e9d7039744d3575d0d287754debb2057d7c7b8cdfdc2c487a957", size = 10495674, upload-time = "2026-05-15T20:24:32.352Z" }, - { url = "https://files.pythonhosted.org/packages/57/89/c5a4c677acf17aa50ba09a15e61812f90baac42bb6ca38d112e005858351/numpy-2.4.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6de2883e0d2c63eae1bab1a84b390dca74aabb3d20ea1f5d58f360853c83abf3", size = 14824078, upload-time = "2026-05-15T20:24:34.669Z" }, - { url = "https://files.pythonhosted.org/packages/e7/52/57e7144284f6b51ba93523e495ff239260b1ecd5257e3700a436332e5688/numpy-2.4.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:06760fe73ae5005008748d182de612c733542af3cde063d532cd2127561b27be", size = 5329246, upload-time = "2026-05-15T20:24:36.957Z" }, - { url = "https://files.pythonhosted.org/packages/b9/b3/09dbce80fd4a7db4318f2fc01eec0ae76f29306442b5a32d4b811d082cdf/numpy-2.4.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:4b51a01745cb04cc19278482207444b4d30728ce91c28d27a3bfae5fc6ff24c7", size = 6649877, upload-time = "2026-05-15T20:24:38.861Z" }, - { url = "https://files.pythonhosted.org/packages/30/c2/dbdb23e82d540b757690ef13f011c386fca6a63848eec6136baf8ce7cbed/numpy-2.4.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a05636d7937d0936f271e5ba957fa8d746b5be3c2025caa1a2508f4fe521d40", size = 15730534, upload-time = "2026-05-15T20:24:41.168Z" }, - { url = "https://files.pythonhosted.org/packages/c4/bd/68f6e9b3c20decf40ac06708a7b506757e3a8588efed32988d1b747316be/numpy-2.4.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b86f56048ed09c3bbe48962a7dff077c2fd3274f8cf981800f3b38eac49cc3", size = 16679741, upload-time = "2026-05-15T20:24:44.874Z" }, - { url = "https://files.pythonhosted.org/packages/39/1d/0fcac0b6b4ea1b50ca8fca05a34bed5c8d56e34c1cb5ffb04cf76109ac3c/numpy-2.4.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:130d58151c4db23e9fa860b84784e219a3aa3e030acc88a493ea37006c4dfd4c", size = 17085598, upload-time = "2026-05-15T20:24:47.603Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e8/a472b2564cf6cc498ad7aa9741d9832648221b8ab8cc0dbef41faa248ede/numpy-2.4.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d475afc8cbe935ff5944f753d863bba774d7f4e1feaaa4102901e3e053ca5963", size = 18403855, upload-time = "2026-05-15T20:24:50.474Z" }, - { url = "https://files.pythonhosted.org/packages/b9/a4/da82196f8cc4bd28ecf17bd57008c84f3d4696caf06753d9bad45e4ad749/numpy-2.4.5-cp314-cp314t-win32.whl", hash = "sha256:27f4a6dc26353a860b348961b9aa9e009835688b435cfa105e873b8dc2c726f5", size = 6156900, upload-time = "2026-05-15T20:24:53.134Z" }, - { url = "https://files.pythonhosted.org/packages/98/31/860959b91a73d9a085006554fa3850da51a7ffab64599bac5097243438ab/numpy-2.4.5-cp314-cp314t-win_amd64.whl", hash = "sha256:76ac6e90f5e226011c88f9b7040a4bcae612518bc7e9adc127e697a13b28ad1a", size = 12638906, upload-time = "2026-05-15T20:24:55.009Z" }, - { url = "https://files.pythonhosted.org/packages/9e/2a/bbd3097913083ad07c0f28fc9629666221fc18923e17ce97ae22a5dccdd6/numpy-2.4.5-cp314-cp314t-win_arm64.whl", hash = "sha256:7c392e2c1bf596701d3c6832be7567eab5d5b0a13865036c33365ee097d37f8b", size = 10565875, upload-time = "2026-05-15T20:24:57.425Z" }, - { url = "https://files.pythonhosted.org/packages/fc/5d/9a644cfb841bc76b584afc3af1708b3bf6c5cb51fc84a7008246cd93b7b7/numpy-2.4.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6bf0bfc1c2e1db972e30b6cd3d4861f477f3af908b27799b239dc3cbe3eb4b95", size = 16847544, upload-time = "2026-05-15T20:24:59.746Z" }, - { url = "https://files.pythonhosted.org/packages/56/8f/4fe5e3ba76d858dae1fe79078818c0520447335be0082c0dedf82719cc08/numpy-2.4.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:73d664413fb97229149c4711ef56531a6fe8c15c1c2626b0bbe497b84c287e70", size = 14889039, upload-time = "2026-05-15T20:25:03.179Z" }, - { url = "https://files.pythonhosted.org/packages/8e/6f/79f195abf922ecc43e7d0eb6cc969462a71b524a35bcd1fa26b4a1d7406a/numpy-2.4.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:b35bee5ef99e8d227a07829bee2e864fcb65f7c157646fcd8ec8b4b45dd8b88f", size = 5394106, upload-time = "2026-05-15T20:25:05.659Z" }, - { url = "https://files.pythonhosted.org/packages/58/6f/79cd6247205802bcbd10b40ea087e20ded526e10e9be224d34de832b216e/numpy-2.4.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:02981d0fc9f9ce147643d552966d47f329a02f7ecb3b113e84207242f20dfa83", size = 6708718, upload-time = "2026-05-15T20:25:08.071Z" }, - { url = "https://files.pythonhosted.org/packages/d7/22/5f378a9d4633c98f28c4709d4144b1a4630c5c09e109d2e781e2d26c8fe1/numpy-2.4.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e63caf31a1df06338ae63d999f7a33a675ced62eea9c9b02db4b1c1f45cff38", size = 15798292, upload-time = "2026-05-15T20:25:10.689Z" }, - { url = "https://files.pythonhosted.org/packages/63/1c/cec582febef798c99888892d92dc1d28dfe29cb427c41f44d13d0dec208f/numpy-2.4.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8fc52b85a7b45e474be53eddf08e006d22e381a4e41bcde8e4aa08da0e7d198", size = 16747406, upload-time = "2026-05-15T20:25:13.879Z" }, - { url = "https://files.pythonhosted.org/packages/b1/dc/d358a16a6fec86cf736b8fbe67386044b3fa2aded1a80cff90e836799301/numpy-2.4.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:40c71d50a4da1a7c317af419461052d3911a5770bfc5fd55baf52cc45e7a2c20", size = 12504085, upload-time = "2026-05-15T20:25:16.667Z" }, -] - -[[package]] -name = "packaging" -version = "26.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, -] - -[[package]] -name = "pathspec" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, -] - -[[package]] -name = "platformdirs" -version = "4.9.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "pre-commit" -version = "4.6.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cfgv" }, - { name = "identify" }, - { name = "nodeenv" }, - { name = "pyyaml" }, - { name = "virtualenv" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, -] - -[[package]] -name = "pycparser" -version = "3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, -] - -[[package]] -name = "pydantic" -version = "2.13.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.46.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, - { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, - { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, - { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, - { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, - { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, - { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, - { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, - { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, - { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, - { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, - { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, - { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, - { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, - { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, - { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, - { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, - { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, - { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, - { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, - { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, - { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, - { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, - { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, - { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, - { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, - { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, - { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, - { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, - { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, - { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, - { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, - { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, - { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, - { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, - { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, -] - -[[package]] -name = "pydantic-settings" -version = "2.14.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic" }, - { name = "python-dotenv" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, -] - -[[package]] -name = "pygit2" -version = "1.18.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "cffi", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2e/ea/762d00f6f518423cd889e39b12028844cc95f91a6413cf7136e184864821/pygit2-1.18.2.tar.gz", hash = "sha256:eca87e0662c965715b7f13491d5e858df2c0908341dee9bde2bc03268e460f55", size = 797200, upload-time = "2025-08-16T13:52:36.853Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/54/a747b5a80698c22b7e510de61facaf7b7dd196fe4540d0d28eb05eacaeba/pygit2-1.18.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a84fbc62b0d2103059559b5af7e939289a0f3fc7d0a7ad84d822eaa97a6db687", size = 5509510, upload-time = "2025-08-16T13:39:01.887Z" }, - { url = "https://files.pythonhosted.org/packages/d4/bc/865c6090efa25a5cfe7e1d2cec28c2515a2d7239d3b428f36184af6610ac/pygit2-1.18.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c84aa50acba5a2c6bb36863fbcc1d772dc00199f9ea41bb5cac73c5fdad42bce", size = 5762592, upload-time = "2025-08-16T13:39:03.06Z" }, - { url = "https://files.pythonhosted.org/packages/41/96/69a408e57fd68555e1bdb134a15edb4cb77a24ba266dcbf6edf6d5d4a807/pygit2-1.18.2-cp310-cp310-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7b8570f0df4f0a854c3d3bdcec4a5767b50b0acb13ef163f6b96db593e3611f", size = 4599930, upload-time = "2025-08-16T13:39:04.66Z" }, - { url = "https://files.pythonhosted.org/packages/aa/bc/ee2335c98995cce3dfec7ccd54fff027b769a839832457fa784fe14e4538/pygit2-1.18.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cccceadab2c772a52081eac4680c3664d2ff21966171d339fee6aaf303ccbe23", size = 5493592, upload-time = "2025-08-16T13:39:06.025Z" }, - { url = "https://files.pythonhosted.org/packages/31/54/af78c3870c62b3bbfe86ed1f2ee1f46a8a43c1db70c0d35769365fa8b145/pygit2-1.18.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c51e0b4a733e72212c86c8b3890a4c3572b1cae6d381e56b4d53ba3dafbeecf2", size = 5760887, upload-time = "2025-08-21T13:32:22.347Z" }, - { url = "https://files.pythonhosted.org/packages/23/de/419658ecdbf37e89094b171b63c941774ff46d1bb6f65efd40f0c25d1df9/pygit2-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:970e9214e9146c893249acb9610fda9220fe048ae76c80fd7f36d0ec3381676b", size = 5460906, upload-time = "2025-08-16T13:39:07.633Z" }, - { url = "https://files.pythonhosted.org/packages/c7/91/bbaca03aa624915c4dd95c60961f34d683b069249c0f25d1faef29195873/pygit2-1.18.2-cp310-cp310-win32.whl", hash = "sha256:546f9b8e7bf9d88d77008a82d7d989c624f5756c4fba26af1b8985019985dc8a", size = 1238396, upload-time = "2025-08-16T13:10:33.39Z" }, - { url = "https://files.pythonhosted.org/packages/53/a5/1d10b3e9d85ca62cbe5d5bbda611d3ca1f5fd0603910a00132b440bbbfd9/pygit2-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:5383cdfc1315e7d49d7a59a9aa37c4f0f60d08c4de3137f31d20e4be2055ad47", size = 1323973, upload-time = "2025-08-16T13:15:10.479Z" }, - { url = "https://files.pythonhosted.org/packages/3e/c5/d3bd32443f4d7275928f7e07beb87b907401570e4a0b2d6b671909373d23/pygit2-1.18.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3fc89da1426793227e06f2dec5f2df98a0c6806fb4024eec6a125fb7a5042bbf", size = 5509503, upload-time = "2025-08-16T13:39:09.095Z" }, - { url = "https://files.pythonhosted.org/packages/71/e4/b26e970a493f65f646ec33ab77c462c6cb6b5527a11aa51b0b18bfe47642/pygit2-1.18.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6ab37a87b58032c596c37bcd0e3926cc6071748230f6f0911b7fe398e021ae", size = 5768944, upload-time = "2025-08-16T13:39:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/86/32/09d5ef009dd28529afcf377f4a767156fd105b58496405a815e4b66c1944/pygit2-1.18.2-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d9642f57943703de3651906f81b9535cb257b3cbe45ecca8f97cf475f1cb6b5f", size = 4606504, upload-time = "2025-08-16T13:39:12.131Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2f/13fddef74a8dd6080e24a0bbd19c253e13e293f52c282596b9e3d0dc9148/pygit2-1.18.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1aa3efba6459e10608900fe26679e3b52ea566761f3e7ef9c0805d69a5548631", size = 5500249, upload-time = "2025-08-16T13:39:13.727Z" }, - { url = "https://files.pythonhosted.org/packages/80/c5/235376a6908a4b7cf25f92e3090e4f3f9828af49d021299a89eae66ecf9e/pygit2-1.18.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:25957ccf70e37f3e8020748724a14faf4731ceac69ed00ccbb422f99de0a80cc", size = 5767739, upload-time = "2025-08-21T13:33:47.707Z" }, - { url = "https://files.pythonhosted.org/packages/a2/1e/e2f914bfa0e8ca0b7c518c32d1b2183254c21d7d1eca3e21d6aeb7ccf066/pygit2-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6c9cdbad0888d664b80f30efda055c4c5b8fdae22c709bd57b1060daf8bde055", size = 5467750, upload-time = "2025-08-16T13:39:15.414Z" }, - { url = "https://files.pythonhosted.org/packages/d0/96/ac263bc9ce48a4f9cc31437dcaa812cc893382a8837c32cfe4764b03127e/pygit2-1.18.2-cp311-cp311-win32.whl", hash = "sha256:91bde9503ad35be55c95251c9a90cfe33cd608042dcc08d3991ed188f41ebec2", size = 1238394, upload-time = "2025-08-16T13:19:37.689Z" }, - { url = "https://files.pythonhosted.org/packages/fd/98/7fae3f7779469f2f4514e20d887d4011953c0a996af4b7f6b8bb73de4c0f/pygit2-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:840d01574e164d9d2428d36d9d32d377091ac592a4b1a3aa3452a5342a3f6175", size = 1324157, upload-time = "2025-08-16T13:24:17.196Z" }, - { url = "https://files.pythonhosted.org/packages/bd/bf/469ec748d9d7989e5494eb5210f0752be4fb6b6bf892f9608cd2a1154dda/pygit2-1.18.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5eaf2855d78c5ad2a6c2ebf840f8717a8980c93567a91fbc0fc91650747454a4", size = 5504679, upload-time = "2025-08-16T13:39:17.017Z" }, - { url = "https://files.pythonhosted.org/packages/40/95/da254224e3d60a0b5992e0fe8dee3cadfd959ee771375eb0ee921f77e636/pygit2-1.18.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee5dd227e4516577d9edc2b476462db9f0428d3cc1ad5de32e184458f25046ee", size = 5769675, upload-time = "2025-08-16T13:39:18.691Z" }, - { url = "https://files.pythonhosted.org/packages/b7/cd/722e71b832b9c0d28482e15547d6993868e64e15becee5d172b51d4a6fed/pygit2-1.18.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07e5c39ed67e07dac4eb99bfc33d7ccc105cd7c4e09916751155e7da3e07b6bc", size = 4605744, upload-time = "2025-08-16T13:39:20.153Z" }, - { url = "https://files.pythonhosted.org/packages/3b/50/70f38159f6783b54abcd74f47617478618f98a7f68370492777c9db42156/pygit2-1.18.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12ae4ed05b48bb9f08690c3bb9f96a37a193ed44e1a9a993509a6f1711bb22ae", size = 5504072, upload-time = "2025-08-16T13:39:21.834Z" }, - { url = "https://files.pythonhosted.org/packages/e9/79/5648354eeefb85782e7b66c28ac27c1d6de51fd71b716fa59956fd7d6e30/pygit2-1.18.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:00919a2eafd975a63025d211e1c1a521bf593f6c822bc61f18c1bc661cbffd42", size = 5768382, upload-time = "2025-08-21T13:36:33.4Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e7/a679120119e92dcdbeb8add6655043db3bc7746d469b7dfc744667ebcd33/pygit2-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3f96a168bafb99e99b95f59b0090171396ad2fb07713e5505ad3e4c16a41d56a", size = 5472093, upload-time = "2025-08-16T13:39:23.031Z" }, - { url = "https://files.pythonhosted.org/packages/7d/54/e8c616a8fe12f80af64cfb9a7cba5f9455ca19c8ce68e5ef1d11d6a61d85/pygit2-1.18.2-cp312-cp312-win32.whl", hash = "sha256:ff1c99f2f342c3a3ec1847182d236088f1eb32bc6c4f93fbb5cb2514ccbe29f3", size = 1239180, upload-time = "2025-08-16T13:28:53.788Z" }, - { url = "https://files.pythonhosted.org/packages/c1/02/f4e51309c709f53575ceec53d74917cd2be536751d4d53f345a6b5427ad4/pygit2-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:507b5ea151cb963b77995af0c4fb51333f02f15a05c0b36c33cd3f5518134ceb", size = 1324567, upload-time = "2025-08-16T13:33:51.181Z" }, - { url = "https://files.pythonhosted.org/packages/0e/ff/34dc8ce51f2f9ba39a5f2b34b9a5d70563cc93a387accf562c5c36e40d2b/pygit2-1.18.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f65d6114d96cb7a21cc09e8cb0622d0388619adf9cdb5d77d94589a41996b0a8", size = 5504646, upload-time = "2025-08-16T13:39:24.164Z" }, - { url = "https://files.pythonhosted.org/packages/fd/b6/7990c465a5a6967df87323a8a90e19e9b393d238497c62d0aabcb98b9d62/pygit2-1.18.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9367df01958f7e538bc3fc665ace55de0d5b72da5b6b5f95c44ae916c39a6f51", size = 5771485, upload-time = "2025-08-16T13:39:25.386Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ad/c31064927a11cb39d4860bbf3a1a1bd944d9768e9c8faaa48b670e9359ed/pygit2-1.18.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:eb2993e44aaafac5bcd801c2926dcf87c3f8939ff1c5fb9fe0549a81acd27a03", size = 4607179, upload-time = "2025-08-16T13:39:27.264Z" }, - { url = "https://files.pythonhosted.org/packages/5d/da/29a3c808bfb42ba86e5aca226fad7871b65fc216e18e14190553a879157b/pygit2-1.18.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d5dc116d6054cb4e970160c09440da7ded36acfbc4f06ef8e0d38ac275ee12", size = 5505911, upload-time = "2025-08-16T13:39:28.623Z" }, - { url = "https://files.pythonhosted.org/packages/14/ac/c5afc7dd8ec0deb022ec8bbb5c938725438c40531ab9b6ad2b2d37730c59/pygit2-1.18.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b87e7ab87da09145cb45434e6ad0402695ca72ffb764487ecc09d28abef5507", size = 5770236, upload-time = "2025-08-21T13:37:22.808Z" }, - { url = "https://files.pythonhosted.org/packages/ac/d1/1c6882900bf6e0d3d5764937acab7c79ffadb452e33230ba8e5e9dc35695/pygit2-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a0aa809fd5572c8b1123270263720e458afc9e2069e8d0c1079feebc930e6813", size = 5474235, upload-time = "2025-08-16T13:39:30.274Z" }, - { url = "https://files.pythonhosted.org/packages/b3/be/7d8233ff8c5b39ca3d4309fa35a097999baa755e92303102599680c05604/pygit2-1.18.2-cp313-cp313-win32.whl", hash = "sha256:8c4423b08786d0fcea0c523b82bc5ec52039b01500a3391472786e89cadf1069", size = 1239177, upload-time = "2025-08-16T13:38:39.619Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f8/d61973ec64a6a7afabec5d1308794399797b44daaacf7ae1969b0f83ddab/pygit2-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:aeba6398d5c689c90c133e07f698aeb9f9693cfbb5707fccffd18f2d67d37c6d", size = 1324597, upload-time = "2025-08-16T13:43:31.309Z" }, - { url = "https://files.pythonhosted.org/packages/17/3f/da4563009011dd5e4427740ca7fe3f1005158bf6c6670727e8e9d6078d8a/pygit2-1.18.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd82d37cf5ce474a74388a04b9fb3c28670f44bc7fe970cabbb477a4d1cb871f", size = 5318756, upload-time = "2025-08-16T13:39:31.435Z" }, - { url = "https://files.pythonhosted.org/packages/7f/08/0aae26a1c74aedfe99b6f529011cd6e9f335f7840a0e92aeaa4620bcf117/pygit2-1.18.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:991fe6bcbe914507abfe81be1c96bd5039ec315354e4132efffcb03eb8b363fb", size = 5043500, upload-time = "2025-08-16T13:39:33.006Z" }, - { url = "https://files.pythonhosted.org/packages/57/91/f6655a5d171c0a080a7507b8d6855067f4365b326c0d946c6af12a633a80/pygit2-1.18.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d801d272f6331e067bd0d560671311d1ce4bb8f81536675706681ed44cc0d7dc", size = 5317765, upload-time = "2025-08-16T13:39:34.222Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c8/288d1a56092b3e01524d03eeff24a85efc4eaa3861c6813e3098cde9ee02/pygit2-1.18.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e1ff2d60420c98e6e25fd188069cddf8fa7b0417db7405ce7677a2f546e6b03", size = 5042134, upload-time = "2025-08-16T13:39:35.871Z" }, -] - -[[package]] -name = "pygit2" -version = "1.19.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.15'", - "python_full_version == '3.14.*' and sys_platform == 'win32'", - "python_full_version == '3.14.*' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", -] -dependencies = [ - { name = "cffi", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/a4/10ce00feef5c43eddacab19ae6610c4d4ef3ab77e544e9ee938772cd1c17/pygit2-1.19.2.tar.gz", hash = "sha256:cbeb3dbca9ca6ee3d5ea5d02f5e844c2d6084a2d5d6621e3e06aa2b11c645bfd", size = 803448, upload-time = "2026-03-29T14:57:27.565Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/9c/388648963f4be4bde89e32ca1a6f60adabb5f782c0e78598790b56e41967/pygit2-1.19.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70c7efc426bdae6b67465a03729b79277e7757a29a7d6550b40c18ed36cb7232", size = 5706937, upload-time = "2026-03-29T14:56:02.061Z" }, - { url = "https://files.pythonhosted.org/packages/02/4c/e89013ff45350affac11f5893b3b7b555be35d5f279ff89c1d9310872378/pygit2-1.19.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b96d6ed7251eef70cfd4126269f1044fa47bc6da6367300027c5e5d74789f7f", size = 5695668, upload-time = "2026-03-29T14:56:03.92Z" }, - { url = "https://files.pythonhosted.org/packages/6f/84/db7281407c4481b64559f400f87f60190cc59615637bbc6f0afb8681dd7d/pygit2-1.19.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f3235db6b553b8fb4d3c1dc86af9be1eab445f1d6c42f4ade5cf5f60efd333", size = 6034309, upload-time = "2026-03-29T14:56:05.282Z" }, - { url = "https://files.pythonhosted.org/packages/b9/06/d8623933341e79220ab0c14c1e2bc5a78645738ce62699f942065e8699c4/pygit2-1.19.2-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:02a35d56126f82a303668f4198c138627b3e9820f9f1eec38fff0409be274b9e", size = 4637953, upload-time = "2026-03-29T14:56:06.589Z" }, - { url = "https://files.pythonhosted.org/packages/42/27/6b20c5d424297623b22737f54a5c67ea00d498b5d2ebb98d3175d01de10c/pygit2-1.19.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e59a2e9eddd59edf999403c266c891dfc171eb95939d229ed614bc21e0c95804", size = 5794511, upload-time = "2026-03-29T14:56:07.953Z" }, - { url = "https://files.pythonhosted.org/packages/ec/cb/75a09f2319dc8798d80085b059506462af95b576d782c447f502dc807553/pygit2-1.19.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d0d2437bd5f8dbd652e8a6c318cbcaa245c0528ee48f6d64f4aaef8fd9b36b93", size = 6039969, upload-time = "2026-03-29T14:56:09.441Z" }, - { url = "https://files.pythonhosted.org/packages/34/20/fd2ac2f397fed5fab1f2838f2460226734f5a616371a388d8b0d7c995b7f/pygit2-1.19.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:60d011496e57436b0c8e3fbd4d12745777427b3f33a60710ec3d94d2f76304b7", size = 5764242, upload-time = "2026-03-29T14:56:10.947Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c0/bee8c2fce9d577cdc167e82d8999a57f997c213b5226fbaa9b977e3ce95f/pygit2-1.19.2-cp311-cp311-win32.whl", hash = "sha256:9b0d5a44ca6d77a8c0e2526f6556d9b37cc85d44983ff3549bf5adbf95d289c4", size = 945852, upload-time = "2026-03-29T14:56:12.209Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e9/9ecafac82a8729ebfc948636147235770354ee48956ad43ed628b8396a68/pygit2-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:0d9c795155086c95ef890c87b50e02792146cfaede2c715698e6988a122373e7", size = 1163883, upload-time = "2026-03-29T14:56:13.28Z" }, - { url = "https://files.pythonhosted.org/packages/02/09/24f3f55ebda489755d757dd254a612caa19e6a2bd2cbc5ccf7127e4caa30/pygit2-1.19.2-cp311-cp311-win_arm64.whl", hash = "sha256:837f0a9a0093cbb213176284d29f0ab754ded3e5af967e7ec6419d590a7da92a", size = 969221, upload-time = "2026-03-29T14:56:14.441Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2d/4fdeb7c6e044588cef9f0fca8b93fbc40fcdb2dfc64367999f45e88c0e7e/pygit2-1.19.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cf479077d48a60b09569a5bb50866d8609f434f8982058594b0d2e2950bd6fce", size = 5704810, upload-time = "2026-03-29T14:56:15.671Z" }, - { url = "https://files.pythonhosted.org/packages/c7/d8/926415c996ca283c4f7ccf63322ea23135ff17ecd1d2faaba704f6b4d883/pygit2-1.19.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e6e7eb5fb49203735627b8e1d410afe19e7d610c9a9733c11084fabd17f0920", size = 5696366, upload-time = "2026-03-29T14:56:17.241Z" }, - { url = "https://files.pythonhosted.org/packages/8c/5e/c0329db9c980552c5c853dc1e429d13d55c691749db0540ef6bc77c04a98/pygit2-1.19.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a810da2d108d6bd16115c72a1c3d69fa1528ef927719bdfc94d2cdbc4198288", size = 6035334, upload-time = "2026-03-29T14:56:19.555Z" }, - { url = "https://files.pythonhosted.org/packages/a6/39/e08003a59a4d58bbba923d1c2be683a84b7b30c7270a19ff3ea02f9558df/pygit2-1.19.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d0b8ae5a822afb2771cbacf7c75140e663bc801c44eaaf2e4017f850cb27227c", size = 4636920, upload-time = "2026-03-29T14:56:20.93Z" }, - { url = "https://files.pythonhosted.org/packages/c9/3c/d3a9ed478add4cd77403416897459750ef2f6a06d8febe452ba03f5b7a27/pygit2-1.19.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:330430b6c1a3e6d45d1f5f950734d37d849c07924b5b0475cd995a7e541e6ab1", size = 5798652, upload-time = "2026-03-29T14:56:22.773Z" }, - { url = "https://files.pythonhosted.org/packages/d4/15/5440f00005db1769062ecc9fab7059ac7ae89217a06e1976734f53c2d040/pygit2-1.19.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7b7f165d1ddfa1e0f205c1115ee10f5fea700fd3584c727b0d61a57192238449", size = 6041142, upload-time = "2026-03-29T14:56:24.618Z" }, - { url = "https://files.pythonhosted.org/packages/9d/5b/b9f9979a56606a661c0cff24c7aa6f5b1ad34118e116b7d67295be42aaad/pygit2-1.19.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e46ec6a97a5c43704473e42a926f7f20f9934ceef4f4891660313f573c4f0ab8", size = 5769220, upload-time = "2026-03-29T14:56:26.423Z" }, - { url = "https://files.pythonhosted.org/packages/30/81/9594e604eb19ae02f6a2023840e25574b0abcfc8d58c03cf96c59dd4ba72/pygit2-1.19.2-cp312-cp312-win32.whl", hash = "sha256:6b4de5469e88e7b069143f7a5d6336a4b3e7d911de4633ef18c113e416feb948", size = 946691, upload-time = "2026-03-29T14:56:27.813Z" }, - { url = "https://files.pythonhosted.org/packages/35/2d/c9bcdaef8f57ba0cdf129a6823f95cadd8ead002f38fba3465732c7517a8/pygit2-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:f064748202928f4e882501521229e378e0b7b69b0e7c433cdb2626d007745973", size = 1164290, upload-time = "2026-03-29T14:56:29.13Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d4/6e9c98d227a8e816e2ffc7304f733e8b924afd8198b16888972fedbe05bd/pygit2-1.19.2-cp312-cp312-win_arm64.whl", hash = "sha256:222f439d751799dc74c3fa75f187abdbc415d12f9a091efa66f0c9ff51893d32", size = 969330, upload-time = "2026-03-29T14:56:30.363Z" }, - { url = "https://files.pythonhosted.org/packages/c1/77/c925eee8496961729f029a4edda67485c7637248c0e730e0b41122357be5/pygit2-1.19.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:df207f93a33851a110dec70108e3f2a1c69578932919fd356303eda83a5624db", size = 5704802, upload-time = "2026-03-29T14:56:31.635Z" }, - { url = "https://files.pythonhosted.org/packages/d8/fc/d46428b7ea0ce7bd3cac73b73206a2cba50580f54b58bd704d8755d5658c/pygit2-1.19.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ae884cd53e29b3d831f5261f36048a8d5db5642dc98cd63530810e7fd9c9e60d", size = 5696329, upload-time = "2026-03-29T14:56:33.343Z" }, - { url = "https://files.pythonhosted.org/packages/35/05/a3bb39095ef31e140cbeb30abbd08fafb13ed70b656a9de095fac74a1ff5/pygit2-1.19.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0bd4059964531d20aaf4577b3761590df9cc7c9e2395df5d33f0552224331b76", size = 6036095, upload-time = "2026-03-29T14:56:34.836Z" }, - { url = "https://files.pythonhosted.org/packages/4c/cb/36ebd241351bd1ced1f126bf0b21fbb6c0d48ce36122512cc51cde83d10b/pygit2-1.19.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c3befcccc7b3b62e45da2cc1ce4095964f7606d3d15b43dc667c6ef2a2ada20d", size = 4637435, upload-time = "2026-03-29T14:56:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/36/35/779d6b8e9df0cc3236f675af5fc37e4047e1a6ab96f9c72ef5b5ed8d888b/pygit2-1.19.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1cf08b54553f997f6f60a7918504e22e7baa4ba2fbb11d1e1cb6c0a45ac7e04b", size = 5799881, upload-time = "2026-03-29T14:56:38.04Z" }, - { url = "https://files.pythonhosted.org/packages/eb/fa/cb361f4bd5342fa01a0f83b04eff8873a09771183bcb6e29947078577119/pygit2-1.19.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7f630e5a763f01b4be6e2374c487086229c8f7392a2e5591d29095c5e481da4", size = 6042342, upload-time = "2026-03-29T14:56:39.523Z" }, - { url = "https://files.pythonhosted.org/packages/2f/6f/b9ea61266eb7d568ea17d8fec63dc766ebecec23860b4e5ac5bcfbbe15d7/pygit2-1.19.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6166845f41d4f6be3353997022d64035fe3df348c8e34d7d30c5f95817fbcab4", size = 5770452, upload-time = "2026-03-29T14:56:41.306Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bb/403532429072a61d5498d17ddf6be3258953e73b6499f70a2b4e1345bb84/pygit2-1.19.2-cp313-cp313-win32.whl", hash = "sha256:5bebea045102e87dea142242298d4dd668d0227f76042f98efb1c5d5dd3db21e", size = 946658, upload-time = "2026-03-29T14:56:42.613Z" }, - { url = "https://files.pythonhosted.org/packages/01/08/6f37fb23514da02345889d7be7cea899d2a348fa4871492ea9a8837e70e4/pygit2-1.19.2-cp313-cp313-win_amd64.whl", hash = "sha256:7bbfeb680821001a5c1b6959da1eae906806c90c9992ae4564d3ea83a27bb19f", size = 1164264, upload-time = "2026-03-29T14:56:43.753Z" }, - { url = "https://files.pythonhosted.org/packages/90/b9/d11220d5f0cfc92895b02814ab36ac94edbf46ae1b9dc3077c457d03d718/pygit2-1.19.2-cp313-cp313-win_arm64.whl", hash = "sha256:033d489186145cf67b2c60840d2a308f6b1e9d641de12417c447f9829dacde70", size = 969348, upload-time = "2026-03-29T14:56:44.892Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1b/1a935baeb29958d7e50a52c7a963ce5963f24fa8a5024e1082d43b07a770/pygit2-1.19.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f5effee3f4ad0d9c89b34ebecf1acee26f6b117ef3c51345ad022bd521fd8dca", size = 5706909, upload-time = "2026-03-29T14:56:46.249Z" }, - { url = "https://files.pythonhosted.org/packages/a7/86/4bb6f196b13bd7ed825f4e931fb7152a36d01e8de24c8de44425702ad18c/pygit2-1.19.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ed09804dc6b6de0be07a71443122fd7b6458f8466d1134003c2dea55af886fc", size = 5696293, upload-time = "2026-03-29T14:56:48.173Z" }, - { url = "https://files.pythonhosted.org/packages/2f/64/d674b3f854cecf53bccbc21a095734759cd3599624578ed3c78602eb22a3/pygit2-1.19.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d114aa066e718d5ef3401b366dcb0b37b549c3b3b139f5f0042bd7059a4b0f7", size = 6038057, upload-time = "2026-03-29T14:56:50.118Z" }, - { url = "https://files.pythonhosted.org/packages/64/eb/2ce41735e27ee0f28f786aae62ea371f3beec0ef38d1712a2910421386c4/pygit2-1.19.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1becc06071acfdd5ae8523aaeab6d4b0930b2bcb08f5eb878e052e61275000b", size = 4641475, upload-time = "2026-03-29T14:56:51.581Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8d/35f6096c42caefb715ca29e991279b493275c0051a3c83081099644d3f4a/pygit2-1.19.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:06d2db3bdbf2906eb17112adb14a2fe6e34c1b2bce39c91819f59208d4e56665", size = 5801738, upload-time = "2026-03-29T14:56:53.043Z" }, - { url = "https://files.pythonhosted.org/packages/fc/31/dbbaa7a433008fec9046cc293c012ae5d5a31e66321e1fb05d64ae131e54/pygit2-1.19.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8a7e99e5dfc8d3ed8f849b9688bc3fb1bdc86f34af28159140a8d1e18b703dd8", size = 6043074, upload-time = "2026-03-29T14:56:54.774Z" }, - { url = "https://files.pythonhosted.org/packages/f0/33/b34266efba6917081dafb50976155c2d31cd377f277e67348a810245c4b4/pygit2-1.19.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7659d59eba6c4a706978237d02e8d719f960843df749256f1656c938c1f4142b", size = 5770986, upload-time = "2026-03-29T14:56:56.796Z" }, - { url = "https://files.pythonhosted.org/packages/c6/ab/813f3af50987020cd90e810da147ebef16a61003b9af995070ec338634ba/pygit2-1.19.2-cp314-cp314-win32.whl", hash = "sha256:e551908dfd93d471c0b08cfcddbe4924417865aae6ac90d20f3815c9483b0a82", size = 967943, upload-time = "2026-03-29T14:56:58.196Z" }, - { url = "https://files.pythonhosted.org/packages/22/00/24df5ac51a316e36a07bbf9e4c91fade523b9e80a84d5c9e7acd10b22248/pygit2-1.19.2-cp314-cp314-win_amd64.whl", hash = "sha256:eb1fd8538372230f8a471a5f3629901bc2fc7df992853d97bedc8fa269a9caf3", size = 1194774, upload-time = "2026-03-29T14:56:59.721Z" }, - { url = "https://files.pythonhosted.org/packages/a7/ee/274a91b28864fd9c5cdd2949b4d7e0909fd6a89785a46308de098d3a22cd/pygit2-1.19.2-cp314-cp314-win_arm64.whl", hash = "sha256:3cc461245b70be45a936e925744e67a45f6b0ee970aeb8e7a385dd7fe9f40877", size = 996677, upload-time = "2026-03-29T14:57:01.013Z" }, - { url = "https://files.pythonhosted.org/packages/4f/22/3c05a56918e6fda5deb53aeb7436959a8880f4cc436a76771771479693de/pygit2-1.19.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:cb686bc81dfe5b13937047643fddb1dd253dae33b4a9ca62858c49ed294e05be", size = 5710172, upload-time = "2026-03-29T14:57:02.672Z" }, - { url = "https://files.pythonhosted.org/packages/59/eb/2fdd485c01b478c77dd2e949b424a61c70a8750ffb13c5035fe3edf6a8f6/pygit2-1.19.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ec3538d81963bd05dd16c0de75938a9173966e1c853ad7848ebcb60bcfe21b0", size = 5699256, upload-time = "2026-03-29T14:57:04.401Z" }, - { url = "https://files.pythonhosted.org/packages/51/f4/f0608bb369da15f2973dfb33e7b7cba4c9bc8164e6a01e3f15e65e85efef/pygit2-1.19.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d02ebb50ea082d9631bbfda12787eb5324b8880a72cb8e3b9f11e9b323ad5781", size = 6096321, upload-time = "2026-03-29T14:57:06.33Z" }, - { url = "https://files.pythonhosted.org/packages/6e/1b/816d3700dc8bcc9028c5f81b190f2d770d1cb9cd2ccdd39939d0b6730718/pygit2-1.19.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a3643e4dd569c2909e88586659f617f70315680ca3c619cd8ff9e9c28726c25", size = 4696179, upload-time = "2026-03-29T14:57:08.552Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a6/0fc82f07c4dfee5856626c5d4b422c32e14cac0204eb1e9558ac0d717b07/pygit2-1.19.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:697e3684cb4ef2bfc084623c3f680d5ae8b4c8afca31a35a731b7b70204d9f83", size = 5853368, upload-time = "2026-03-29T14:57:10.449Z" }, - { url = "https://files.pythonhosted.org/packages/f8/60/0393786d7810b7f83def3738cb9be1a735cf6b555dc219d90f46010b87b1/pygit2-1.19.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:173165b54a2affed918302193f12dd369bec981b1d77904cdcd76b966a824e15", size = 6099319, upload-time = "2026-03-29T14:57:12.166Z" }, - { url = "https://files.pythonhosted.org/packages/13/ad/22e30e630a147e10a912e085c4cb816a0dc39bee8d39493b40101f3da4c7/pygit2-1.19.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ff32adce1a48d76b10e790b36784f6cb5ef40699b758c8b84f7f53f13b13d237", size = 5822074, upload-time = "2026-03-29T14:57:13.84Z" }, - { url = "https://files.pythonhosted.org/packages/4b/08/71ea683386887a1aab8f9b8c282b6df7ce7fae45fc7c9959719c78baebba/pygit2-1.19.2-cp314-cp314t-win32.whl", hash = "sha256:637d7c023f6623da35cf02cd1091f260c709730dd615367f4524ec8d771d0898", size = 972866, upload-time = "2026-03-29T14:57:15.26Z" }, - { url = "https://files.pythonhosted.org/packages/da/67/efbde3954bdcbadfb61d183badd9a3e730c4ad94ed10966abe0b177abe0c/pygit2-1.19.2-cp314-cp314t-win_amd64.whl", hash = "sha256:2805a8abd546e38298ce5daf33e444960e483acce68cbfb5d338e72ad5bc3503", size = 1201537, upload-time = "2026-03-29T14:57:16.72Z" }, - { url = "https://files.pythonhosted.org/packages/0f/0c/28ae2c74038d1c51092f525658986a261f1963ec96528e7b41e721387343/pygit2-1.19.2-cp314-cp314t-win_arm64.whl", hash = "sha256:376a0d2c27c082f6bd8b97fd8ffc1939f16dfe8374ec846deee9b11151b37b8a", size = 997795, upload-time = "2026-03-29T14:57:17.878Z" }, - { url = "https://files.pythonhosted.org/packages/f8/47/8ca340fc8f0f5ec8ab9f8e96bb814a64a95f3836034fac00bb733c1f357c/pygit2-1.19.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4c2d397c887ff5a26b48ebd1bb9c66d2195ad377f0a44e05b79c462fff4040cd", size = 5649264, upload-time = "2026-03-29T14:57:19.193Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c4/8d26b20cb09ae862302b7b023e9089c70946cbdaf4f3cb8c1d4c7ba94a09/pygit2-1.19.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:69a0d377ee46110bbeea9e4191edee05132d1e7ac84b7cdebc640bc45868a2ec", size = 5646929, upload-time = "2026-03-29T14:57:20.717Z" }, - { url = "https://files.pythonhosted.org/packages/d3/35/b71ac88cda21ad440577543a317052eca9ab4f0119e9c2d74baa135731c4/pygit2-1.19.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57d113a3eb61621ce16ceaa4bae7a93ffe525fd69da905445a0cf798d3601815", size = 5562858, upload-time = "2026-03-29T14:57:22.962Z" }, - { url = "https://files.pythonhosted.org/packages/08/d9/c419105e997031a34a1a7d87e832a3a0e5a4c1501bc2784250d000b1c044/pygit2-1.19.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e0bc207abbef4d3be3bd37e0711e6974a148d41806fdc932aef9bb244b157c4", size = 5315754, upload-time = "2026-03-29T14:57:24.956Z" }, - { url = "https://files.pythonhosted.org/packages/e8/20/b52bc0ef2c5358d08e20e2d9fa8ae911283f3d20a7b9e52ec4a338b94983/pygit2-1.19.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:219c03bdbca59bd1df12b8bc7974b429872f4267aa2287ec0237c268593c0c5e", size = 1132796, upload-time = "2026-03-29T14:57:26.411Z" }, -] - -[[package]] -name = "pygments" -version = "2.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, -] - -[[package]] -name = "pyjwt" -version = "2.13.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, -] - -[package.optional-dependencies] -crypto = [ - { name = "cryptography" }, -] - -[[package]] -name = "pytest" -version = "9.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, -] - -[[package]] -name = "pytest-asyncio" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, - { name = "pytest" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, -] - -[[package]] -name = "pytest-cov" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "coverage", extra = ["toml"] }, - { name = "pluggy" }, - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, -] - -[[package]] -name = "pytest-timeout" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/82/4c9ecabab13363e72d880f2fb504c5f750433b2b6f16e99f4ec21ada284c/pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a", size = 17973, upload-time = "2025-05-05T19:44:34.99Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" }, -] - -[[package]] -name = "pytest-xdist" -version = "3.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "execnet" }, - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, -] - -[[package]] -name = "python-discovery" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "platformdirs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/48/60/e88788207d81e46362cfbef0d4aaf4c0f49efc3c12d4c3fa3f542c34ebec/python_discovery-1.3.1.tar.gz", hash = "sha256:62f6db28064c9613e7ca76cb3f00c38c839a07c31c00dfe7ed0986493d2150a6", size = 68011, upload-time = "2026-05-12T20:53:36.336Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-py3-none-any.whl", hash = "sha256:ed188687ebb3b82c01a17cd5ac62fc94d9f6487a7f1a0f9dfe89753fec91039c", size = 33185, upload-time = "2026-05-12T20:53:34.969Z" }, -] - -[[package]] -name = "python-dotenv" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, -] - -[[package]] -name = "python-multipart" -version = "0.0.31" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/7e/9b35ad8f3d9ca680f7c87a88f19612fdd8da9796c4d3b46e560ac79dcc4a/python_multipart-0.0.31.tar.gz", hash = "sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680", size = 46689, upload-time = "2026-06-04T08:27:49.014Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/1e/7f7f299527a5a8ad90acd5f2f78dfa6c8495c6301a3205106ea68a84de96/python_multipart-0.0.31-py3-none-any.whl", hash = "sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28", size = 29996, upload-time = "2026-06-04T08:27:47.804Z" }, -] - -[[package]] -name = "pytokens" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/24/f206113e05cb8ef51b3850e7ef88f20da6f4bf932190ceb48bd3da103e10/pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", size = 161522, upload-time = "2026-01-30T01:02:50.393Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e9/06a6bf1b90c2ed81a9c7d2544232fe5d2891d1cd480e8a1809ca354a8eb2/pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", size = 246945, upload-time = "2026-01-30T01:02:52.399Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/f6fb1007a4c3d8b682d5d65b7c1fb33257587a5f782647091e3408abe0b8/pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", size = 259525, upload-time = "2026-01-30T01:02:53.737Z" }, - { url = "https://files.pythonhosted.org/packages/04/92/086f89b4d622a18418bac74ab5db7f68cf0c21cf7cc92de6c7b919d76c88/pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", size = 262693, upload-time = "2026-01-30T01:02:54.871Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7b/8b31c347cf94a3f900bdde750b2e9131575a61fdb620d3d3c75832262137/pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", size = 103567, upload-time = "2026-01-30T01:02:56.414Z" }, - { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, - { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, - { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, - { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, - { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, - { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, - { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, - { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, - { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, - { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, - { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, - { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, - { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, - { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, - { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, - { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, - { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, -] - -[[package]] -name = "pywin32" -version = "311" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, - { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, - { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, - { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, - { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, - { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, - { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, - { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, - { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, - { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, - { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, - { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, -] - -[[package]] -name = "radon" -version = "6.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama" }, - { name = "mando" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/6d/98e61600febf6bd929cf04154537c39dc577ce414bafbfc24a286c4fa76d/radon-6.0.1.tar.gz", hash = "sha256:d1ac0053943a893878940fedc8b19ace70386fc9c9bf0a09229a44125ebf45b5", size = 1874992, upload-time = "2023-03-26T06:24:38.868Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl", hash = "sha256:632cc032364a6f8bb1010a2f6a12d0f14bc7e5ede76585ef29dc0cecf4cd8859", size = 52784, upload-time = "2023-03-26T06:24:33.949Z" }, -] - -[[package]] -name = "referencing" -version = "0.37.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, -] - -[[package]] -name = "regex" -version = "2026.5.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/0e/49aee608ad09480e7fd276898c99ec6192985fa331abe4eb3a986094490b/regex-2026.5.9.tar.gz", hash = "sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270", size = 416074, upload-time = "2026-05-09T23:15:19.37Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ed/0ad2c8edf634918eb4484365d3819fa7bd7f58daf807fe7fb21812c316e5/regex-2026.5.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a9e1328e17c84c1a5d22ec9f785ecef4a967fab9a42b6a8dc3bcbebd0a0c9e44", size = 489438, upload-time = "2026-05-09T23:11:29.374Z" }, - { url = "https://files.pythonhosted.org/packages/89/a9/4ed972ad263963b860b7c3e86e0e1bcc791def47b43b8c8efe57e710f139/regex-2026.5.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfe1ce50cbfb569d74e1e4337da6468961f31dbea55fd85aa5de59c0947a805a", size = 291270, upload-time = "2026-05-09T23:11:33.254Z" }, - { url = "https://files.pythonhosted.org/packages/16/81/075930d9fa28c4ea1f53398dd015ee7c882f623539759113cda1257f4b82/regex-2026.5.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15ee42209947f4ca045412eae98416317238163618ace2a8e54f99586a466733", size = 289198, upload-time = "2026-05-09T23:11:35.769Z" }, - { url = "https://files.pythonhosted.org/packages/d4/c8/5cdfbf0b5dc6599e1b6131eff43262e5275d4ec3469ce10216061659aadb/regex-2026.5.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4bb445ff3f725f59df8f6014edb547ee928ec7023a774f6a39a3f953038cbb2", size = 784765, upload-time = "2026-05-09T23:11:37.689Z" }, - { url = "https://files.pythonhosted.org/packages/cd/ca/ae5fd6edc59b7f84b904b31d6ec39a860cbcecd10f64bd5a062ca83a4864/regex-2026.5.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:446ddd671e43ab535810c4b21cff7104945c701d4a14d1e6d1cd6f4e445a8bea", size = 852115, upload-time = "2026-05-09T23:11:39.973Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ce/a91cf555afb51f3b74a182e24ba073b91ea7bb64592fc4b315c111bb19fd/regex-2026.5.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b92817338591505f282cf3864c145244b1edcf5381d237038df955001091538", size = 899503, upload-time = "2026-05-09T23:11:42.48Z" }, - { url = "https://files.pythonhosted.org/packages/55/7f/725a0a2b245a4cf0c4bab29d0e97c74285d94136a65d1b55a6459a583502/regex-2026.5.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6b8a143aca6c39b446ea8092cde25cc8fe9304d4f5fecfbc1a9dbb0282703c2", size = 794093, upload-time = "2026-05-09T23:11:44.681Z" }, - { url = "https://files.pythonhosted.org/packages/e3/2a/996efbd59ce6b5d4a09e3af6180ceb62af171f4a9a6fb557d2f0ae0d462b/regex-2026.5.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0f03aa6898aaaac4592479821df16e68e8d0e29e903e65d8f2dfb2f19028a989", size = 786234, upload-time = "2026-05-09T23:11:46.882Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0a/8731e8b8806174c9cdd5903f80a14990331c1f42fc4209b540952e9e010d/regex-2026.5.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ed457d8e98ae812ed7732bef7bf78de78e834eae0372a74e23ca90ef21d910f9", size = 769895, upload-time = "2026-05-09T23:11:49.324Z" }, - { url = "https://files.pythonhosted.org/packages/9a/0b/932473194bd563f342a412ae2ffbbd6da608306a2bc4e99249a41c2b0b92/regex-2026.5.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71b61c5bfe1c806332defc42ad6c780b3c55f661986d7f40283a3a88274b4c00", size = 774991, upload-time = "2026-05-09T23:11:51.261Z" }, - { url = "https://files.pythonhosted.org/packages/98/80/9523d196010031df25f7177ee0a467efbee436324038e5d99def17a57515/regex-2026.5.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3b1e39888c5e0c7d92cea4fc777396c4a90363b05de75d02eb459a4752200808", size = 848790, upload-time = "2026-05-09T23:11:53.232Z" }, - { url = "https://files.pythonhosted.org/packages/3c/07/56987b35e89edf47e4a38cf2845aeee476bfa688a6bdbd3e820cda461dc1/regex-2026.5.9-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:6ba42b2e7e7f46cf68cc6a5ca36fa07959f9bbd9c6bdcc47b6ee76549a590248", size = 757679, upload-time = "2026-05-09T23:11:55.82Z" }, - { url = "https://files.pythonhosted.org/packages/04/2a/ff713fff0c566507c06a4ce2dc0ae8e7eeebc88811a95fc81cf1e7d534dd/regex-2026.5.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c010eb8caca74bdb40c07498d7ece26b4428fd3f04aa8a72c9ac6f79e8faaac6", size = 837116, upload-time = "2026-05-09T23:11:57.934Z" }, - { url = "https://files.pythonhosted.org/packages/77/90/df6d982b03e3614785c6937ba51b57f6733d97d2ee1c9bc7531dbfab3a54/regex-2026.5.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a6a563446a41adc451393dc6b8e6ad87979efaee3c8738690a8d1b08ebead1b4", size = 782081, upload-time = "2026-05-09T23:11:59.607Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/4e88a5f7c3e98489aac4dd23142723d907b2a595b4a6abcbacabefeded09/regex-2026.5.9-cp310-cp310-win32.whl", hash = "sha256:954cc214c04663ee6d266fc61739cad83054683048de65c5bd1d640ad28098ac", size = 266247, upload-time = "2026-05-09T23:12:01.116Z" }, - { url = "https://files.pythonhosted.org/packages/6a/40/4b224cb0582b2dca1786726e6cdabe26abbf757d7f6718332f186da155d2/regex-2026.5.9-cp310-cp310-win_amd64.whl", hash = "sha256:b310768746dd314ea6e2ff4cc89ef215426813396ff4e94ee8e6f7096c8b6e03", size = 278416, upload-time = "2026-05-09T23:12:03.2Z" }, - { url = "https://files.pythonhosted.org/packages/12/4d/014fbe803204cab0947ee428f09f658a29632053dde1d3c6176bb4f0fd4c/regex-2026.5.9-cp310-cp310-win_arm64.whl", hash = "sha256:19c16ceb4a267a8789e25733e583983eeab9f0f8664e66b0bd1c5d21f14c2d4b", size = 270413, upload-time = "2026-05-09T23:12:04.649Z" }, - { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, - { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, - { url = "https://files.pythonhosted.org/packages/03/d0/4db86529117320de0c84afd90e70bb47434625875e34fcef9d8c127c5b16/regex-2026.5.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:992604d02e6d9c6d786c24a706a71ecffe1020fc1ef264044474cd81fa2c3919", size = 792310, upload-time = "2026-05-09T23:12:11.416Z" }, - { url = "https://files.pythonhosted.org/packages/07/78/fe4800cd322f862ecffd2d553409b20d80650e5ed71b9d178f853d020b82/regex-2026.5.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9411dd64ca95477225734a93dfc8583b51916b8d5942f99d6cac21e09965451", size = 861721, upload-time = "2026-05-09T23:12:13.681Z" }, - { url = "https://files.pythonhosted.org/packages/b5/d0/b3618a895dd8feb897c61bb2954edd265e1767d82a01d53065d5871127a3/regex-2026.5.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4a3ff360dfb836fecdb93a4598f9d6e2ac81e3e397125145c6221bf58cf4c", size = 906460, upload-time = "2026-05-09T23:12:15.443Z" }, - { url = "https://files.pythonhosted.org/packages/33/6f/1481597e859ef19508b345eec4afd1416ed6e6b459c75a64026ef193aecf/regex-2026.5.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc", size = 799843, upload-time = "2026-05-09T23:12:16.892Z" }, - { url = "https://files.pythonhosted.org/packages/73/59/955734c803f59108deccba3597ae440c76b62a652733c0006e6243758420/regex-2026.5.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f079e50a0d3cc3cd5091fa9ff45869a2e6b2cd35895731edafb0327901a8d86d", size = 773610, upload-time = "2026-05-09T23:12:19.127Z" }, - { url = "https://files.pythonhosted.org/packages/68/8f/70c04a236d651c81881dac42ef8538bddda6121434509d0a22d9e601503b/regex-2026.5.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4ebe8f0b5ec5a5024dc4a4c59f444c4e9afc5f2abdbb8962065b75d27fb971f9", size = 781645, upload-time = "2026-05-09T23:12:20.806Z" }, - { url = "https://files.pythonhosted.org/packages/1d/96/05c7434d88185e5d27fe54aeb74df86bd77cd79f52f0b4eae54faa8fea70/regex-2026.5.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:97cf3bc1b7d7d2306772ec07366c80d9df00ff79e79cea32898883a646d2fae2", size = 854473, upload-time = "2026-05-09T23:12:22.465Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c1/6e3d8202d981f3117004bf341ee74893ba4ba8a9fbaf4b94615846550a08/regex-2026.5.9-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0f9eede6a5cbdc02d4978090186390936e1776a7d1359b21e41014c609880bcf", size = 763311, upload-time = "2026-05-09T23:12:24.351Z" }, - { url = "https://files.pythonhosted.org/packages/93/c7/e7737f1526b3fb32bd4c337fd6c71c3ebb5c8296fc34d11197e0955d2e35/regex-2026.5.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:01f0f5f55f4b64dacec85dc116d3c05fd23ad3ff037bbc73a2085775953c2611", size = 844593, upload-time = "2026-05-09T23:12:26.341Z" }, - { url = "https://files.pythonhosted.org/packages/a5/27/0daffb1a535bb39f422c3d200f4ab023c71110ad66a32b366bee708baba0/regex-2026.5.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c", size = 789167, upload-time = "2026-05-09T23:12:27.975Z" }, - { url = "https://files.pythonhosted.org/packages/ce/fc/294fe4fac4f2ed67207b17471815870c1c45b3a489e08e0ac96daea16ef6/regex-2026.5.9-cp311-cp311-win32.whl", hash = "sha256:8676474c07469d6f33dd1085ca2cd45f65785f32518f2b20e36d9953ca07f994", size = 266249, upload-time = "2026-05-09T23:12:30.141Z" }, - { url = "https://files.pythonhosted.org/packages/d0/b0/8dce459f6245bcf8f6e9f23ac9569f1a0f15c131cc0745e82b43226204cf/regex-2026.5.9-cp311-cp311-win_amd64.whl", hash = "sha256:246de9d60aa3f8538b519834dd95cbf276ea263d6a7bd5a3666dc3fa0230505b", size = 278423, upload-time = "2026-05-09T23:12:31.676Z" }, - { url = "https://files.pythonhosted.org/packages/db/8d/f9aeff6ad63a3ef720386f2907e6d34a35a510a6e498ebad28b0fb3f6ab6/regex-2026.5.9-cp311-cp311-win_arm64.whl", hash = "sha256:d726ca3f0d76969bf1e8e477d160d3d666bbf999f6860bd314889e5345782046", size = 270420, upload-time = "2026-05-09T23:12:33.194Z" }, - { url = "https://files.pythonhosted.org/packages/50/9b/6550044bc44e17c84d312c031c2ec42fbdb6a4ec4e29093be3a172d08772/regex-2026.5.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57eeeb05db7979413dec5438f2db21d7ecbba787cde7a711df1a6f6df672aa06", size = 490451, upload-time = "2026-05-09T23:12:34.72Z" }, - { url = "https://files.pythonhosted.org/packages/1e/95/fc7ba4303b5a0f92446a12ee6778ef2c6c799233f5060042a31bf390cfe9/regex-2026.5.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:398c521292f4c7fb807001dcd54694d3a1fcafc179a36ad9cc56f98df85930b6", size = 292112, upload-time = "2026-05-09T23:12:36.285Z" }, - { url = "https://files.pythonhosted.org/packages/54/4b/ee27938d1b2c443e89a9a10e00d2d19aa5ee300cd3d61140644e93bb083e/regex-2026.5.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7a7c26137296beba7784de6eba69c6a93a63ccebc385e4962fe67e267a91225", size = 289599, upload-time = "2026-05-09T23:12:38.089Z" }, - { url = "https://files.pythonhosted.org/packages/d8/dd/ba103dc19614e25f3880800ca67ce093d6e21b325d72b8383c7bf906e9fa/regex-2026.5.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6441cc660d76107934a09c22167200839a0e89604a6297f78a974e66e931d2c0", size = 796732, upload-time = "2026-05-09T23:12:40.062Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e7/f035b4fd858b050b0080bf302968dc0f59ba34e391872d54936758e6844e/regex-2026.5.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:91328f1c23d47595ca3ef0a7557fa129c5a23404b775c770697d2f35b33e0107", size = 865440, upload-time = "2026-05-09T23:12:42.059Z" }, - { url = "https://files.pythonhosted.org/packages/0a/51/8cd301ecc899aea28124357f729f4272f44de7806fc7ca02490bfbe253e8/regex-2026.5.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:93a7860539414dddaefba2b40f8771765ae17949d4c7182b876ce429e11a8309", size = 912329, upload-time = "2026-05-09T23:12:44.373Z" }, - { url = "https://files.pythonhosted.org/packages/cc/1e/3fbe2fa1e8cebd62f3bb7d3321cff1640aca2e240b51d9bd624aad949260/regex-2026.5.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd2810d22146b6d838acc5ec15602cb6b47920aa4e33015df3868eedfd20bab8", size = 801239, upload-time = "2026-05-09T23:12:46.268Z" }, - { url = "https://files.pythonhosted.org/packages/17/2f/6f6008682bf2cf98040a0d3153a8e557b6ab728d7713d045cee4ce544ab8/regex-2026.5.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daff2bdbaf1d23e52fdff7c0b7bc2048b68f978df6a4d107ac981f94caef2e66", size = 777054, upload-time = "2026-05-09T23:12:48.051Z" }, - { url = "https://files.pythonhosted.org/packages/19/2b/eee0d20a6842ba04df4b8847a920b57ef56853f14ef85405473e586b605a/regex-2026.5.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4eeb011098fcb77af513dcef521a3dbecbf8849b1e38940759d293b7a93f5026", size = 785098, upload-time = "2026-05-09T23:12:49.851Z" }, - { url = "https://files.pythonhosted.org/packages/4a/98/6fc1e6410feefb92159edaed5041992bfe390e8d26c721865434acbca558/regex-2026.5.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ea9c8ecfa1b73c73b626534d6626e5340d429630943672b8480724f44e84b962", size = 860095, upload-time = "2026-05-09T23:12:51.666Z" }, - { url = "https://files.pythonhosted.org/packages/18/a3/bd855e0f2cb1a978ecf6fa6bb69632dd9c3f6ea3b81cde62fde14c9daec7/regex-2026.5.9-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:cd2846168eb9ee3c513902bc8225409cb1caab31d04728b145171fa1625d9621", size = 765762, upload-time = "2026-05-09T23:12:53.413Z" }, - { url = "https://files.pythonhosted.org/packages/dc/66/0ae8c092e60b14c79d24f8e0b7f0aea5bfbffdcab00b5483d13404d3c3a5/regex-2026.5.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:39617fb0cde9c0e6306dc70e3bfc096f3da793219879f7ae7aa341a69fbdcf6d", size = 852100, upload-time = "2026-05-09T23:12:55.256Z" }, - { url = "https://files.pythonhosted.org/packages/21/de/8dfde60fc1b21c946a893ba273403b72617edb261370cb1087099a83f088/regex-2026.5.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd03c4f0e33280d15cae17159b899245d6b7c53d21def19b263b39655061f5ce", size = 789479, upload-time = "2026-05-09T23:12:57.573Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1c/bdcc98f9a4af4fdd166c74941174619ccff4726d3ce32faa8e9a2ecd38dd/regex-2026.5.9-cp312-cp312-win32.whl", hash = "sha256:164eba9b755ea6f244b0d881196fbc1fac09714e9782c9e2732b813142033c8e", size = 266699, upload-time = "2026-05-09T23:12:59.14Z" }, - { url = "https://files.pythonhosted.org/packages/78/87/240d36864f9e48ace85f72e79ced97ceb7f27ce87739a947dcb834b4e6bc/regex-2026.5.9-cp312-cp312-win_amd64.whl", hash = "sha256:86f40a5d6444db30a125c9c9177e6b25dad981cbc37451fd838f145e6edac92e", size = 277783, upload-time = "2026-05-09T23:13:00.789Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b5/7b30f312b0669dff5beebe5b0989dc2d1a312b1a44fab852199c387a5b96/regex-2026.5.9-cp312-cp312-win_arm64.whl", hash = "sha256:96f5f58b54a063d7ea9dca08e1cf57bfe10499c4d579ee672da284f57f5f0070", size = 270513, upload-time = "2026-05-09T23:13:02.426Z" }, - { url = "https://files.pythonhosted.org/packages/aa/da/797e91ecec6f84135da778ddce78c20e0af5d2a15c26f87a81bc3eadb6db/regex-2026.5.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d626b84406444b165fc0ba981604edea39f0588ff1f92baa23fe50799ea9afdb", size = 490303, upload-time = "2026-05-09T23:13:04.382Z" }, - { url = "https://files.pythonhosted.org/packages/44/da/bf30abaaa737b58f4a4b8c4a03659e02fd92092c822e0197ed9e0daab917/regex-2026.5.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d7bdc0ab8f3dd7e1b4f9ab88634e13374669db86bb3c72e8292f07ae313f539f", size = 292019, upload-time = "2026-05-09T23:13:06.022Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e7/d0eaf5713828417b9e5648cf81fa9bacd4961f6ab98c380c2034f8716e35/regex-2026.5.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a8820737949116ffff55fe18f9fc644530063ba6ebfcb8314239416e78f1347c", size = 289468, upload-time = "2026-05-09T23:13:08.214Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9b/b3fdd62b003baa1a9b593cd8c8699c9651c2e80cc21a5c715707983c42d7/regex-2026.5.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0fbdbac82cb3e4450d0ccde7d7a35607f4cb2dd9fba4b8b69bfaf8c9fa6aed", size = 796749, upload-time = "2026-05-09T23:13:10.573Z" }, - { url = "https://files.pythonhosted.org/packages/d4/30/66ab84588765f5b4b271a9ca09ef7ce2b87caa95176ec3d2ad65d7bc4902/regex-2026.5.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:57e8915c7986aa33d25e4d3629cef711cd2863f2961b10409f0c04cb8b7d9020", size = 865445, upload-time = "2026-05-09T23:13:12.523Z" }, - { url = "https://files.pythonhosted.org/packages/1a/89/f05169e8588aac365f35ffc7f3bc3184f095ef4cfded7cfaa3c7fd5dbd89/regex-2026.5.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:508f56a89ba9cb26e4168cbc37dbd60a28d82430a9e18ad1d25fe0883c314ca2", size = 912322, upload-time = "2026-05-09T23:13:14.281Z" }, - { url = "https://files.pythonhosted.org/packages/30/e1/c93444052cf41581f3c884ab3fb5823daf0992f11cd4388d4275ca610558/regex-2026.5.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6d189041f15691cfa2b6c4290448ec221244d225b3f5fe9e7771b34ffcdf6e2", size = 801269, upload-time = "2026-05-09T23:13:16.569Z" }, - { url = "https://files.pythonhosted.org/packages/50/fe/0cf96b882f540e62e8b9956599798203d599c44cf4c77917ca27400ff69b/regex-2026.5.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e82db382b44d0111b22601c509c89f64434816c9e0eef9d1989cda8cc6ff1c04", size = 777085, upload-time = "2026-05-09T23:13:18.675Z" }, - { url = "https://files.pythonhosted.org/packages/23/5c/d78d4924e7fc875557b9e9b768423925fdfaac5549d06da7810019a9bd26/regex-2026.5.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2acfb48634f64996b57f90f39afa692ff362162722581921fe92239a59960f3c", size = 785153, upload-time = "2026-05-09T23:13:20.525Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e0/5214774090e7b4524dcea3e3c4aa74141d43043f8beb49c1599db1c8b53a/regex-2026.5.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d29eebfc9525db68cad3c97eedd7f754fa265aa5cd0cf4f863b2421e1b48fc9f", size = 860164, upload-time = "2026-05-09T23:13:22.263Z" }, - { url = "https://files.pythonhosted.org/packages/6e/e1/4a57a83350319b1271f0d7a249b8672513ed928b237a741631270de6caea/regex-2026.5.9-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:debb893095e944091c16e641a6e33c1b0f4cb61ab945ec5afbf53ce7068834d8", size = 765731, upload-time = "2026-05-09T23:13:24.277Z" }, - { url = "https://files.pythonhosted.org/packages/12/f4/499e74a20c156fc75836ee04a72a38d1a063978f600937f9760467beb1b0/regex-2026.5.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d659eee77986549c9ea45b861c7567e44d6287c3dc9a4565478853f7b9fe2ff6", size = 852062, upload-time = "2026-05-09T23:13:26.125Z" }, - { url = "https://files.pythonhosted.org/packages/5b/92/7eebc0d0a01e78629695f342ba17e0deaff8fb45e79cc0d7b98287da6e3e/regex-2026.5.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2efa205e6d98b24d1f3ab395c11aa15cdf10935bca283d0285e0499c284fba21", size = 789577, upload-time = "2026-05-09T23:13:27.814Z" }, - { url = "https://files.pythonhosted.org/packages/05/a4/018e71f7d2ad48c1ebe6d3ae0026f9b7cb4802fd15c7cc02fdf724355102/regex-2026.5.9-cp313-cp313-win32.whl", hash = "sha256:f3844f134e834076677dd369976e9f5068679fcb8e50102fdf6b7ac96a3ec127", size = 266691, upload-time = "2026-05-09T23:13:29.549Z" }, - { url = "https://files.pythonhosted.org/packages/e6/1d/861a93719fb9ee7dbfc3761b3797b7a3e112a5d42c6129459d2d741be9b5/regex-2026.5.9-cp313-cp313-win_amd64.whl", hash = "sha256:3527bb4942d2c14552155406cdedd906567456821848aed1cb4933a391bf5eca", size = 277747, upload-time = "2026-05-09T23:13:31.859Z" }, - { url = "https://files.pythonhosted.org/packages/d9/c6/0a2436ae4da1ba76e51cb98943c6838a9a721faa40ebe2dce07694ae34e3/regex-2026.5.9-cp313-cp313-win_arm64.whl", hash = "sha256:56a33f191f17d8c417f99945ebdc1e691d3af9605d86ec68c7e54a57e3e17af6", size = 270500, upload-time = "2026-05-09T23:13:33.525Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e9/d21346f7b60ed58789371358ed66b09d00f832e1bd7c06e55d9da5679882/regex-2026.5.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:01f28d868834624c934b8d2e0aa1c8341337e37831f4a012f18a5afcba4cbaf3", size = 494172, upload-time = "2026-05-09T23:13:35.935Z" }, - { url = "https://files.pythonhosted.org/packages/c4/43/fd1177a2032037c681baecdb3422ee4e1424aec4e4f470ef47793d325274/regex-2026.5.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:48036f6374aaa79eb3b754ec29c61d1c6b1606749d705a13f8854fa2539671f6", size = 293952, upload-time = "2026-05-09T23:13:38.307Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7d/9fbf919768368d3f8a4f6c692cf2aa61e482b2b81ec6a298ace4cbf02480/regex-2026.5.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b96350aa424e79d4fd6b567b344dcbe2b2d6bfc48dfe7717587e1fa6d43da6ff", size = 292314, upload-time = "2026-05-09T23:13:40.353Z" }, - { url = "https://files.pythonhosted.org/packages/e2/6c/e41bfeecb589716843e7c4df09ba46ff2a42961457afece19059d85caeef/regex-2026.5.9-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f3af7a4903c5c04a11a196a5aa75cdd7dd3f8508132f9fb3259d9f5908e3b88", size = 811681, upload-time = "2026-05-09T23:13:42.543Z" }, - { url = "https://files.pythonhosted.org/packages/87/83/a5c1c525fba0aa656e88ad0face0b1829788ef4c2fb6b26df58aa1151b84/regex-2026.5.9-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e87577720152d2caae19fe2baaf1f8d5ca12091e9e229f03915c37d1e4b9178", size = 871135, upload-time = "2026-05-09T23:13:44.326Z" }, - { url = "https://files.pythonhosted.org/packages/18/d4/80882e799e440dd878b0979cbebf8fa4d54624a332c83037c7a701649e3f/regex-2026.5.9-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c8b9b9d294cfea3cd19c718ade7cc93492b2c4991abd9a68d0b3477ae6d8e100", size = 917265, upload-time = "2026-05-09T23:13:47.295Z" }, - { url = "https://files.pythonhosted.org/packages/ae/ff/8db60211e2286e396aad7dc7725356c502bff0901ea05bd6cdc2e1a042b9/regex-2026.5.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:728d8bfd28a8845c8b6bc5dc7ce010453d206396786c0765c2740cb65f37791e", size = 816311, upload-time = "2026-05-09T23:13:49.885Z" }, - { url = "https://files.pythonhosted.org/packages/4c/47/742ef579c61730f8d268e5cf1f9ce0e37e2ea041ad0f5644724f2378e463/regex-2026.5.9-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7e30b874d341fac767d7df5a0870540541c2c054b80cfaac116e8d367a8a7ff2", size = 785498, upload-time = "2026-05-09T23:13:52.25Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ab/cb0999802dcb0fb95b1ab005e8d4163d8afdd67efc2cb6b6630ac13f8cb1/regex-2026.5.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fd190e88a895a8901325fad284a3f74ea52b1da8525b76cc811fa9b1edf0ce2b", size = 801348, upload-time = "2026-05-09T23:13:54.127Z" }, - { url = "https://files.pythonhosted.org/packages/7d/62/8ca59a24c55bc34d166eefaf3717bd77772f329fdbf984d86581e0a3571c/regex-2026.5.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:8e76e8161ad00694cfce6767d5dea860c6391ac5b83e5c3a39661e696f11fc7e", size = 866493, upload-time = "2026-05-09T23:13:56.067Z" }, - { url = "https://files.pythonhosted.org/packages/8d/3d/30f2ae62cef3278bb5bb821f467277a55fb73f01032cf85997e15e8289a8/regex-2026.5.9-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ddda5340e6c01a293027dd46232fa79eaff1b48058ce7a98f572b6445b088041", size = 772811, upload-time = "2026-05-09T23:13:57.867Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ae/7d2089bcd78ad0c0161bc684339df50032acb438a7bd3305e7ddb1193cec/regex-2026.5.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:205109e96b3cf5adf8f4cd62bedde9487feb282b9497a3535451e5a24cd706a0", size = 856584, upload-time = "2026-05-09T23:13:59.679Z" }, - { url = "https://files.pythonhosted.org/packages/a9/29/92ff47f75990131ea4f24ba17819e5a9d141e10819807e09addd73409af6/regex-2026.5.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dfbe4579b9f08036aa7d101d1835437a20783574ac66327e6b29b4018a138081", size = 803453, upload-time = "2026-05-09T23:14:01.978Z" }, - { url = "https://files.pythonhosted.org/packages/04/99/eff29f1037dcab36702c9ee5d6858cf1ce2336ea8ea2987f64245b99ea5e/regex-2026.5.9-cp313-cp313t-win32.whl", hash = "sha256:ed2c9e8068b614c574d8d30e543d617cf5379b0535d46f97ef00e904745a08b5", size = 269951, upload-time = "2026-05-09T23:14:03.661Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9d/8870b8981d27b22cda77bb26a5ac7ebfa9c7d9e0dea195a834a82380e748/regex-2026.5.9-cp313-cp313t-win_amd64.whl", hash = "sha256:b46b0f094dc1d3b90356c85a0bd2c9bafc4a6a190b9d6f8ddd5a033b6e088ed4", size = 281240, upload-time = "2026-05-09T23:14:05.56Z" }, - { url = "https://files.pythonhosted.org/packages/72/b1/3379415e8f135c13ac551353397cc4fe97b4978f3cac73c5fcbcded548b8/regex-2026.5.9-cp313-cp313t-win_arm64.whl", hash = "sha256:872acc074bd29ffc9913ecdfedf6ea77502312ca44a4aa0d3779089c6069d8de", size = 272383, upload-time = "2026-05-09T23:14:07.843Z" }, - { url = "https://files.pythonhosted.org/packages/13/3e/9c3cd292d8808b3645a2ce517e200179b6d0e903f176300bd8b542e14de5/regex-2026.5.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:1bd7587a2948b4085195d5a3374eaf4a425dc3e55784c038175355ecf3bbbf8a", size = 490376, upload-time = "2026-05-09T23:14:09.64Z" }, - { url = "https://files.pythonhosted.org/packages/60/70/d43ee8a2ca0a8b68d167f21658b85520ac0574617c7f320367c5047f7556/regex-2026.5.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:dea2e88e1cce4522496cce630e11e67b98b7076620bc4336c3f674bc21a375f4", size = 291964, upload-time = "2026-05-09T23:14:11.424Z" }, - { url = "https://files.pythonhosted.org/packages/21/91/9d50b433828d8e74196904e168a43abf1e6e88b2a15d47ed742456720c37/regex-2026.5.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2099f7e7ff7b6aa3192312650a56e91cc091e49d50b04e4f6f8b6e28b3b27f1c", size = 289682, upload-time = "2026-05-09T23:14:13.123Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/b835e3cafbb9d977736912436259ff551d60919f7d7b3d37d46659c63564/regex-2026.5.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecd353045824e4477562a2ac718c25799cdaaa41f7aa925a806a8a3e6848a5b9", size = 796996, upload-time = "2026-05-09T23:14:14.923Z" }, - { url = "https://files.pythonhosted.org/packages/2c/a6/9f992d00019166b9de01c546dd4549bc679f2a68df11b877740b0760b7c2/regex-2026.5.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:65c8c8c37377794bd5b2f3ebe51919042bf17aec802e23c833d89782ed0c78af", size = 866089, upload-time = "2026-05-09T23:14:17.757Z" }, - { url = "https://files.pythonhosted.org/packages/e0/08/4d32af657e049b19cb62b02e46e38fe1518797bfb2203ee93a510b21b0dc/regex-2026.5.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b73ab8afcf66c622db143d1c6fda4e58e4d537ee4f125229ad47b1ab80f34c0", size = 911530, upload-time = "2026-05-09T23:14:20.353Z" }, - { url = "https://files.pythonhosted.org/packages/d9/27/2af43dd1dc201d1fecefda64a45f4ad0995855b92724f795a777b402ee69/regex-2026.5.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0de5cf193997384ed2ca6f1cd4f78055b255d93d82d5a8cd6ba0d11c10b167e4", size = 800643, upload-time = "2026-05-09T23:14:22.265Z" }, - { url = "https://files.pythonhosted.org/packages/a4/dd/23a249047013b5321d4a60c4d2437462086f601b061776a525e5fba2a59f/regex-2026.5.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d641a8c9a61618047796d572a39a79b26167b0411d2c3031937b2fe2d081e2cf", size = 777223, upload-time = "2026-05-09T23:14:24.179Z" }, - { url = "https://files.pythonhosted.org/packages/94/6a/e85ed9538cd19586d0465076a4578a12e093ce776d15f3f8ce92733a8dd6/regex-2026.5.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:24b2355ef5cc9aa5b8f07d17704face1c166fdcc2290fa7bd6e6c925655a8346", size = 785760, upload-time = "2026-05-09T23:14:26.065Z" }, - { url = "https://files.pythonhosted.org/packages/2a/c4/f25473209438638e947c55f9156fd8f236f74169229028cc99116380868e/regex-2026.5.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a24852d3c29ad9e47593593d8a247c44ccc3d0548ef12c822d6ed0810affe676", size = 860891, upload-time = "2026-05-09T23:14:28.17Z" }, - { url = "https://files.pythonhosted.org/packages/f9/f7/f4f86e3c74419c37370e91f150ae0c2ef7d34b2e0e4cdd5da046a02e4022/regex-2026.5.9-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:916714069da19329ef7de197dcbc77bb3104145c7c2c864dbfbe318f46b88b14", size = 765891, upload-time = "2026-05-09T23:14:30.06Z" }, - { url = "https://files.pythonhosted.org/packages/26/70/704d8e13765939146b1cd0ef4e2feb71d7929727d2290f026eed10095955/regex-2026.5.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:fa411799ca8da32a8d38d020a88faa5b6f91657d284761352940ecf9f7c3bbdd", size = 851380, upload-time = "2026-05-09T23:14:32.123Z" }, - { url = "https://files.pythonhosted.org/packages/26/29/1a13582a8460038edc38e49f64ceb0dd7c60f5caba77571f4bf6601965d9/regex-2026.5.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1e6da47d679b7010ef27556b6e0f99771b744936db1792a10ceac6547ae1503e", size = 789350, upload-time = "2026-05-09T23:14:34.799Z" }, - { url = "https://files.pythonhosted.org/packages/73/56/3dcafe34fc72e271d62ad9a291801e88a1457bb251c132f15fcc2e5aad1a/regex-2026.5.9-cp314-cp314-win32.whl", hash = "sha256:98bd73080e8756255137e1bd3f3f00295bbc5aa383c0e0f973920e9134d7c4ad", size = 272130, upload-time = "2026-05-09T23:14:36.729Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9c/02eebf0be95efe416c664db7fb8b6b05b7a0b06a7544f2884f2558b0526f/regex-2026.5.9-cp314-cp314-win_amd64.whl", hash = "sha256:ff8d372ac2acdc048d1c19916f27ee61bc5722728458ba6ca5052f2c72d51763", size = 280999, upload-time = "2026-05-09T23:14:39.126Z" }, - { url = "https://files.pythonhosted.org/packages/70/5a/1dd1abee76cb7a846a0bcf42fdc87e5720c3c33c24f3e37814310a513d9f/regex-2026.5.9-cp314-cp314-win_arm64.whl", hash = "sha256:e1d93bf647916292e8edcec150c07ddf3dc50179ccaf770c04a7f9e452155372", size = 273500, upload-time = "2026-05-09T23:14:41.059Z" }, - { url = "https://files.pythonhosted.org/packages/86/c1/c5f619b0057a7965cb78ec559c1d7a45ce8c99a35bea95483d64959a93d9/regex-2026.5.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:83d0ee4a57d1c87cb549e195ec300b8f0ec3a82eba66d835e4e2ed8634fe4499", size = 494269, upload-time = "2026-05-09T23:14:42.869Z" }, - { url = "https://files.pythonhosted.org/packages/05/2c/5d01f1aee33de4bbe60c8452945bfc8477ca7c5ae4450f6bfe711036cb36/regex-2026.5.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d3d7eb5c9a7f6df82ed3cfac9beb93882a5cbcb5b8b157b56cb2b3b276574ac1", size = 293954, upload-time = "2026-05-09T23:14:44.822Z" }, - { url = "https://files.pythonhosted.org/packages/7a/fe/e8988b2ae2108c6ef71bd4aa8d87fbe257976dd0810e826cd75f701c68b6/regex-2026.5.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:075160bf16658e16d35233300b8453aac25de4cbea808d22348b6979668e924d", size = 292405, upload-time = "2026-05-09T23:14:47.211Z" }, - { url = "https://files.pythonhosted.org/packages/79/34/d2b0937faa7859263f7f0a3c6b103a1296306be6952dc173d0154e9a2f49/regex-2026.5.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45375819235558a4ff1c4971dc32881f022613abdb180128f5cb4768c1765a1c", size = 811855, upload-time = "2026-05-09T23:14:49.21Z" }, - { url = "https://files.pythonhosted.org/packages/80/fe/daf53a47457a8486db66c66c01ceb9c2303eecee3f87197f1e77eb1a736d/regex-2026.5.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ead4b163ac30a29574510cd4b3e2e985ac5290c05fc7095557d6a5f403fc31b5", size = 871189, upload-time = "2026-05-09T23:14:51.555Z" }, - { url = "https://files.pythonhosted.org/packages/1c/75/058fc4470cbfbf57d800aff1a0022b929a3f9fa553ee10a0cdf2070eb31f/regex-2026.5.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8c6e4218fbdfbcd4f6c19efca40930d24a621bf4b48cb76bc6640543bd28ef20", size = 917485, upload-time = "2026-05-09T23:14:53.633Z" }, - { url = "https://files.pythonhosted.org/packages/88/e7/179cfda3a28bc843b5c6cfe7f79f23489c791ed95f151083803660878432/regex-2026.5.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6351571c8a42b505eb555c0dc47d740d0fb66977dc142919eea6f4325b7c56a0", size = 816369, upload-time = "2026-05-09T23:14:56.198Z" }, - { url = "https://files.pythonhosted.org/packages/41/90/6f0cc422071688266d344fca8462d787cba0a2c144acb25721f9a61ec265/regex-2026.5.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:002205cafd2a9e78c6290c7d1df277bf3277b3b7a30e0b4bb0dac2e2e3f7cb2d", size = 785869, upload-time = "2026-05-09T23:14:58.602Z" }, - { url = "https://files.pythonhosted.org/packages/02/67/a31f1760f09c27b251ef39e9beb541f462cf977381d067faa764c2c0e393/regex-2026.5.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8abd33fef90b2a9efac5557d6033ca82d1195ed3a15fea5af15ba7b463c6a63b", size = 801427, upload-time = "2026-05-09T23:15:00.642Z" }, - { url = "https://files.pythonhosted.org/packages/e3/c4/1a80654597b6bc1e1ea0494824c31200e8a956abe290afae9b19a166a148/regex-2026.5.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:31037c82eccb44b7ea2e9e221d7c01429430e989a1f4b91ea5a855f6017b509a", size = 866482, upload-time = "2026-05-09T23:15:03.384Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/960724e06482c08466ff5611e242e86f80062949cdf6b4b9cc317b9dd93d/regex-2026.5.9-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5604dfd046dc37eca90250fc3be938b076c8059fa772ac0ed6f499b0f0fb0415", size = 773022, upload-time = "2026-05-09T23:15:05.625Z" }, - { url = "https://files.pythonhosted.org/packages/50/a8/a9979c3e7918280e93159ebcab5ef1a65116dd4f3bd6091be0eae4a126e8/regex-2026.5.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e1b1b4e496afbb24f4a62aba855ee4f88f25578927697b340702e48c9ee6bc2", size = 856642, upload-time = "2026-05-09T23:15:07.966Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d4/a9b732f2f0072c0ab12227483abb24fffcb9f73f8a2b203df0a6d0434735/regex-2026.5.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:be3372b9df6ddecff6486d37e19095a7b4973137caf5512407a89f4455361f41", size = 803552, upload-time = "2026-05-09T23:15:10.215Z" }, - { url = "https://files.pythonhosted.org/packages/d5/fe/1b3113817447a1d4155e4ac76d2e072f42c0bcba2f43fa8a0e756ea2cd91/regex-2026.5.9-cp314-cp314t-win32.whl", hash = "sha256:3ddd90103f9e5c471c49c7852ecc1fe27c7e45eb99e977aefe7caa4e779f4f58", size = 275746, upload-time = "2026-05-09T23:15:12.609Z" }, - { url = "https://files.pythonhosted.org/packages/92/73/93d42045302636c91f2e5ef588b65b84b01428f28ec77de256b1dfdfbe5c/regex-2026.5.9-cp314-cp314t-win_amd64.whl", hash = "sha256:ca518ed29c46eecba6010b15f1b9a479314d2de409536e71b6a13aa04e3b8a77", size = 285685, upload-time = "2026-05-09T23:15:15.086Z" }, - { url = "https://files.pythonhosted.org/packages/da/80/35b4c33c804a165a7f55289afda3ea9e3eb6d15800341a2d66455c0f1f30/regex-2026.5.9-cp314-cp314t-win_arm64.whl", hash = "sha256:5e41809d2683fcde7d5a8c87a6567ba1fb1ce0de9f31bff578de00a4b2d76daa", size = 275713, upload-time = "2026-05-09T23:15:16.98Z" }, -] - -[[package]] -name = "requests" -version = "2.34.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, -] - -[[package]] -name = "rich" -version = "15.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, -] - -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, - { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, - { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, - { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, - { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, - { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, - { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, - { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, - { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, - { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, - { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, - { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, - { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, - { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, - { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, - { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, - { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, - { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, - { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, - { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, - { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, - { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, - { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, - { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, -] - -[[package]] -name = "ruff" -version = "0.15.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/21/a7d5c126d5b557715ef81098f3db2fe20f622a039ff2e626af28d674ab80/ruff-0.15.13.tar.gz", hash = "sha256:f9d89f17f7ba7fb2ed42921f0df75da797a9a5d71bc39049e2c687cf2baf44b7", size = 4678180, upload-time = "2026-05-14T13:44:37.869Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/61/11d458dc6ac22504fd8e237b29dfd40504c7fbbcc8930402cfe51a8e63ed/ruff-0.15.13-py3-none-linux_armv6l.whl", hash = "sha256:444b580fc72fd6887e650acd3e575e18cdc79dbcf42fb4030b491057921f61f8", size = 10738279, upload-time = "2026-05-14T13:44:18.7Z" }, - { url = "https://files.pythonhosted.org/packages/86/ca/caa871ee7be718c45256fada4e16a218ee3e33f0c4a46b729a60a24912e6/ruff-0.15.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6590d009e7cb7ebf36f83dbdd44a3fa48a0994ff6f1cdc1b08006abe58f98dc7", size = 11124798, upload-time = "2026-05-14T13:44:06.427Z" }, - { url = "https://files.pythonhosted.org/packages/d3/19/43f5f2e568dddde567fc41f8471f9432c09563e19d3e617a48cfa52f8f0a/ruff-0.15.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1c26d2f66163deeb6e08d8b39fbbe983ce3c71cea06a6d7591cfd1421793c629", size = 10460761, upload-time = "2026-05-14T13:44:04.375Z" }, - { url = "https://files.pythonhosted.org/packages/99/df/cf938cd6de3003178f03ad7c1ea2a6c099468c03a35037985070b37e76be/ruff-0.15.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbd6f94b434f896308e4d57fb7bfde0d02b99f7a64b3bdab0fdfa6a864203a5", size = 10804451, upload-time = "2026-05-14T13:44:25.221Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7d/5d0973129b154ded2225729169d7068f26b467760b146493fde138415f23/ruff-0.15.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf3259f3be4d181bda591da5db2571aed6853c6a048157756448020bc6c5cd22", size = 10534285, upload-time = "2026-05-14T13:44:08.888Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e3/6b999bbc66cd51e5f073842bc2a3995e99c5e0e72e16b15e7261f7abf57a/ruff-0.15.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae9c17e5eb4430c154e76abc25d79a318190f5a997f38fb6b114416c5319ffc9", size = 11312063, upload-time = "2026-05-14T13:44:11.274Z" }, - { url = "https://files.pythonhosted.org/packages/af/5a/642639e9f5db04f1e97fbd6e091c6fd20725bdf072fb114d00eefb9e6eb8/ruff-0.15.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e2e39bff6c341f4b577a21b801326fab0b11847f48fcaa83f00a113c9b3cb55", size = 12183079, upload-time = "2026-05-14T13:44:01.634Z" }, - { url = "https://files.pythonhosted.org/packages/19/4c/7585735f6b53b0f12de13618b2f7d250a844f018822efc899df2e7b8295f/ruff-0.15.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8d9a8e08013542e94d3220bc5b62cc3e5ef87c5f74bff367d3fac14fab013e6", size = 11440833, upload-time = "2026-05-14T13:43:59.043Z" }, - { url = "https://files.pythonhosted.org/packages/e8/31/bf1a0803d077e679cfeee5f2f67290a0fa79c7385b5d9a8c17b9db2c48f0/ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc411dfebe5eebe55ce041c6ae080eb7668955e866daa2fbb16692a784f1c4ca", size = 11434486, upload-time = "2026-05-14T13:44:27.761Z" }, - { url = "https://files.pythonhosted.org/packages/e1/4e/62c9b999875d4f14db80f277c030578f5e249c9852d65b7ac7ad0b43c041/ruff-0.15.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:768494eb08b9cee54e2fd27969966f74db5a57f6eaa7a90fcb3306af34dfc4bd", size = 11385189, upload-time = "2026-05-14T13:44:13.704Z" }, - { url = "https://files.pythonhosted.org/packages/fc/89/7e959047a104df3eb12863447c110140191fc5b6c4f379ea2e803fcdb0e4/ruff-0.15.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:fb75f9a3a7e42ffe117d734494e6c5e5cb3565d66e12612cb63d0e572a41a5b6", size = 10781380, upload-time = "2026-05-14T13:43:56.734Z" }, - { url = "https://files.pythonhosted.org/packages/ff/52/5fd18f3b88cab63e88aa11516b3b4e1e5f720e5c330f8dbe5c26210f41f8/ruff-0.15.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8cb74dd33bb2f6613faf7fc03b660053b5ac4f80e706d5788c6335e2a8048d51", size = 10540605, upload-time = "2026-05-14T13:44:20.748Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e0/9e35f338990d3e41a82875ff7053ffe97541dae81c9d02143177f381d572/ruff-0.15.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7ef823f817fcd191dc934e984be9cf4094f808effa16f2542ad8e821ba02bbf2", size = 11036554, upload-time = "2026-05-14T13:44:16.256Z" }, - { url = "https://files.pythonhosted.org/packages/c2/13/070fb048c24080fba188f66371e2a92785be257ad02242066dc7255ac6e9/ruff-0.15.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f345a13937bd7f09f6f5d19fa0721b0c103e00e7f62bc67089a8e5e037719e0b", size = 11528133, upload-time = "2026-05-14T13:44:22.808Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8c/b1e1666aef7fc6555094d73ae6cd981701781ae85b97ceefc0eebd0b4668/ruff-0.15.13-py3-none-win32.whl", hash = "sha256:4044f94208b3b05ba0fc4a4abd0558cf4d6459bd18325eead7fd8cc66f909b41", size = 10721455, upload-time = "2026-05-14T13:44:35.697Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a6/870a3e8a50590bb92be184ad928c2922f088b00d9dc5c5ec7b924ee08c22/ruff-0.15.13-py3-none-win_amd64.whl", hash = "sha256:7064884d442b7d477b4e7473d12da7f08851d2b1982763c5d3f388a19468a1a4", size = 11900409, upload-time = "2026-05-14T13:44:30.389Z" }, - { url = "https://files.pythonhosted.org/packages/9b/36/9c015cd052fca743dae8cb2aeb16b551444787467db42ceab0fc968865af/ruff-0.15.13-py3-none-win_arm64.whl", hash = "sha256:2471da9bd1068c8c064b5fd9c0c4b6dddffd6369cb1cd68b29993b1709ff1b21", size = 11179336, upload-time = "2026-05-14T13:44:33.026Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, -] - -[[package]] -name = "sse-starlette" -version = "3.4.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "starlette" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, -] - -[[package]] -name = "starlette" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, -] - -[[package]] -name = "tiktoken" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "regex" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/b3/2cb7c17b6c4cf8ca983204255d3f1d95eda7213e247e6947a0ee2c747a2c/tiktoken-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970", size = 1051991, upload-time = "2025-10-06T20:21:34.098Z" }, - { url = "https://files.pythonhosted.org/packages/27/0f/df139f1df5f6167194ee5ab24634582ba9a1b62c6b996472b0277ec80f66/tiktoken-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16", size = 995798, upload-time = "2025-10-06T20:21:35.579Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5d/26a691f28ab220d5edc09b9b787399b130f24327ef824de15e5d85ef21aa/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030", size = 1129865, upload-time = "2025-10-06T20:21:36.675Z" }, - { url = "https://files.pythonhosted.org/packages/b2/94/443fab3d4e5ebecac895712abd3849b8da93b7b7dec61c7db5c9c7ebe40c/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134", size = 1152856, upload-time = "2025-10-06T20:21:37.873Z" }, - { url = "https://files.pythonhosted.org/packages/54/35/388f941251b2521c70dd4c5958e598ea6d2c88e28445d2fb8189eecc1dfc/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a", size = 1195308, upload-time = "2025-10-06T20:21:39.577Z" }, - { url = "https://files.pythonhosted.org/packages/f8/00/c6681c7f833dd410576183715a530437a9873fa910265817081f65f9105f/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892", size = 1255697, upload-time = "2025-10-06T20:21:41.154Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d2/82e795a6a9bafa034bf26a58e68fe9a89eeaaa610d51dbeb22106ba04f0a/tiktoken-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1", size = 879375, upload-time = "2025-10-06T20:21:43.201Z" }, - { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" }, - { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" }, - { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" }, - { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" }, - { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" }, - { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" }, - { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" }, - { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, - { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, - { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, - { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" }, - { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" }, - { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" }, - { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, - { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, - { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" }, - { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" }, - { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, - { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, - { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, - { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, - { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" }, - { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" }, - { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, - { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" }, - { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, - { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" }, - { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" }, - { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" }, - { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" }, - { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, - { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, - { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" }, - { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, -] - -[[package]] -name = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, -] - -[[package]] -name = "tree-sitter" -version = "0.25.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/7c/0350cfc47faadc0d3cf7d8237a4e34032b3014ddf4a12ded9933e1648b55/tree-sitter-0.25.2.tar.gz", hash = "sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20", size = 177961, upload-time = "2025-09-25T17:37:59.751Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/d4/f7ffb855cb039b7568aba4911fbe42e4c39c0e4398387c8e0d8251489992/tree_sitter-0.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7", size = 146749, upload-time = "2025-09-25T17:37:16.475Z" }, - { url = "https://files.pythonhosted.org/packages/9a/58/f8a107f9f89700c0ab2930f1315e63bdedccbb5fd1b10fcbc5ebadd54ac8/tree_sitter-0.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234", size = 137766, upload-time = "2025-09-25T17:37:18.138Z" }, - { url = "https://files.pythonhosted.org/packages/19/fb/357158d39f01699faea466e8fd5a849f5a30252c68414bddc20357a9ac79/tree_sitter-0.25.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5", size = 599809, upload-time = "2025-09-25T17:37:19.169Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a4/68ae301626f2393a62119481cb660eb93504a524fc741a6f1528a4568cf6/tree_sitter-0.25.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7", size = 627676, upload-time = "2025-09-25T17:37:20.715Z" }, - { url = "https://files.pythonhosted.org/packages/69/fe/4c1bef37db5ca8b17ca0b3070f2dff509468a50b3af18f17665adcab42b9/tree_sitter-0.25.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696", size = 624281, upload-time = "2025-09-25T17:37:21.823Z" }, - { url = "https://files.pythonhosted.org/packages/d4/30/3283cb7fa251cae2a0bf8661658021a789810db3ab1b0569482d4a3671fd/tree_sitter-0.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444", size = 127295, upload-time = "2025-09-25T17:37:22.977Z" }, - { url = "https://files.pythonhosted.org/packages/88/90/ceb05e6de281aebe82b68662890619580d4ffe09283ebd2ceabcf5df7b4a/tree_sitter-0.25.2-cp310-cp310-win_arm64.whl", hash = "sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37", size = 113991, upload-time = "2025-09-25T17:37:23.854Z" }, - { url = "https://files.pythonhosted.org/packages/7c/22/88a1e00b906d26fa8a075dd19c6c3116997cb884bf1b3c023deb065a344d/tree_sitter-0.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b", size = 146752, upload-time = "2025-09-25T17:37:24.775Z" }, - { url = "https://files.pythonhosted.org/packages/57/1c/22cc14f3910017b7a76d7358df5cd315a84fe0c7f6f7b443b49db2e2790d/tree_sitter-0.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26", size = 137765, upload-time = "2025-09-25T17:37:26.103Z" }, - { url = "https://files.pythonhosted.org/packages/1c/0c/d0de46ded7d5b34631e0f630d9866dab22d3183195bf0f3b81de406d6622/tree_sitter-0.25.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266", size = 604643, upload-time = "2025-09-25T17:37:27.398Z" }, - { url = "https://files.pythonhosted.org/packages/34/38/b735a58c1c2f60a168a678ca27b4c1a9df725d0bf2d1a8a1c571c033111e/tree_sitter-0.25.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c", size = 632229, upload-time = "2025-09-25T17:37:28.463Z" }, - { url = "https://files.pythonhosted.org/packages/32/f6/cda1e1e6cbff5e28d8433578e2556d7ba0b0209d95a796128155b97e7693/tree_sitter-0.25.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f", size = 629861, upload-time = "2025-09-25T17:37:29.593Z" }, - { url = "https://files.pythonhosted.org/packages/f9/19/427e5943b276a0dd74c2a1f1d7a7393443f13d1ee47dedb3f8127903c080/tree_sitter-0.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc", size = 127304, upload-time = "2025-09-25T17:37:30.549Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d9/eef856dc15f784d85d1397a17f3ee0f82df7778efce9e1961203abfe376a/tree_sitter-0.25.2-cp311-cp311-win_arm64.whl", hash = "sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5", size = 113990, upload-time = "2025-09-25T17:37:31.852Z" }, - { url = "https://files.pythonhosted.org/packages/3c/9e/20c2a00a862f1c2897a436b17edb774e831b22218083b459d0d081c9db33/tree_sitter-0.25.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960", size = 146941, upload-time = "2025-09-25T17:37:34.813Z" }, - { url = "https://files.pythonhosted.org/packages/ef/04/8512e2062e652a1016e840ce36ba1cc33258b0dcc4e500d8089b4054afec/tree_sitter-0.25.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c", size = 137699, upload-time = "2025-09-25T17:37:36.349Z" }, - { url = "https://files.pythonhosted.org/packages/47/8a/d48c0414db19307b0fb3bb10d76a3a0cbe275bb293f145ee7fba2abd668e/tree_sitter-0.25.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99", size = 607125, upload-time = "2025-09-25T17:37:37.725Z" }, - { url = "https://files.pythonhosted.org/packages/39/d1/b95f545e9fc5001b8a78636ef942a4e4e536580caa6a99e73dd0a02e87aa/tree_sitter-0.25.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9", size = 635418, upload-time = "2025-09-25T17:37:38.922Z" }, - { url = "https://files.pythonhosted.org/packages/de/4d/b734bde3fb6f3513a010fa91f1f2875442cdc0382d6a949005cd84563d8f/tree_sitter-0.25.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac", size = 631250, upload-time = "2025-09-25T17:37:40.039Z" }, - { url = "https://files.pythonhosted.org/packages/46/f2/5f654994f36d10c64d50a192239599fcae46677491c8dd53e7579c35a3e3/tree_sitter-0.25.2-cp312-cp312-win_amd64.whl", hash = "sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897", size = 127156, upload-time = "2025-09-25T17:37:41.132Z" }, - { url = "https://files.pythonhosted.org/packages/67/23/148c468d410efcf0a9535272d81c258d840c27b34781d625f1f627e2e27d/tree_sitter-0.25.2-cp312-cp312-win_arm64.whl", hash = "sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5", size = 113984, upload-time = "2025-09-25T17:37:42.074Z" }, - { url = "https://files.pythonhosted.org/packages/8c/67/67492014ce32729b63d7ef318a19f9cfedd855d677de5773476caf771e96/tree_sitter-0.25.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd", size = 146926, upload-time = "2025-09-25T17:37:43.041Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9c/a278b15e6b263e86c5e301c82a60923fa7c59d44f78d7a110a89a413e640/tree_sitter-0.25.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601", size = 137712, upload-time = "2025-09-25T17:37:44.039Z" }, - { url = "https://files.pythonhosted.org/packages/54/9a/423bba15d2bf6473ba67846ba5244b988cd97a4b1ea2b146822162256794/tree_sitter-0.25.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053", size = 607873, upload-time = "2025-09-25T17:37:45.477Z" }, - { url = "https://files.pythonhosted.org/packages/ed/4c/b430d2cb43f8badfb3a3fa9d6cd7c8247698187b5674008c9d67b2a90c8e/tree_sitter-0.25.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614", size = 636313, upload-time = "2025-09-25T17:37:46.68Z" }, - { url = "https://files.pythonhosted.org/packages/9d/27/5f97098dbba807331d666a0997662e82d066e84b17d92efab575d283822f/tree_sitter-0.25.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae", size = 631370, upload-time = "2025-09-25T17:37:47.993Z" }, - { url = "https://files.pythonhosted.org/packages/d4/3c/87caaed663fabc35e18dc704cd0e9800a0ee2f22bd18b9cbe7c10799895d/tree_sitter-0.25.2-cp313-cp313-win_amd64.whl", hash = "sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b", size = 127157, upload-time = "2025-09-25T17:37:48.967Z" }, - { url = "https://files.pythonhosted.org/packages/d5/23/f8467b408b7988aff4ea40946a4bd1a2c1a73d17156a9d039bbaff1e2ceb/tree_sitter-0.25.2-cp313-cp313-win_arm64.whl", hash = "sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8", size = 113975, upload-time = "2025-09-25T17:37:49.922Z" }, - { url = "https://files.pythonhosted.org/packages/07/e3/d9526ba71dfbbe4eba5e51d89432b4b333a49a1e70712aa5590cd22fc74f/tree_sitter-0.25.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0", size = 146776, upload-time = "2025-09-25T17:37:50.898Z" }, - { url = "https://files.pythonhosted.org/packages/42/97/4bd4ad97f85a23011dd8a535534bb1035c4e0bac1234d58f438e15cff51f/tree_sitter-0.25.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87", size = 137732, upload-time = "2025-09-25T17:37:51.877Z" }, - { url = "https://files.pythonhosted.org/packages/b6/19/1e968aa0b1b567988ed522f836498a6a9529a74aab15f09dd9ac1e41f505/tree_sitter-0.25.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab", size = 609456, upload-time = "2025-09-25T17:37:52.925Z" }, - { url = "https://files.pythonhosted.org/packages/48/b6/cf08f4f20f4c9094006ef8828555484e842fc468827ad6e56011ab668dbd/tree_sitter-0.25.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358", size = 636772, upload-time = "2025-09-25T17:37:54.647Z" }, - { url = "https://files.pythonhosted.org/packages/57/e2/d42d55bf56360987c32bc7b16adb06744e425670b823fb8a5786a1cea991/tree_sitter-0.25.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0", size = 631522, upload-time = "2025-09-25T17:37:55.833Z" }, - { url = "https://files.pythonhosted.org/packages/03/87/af9604ebe275a9345d88c3ace0cf2a1341aa3f8ef49dd9fc11662132df8a/tree_sitter-0.25.2-cp314-cp314-win_amd64.whl", hash = "sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721", size = 130864, upload-time = "2025-09-25T17:37:57.453Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6e/e64621037357acb83d912276ffd30a859ef117f9c680f2e3cb955f47c680/tree_sitter-0.25.2-cp314-cp314-win_arm64.whl", hash = "sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f", size = 117470, upload-time = "2025-09-25T17:37:58.431Z" }, -] - -[[package]] -name = "tree-sitter-c" -version = "0.24.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/c9/3834f3d9278251aea7312274971bc4c45b17aec2490fd4b884d93bd7019a/tree_sitter_c-0.24.2.tar.gz", hash = "sha256:1628584df0299b5a340aa63f8e67b6c97c91517f52fa7e7a4c557e40adb330a9", size = 228397, upload-time = "2026-04-22T08:06:14.491Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/28/c1/26ed17730ec2c17bedc1b673349e5e0a466c578e3eb0327c3b73cf52bf97/tree_sitter_c-0.24.2-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:4d4579a8b54f0a442f903d88d3304cab77cd5c2031d4015baa4f2f8e15d6dcb7", size = 81016, upload-time = "2026-04-22T08:06:07.208Z" }, - { url = "https://files.pythonhosted.org/packages/c1/1c/1140db75e7e375cda3c68792a33826c4fd40b5b98c3259d93c75f6c8368f/tree_sitter_c-0.24.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:97bc80a224d48215d4e6e6376bf30d114f4c317b8145ff1b02afe785d4ba7bdd", size = 86213, upload-time = "2026-04-22T08:06:08.136Z" }, - { url = "https://files.pythonhosted.org/packages/e9/8c/0dfb88d726f8821d1c4c36042f092be974a800afd734307a595b8604190c/tree_sitter_c-0.24.2-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5041ef67eb68ce6bc8bb0b1f8ef3a5585ce523dae0c7eec109ab0627dd75aede", size = 94264, upload-time = "2026-04-22T08:06:08.918Z" }, - { url = "https://files.pythonhosted.org/packages/87/78/47dc570e7aee6b0a1ecc2520b30639cc2b06003154c9ab0672d86bf720d5/tree_sitter_c-0.24.2-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c098bedcd5ac86ff93fa734d51d1dd86aed40fd5ed7d634c7af11380a0469969", size = 94560, upload-time = "2026-04-22T08:06:09.852Z" }, - { url = "https://files.pythonhosted.org/packages/29/37/75d59d3f74f4cfc00f04472917e933d8a9c9fdc6eff980ef9552e010e6aa/tree_sitter_c-0.24.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:82842c5a5f2acd93f4de10038c33ac179c8979defc39376f990348d6289e933b", size = 94023, upload-time = "2026-04-22T08:06:10.682Z" }, - { url = "https://files.pythonhosted.org/packages/64/57/8fc655d5a446a70a637e92b98bd2fdaab88bf5bb5b36076ac4add544808d/tree_sitter_c-0.24.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2b42e8e22202c251f8629306f9321233542e07a6e01611b5fe83489272143eb", size = 94160, upload-time = "2026-04-22T08:06:11.497Z" }, - { url = "https://files.pythonhosted.org/packages/c1/f7/72a1d6b42dd31fd37e03ff67e7dc5ee572301499e6b216002b8dd42a1714/tree_sitter_c-0.24.2-cp310-abi3-win_amd64.whl", hash = "sha256:abb549225091f7b25df2dd3a0143ece6e208f7055d8bcb4700b41ee79b9ef1e1", size = 84669, upload-time = "2026-04-22T08:06:12.347Z" }, - { url = "https://files.pythonhosted.org/packages/e2/9d/7475d9ae8ef679aa36c7dfe6c903ab78e573651c68b6ef9862d6a3f994db/tree_sitter_c-0.24.2-cp310-abi3-win_arm64.whl", hash = "sha256:4a2f4371cd816cc3153458f69062135ebb2ea5f275ddd90494e5c823d778204a", size = 82956, upload-time = "2026-04-22T08:06:13.364Z" }, -] - -[[package]] -name = "tree-sitter-c-sharp" -version = "0.23.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9f/fb/7e2962bc1901daf264e7ce263b168e0139304a5f8f66c9b2baf20e550f87/tree_sitter_c_sharp-0.23.5.tar.gz", hash = "sha256:2635c7d5ec93e59f2e831b571bed99c4cc68a5d183a0994020aa769e1b990a71", size = 1147914, upload-time = "2026-04-14T16:11:22.441Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/c4/86d8d469400a856757a464a6ac01af97d8cdacbb595e62bdb98bf1e9db90/tree_sitter_c_sharp-0.23.5-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61e1981cf21b09ee547b9c4c68e64fb4394325f8fc8d5f6d50d41471eba923ea", size = 333658, upload-time = "2026-04-14T16:11:11.288Z" }, - { url = "https://files.pythonhosted.org/packages/c8/13/593c8603f834eaf15082b81e079289fc9f062b4c0ab5b9489134084eec06/tree_sitter_c_sharp-0.23.5-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a75994a11f6fed3f5b8c36ad6a00e5dc43205bd912c43af3a2a54fdf649664eb", size = 376296, upload-time = "2026-04-14T16:11:12.972Z" }, - { url = "https://files.pythonhosted.org/packages/41/5a/a8855cbb5bbab28adb29c2c7f0e7be5a9f1d21450c13b3c3e613190d9b8c/tree_sitter_c_sharp-0.23.5-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aa88a780204cd153c4c1ae2d59c654cee1402212fa0d069823d6d34301587438", size = 358333, upload-time = "2026-04-14T16:11:14.214Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c8/e0f391e343f5424d0627e3b6886c77baeb1249a3f10986be00b0b64ecdab/tree_sitter_c_sharp-0.23.5-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea38fb095d85d360dc5a0bec2fa605e496228876f798c9e089d5f0e72bcef46", size = 359448, upload-time = "2026-04-14T16:11:15.419Z" }, - { url = "https://files.pythonhosted.org/packages/6f/fc/10f807ac79f928241c5e0d827fdaf91e97dfba662fc7e07d7bd664140ec1/tree_sitter_c_sharp-0.23.5-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:05a9256415e7f24d4f133133794a9c224c60d19f677a04e2f6a94c25090b6d65", size = 358144, upload-time = "2026-04-14T16:11:17.087Z" }, - { url = "https://files.pythonhosted.org/packages/de/2a/6c3e12ef0cf09138717fcc02e1de8b76a3928d1bed65c7e3c2bd3172bcef/tree_sitter_c_sharp-0.23.5-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8636dc70b5a373c35c1036ed5de98e801f2e4d105ae41e2e20b6804c36e3bf33", size = 357525, upload-time = "2026-04-14T16:11:18.214Z" }, - { url = "https://files.pythonhosted.org/packages/2b/e0/bd287b092d611df95a9149117fd27b5947ce75527113d6898a4b4e2c8858/tree_sitter_c_sharp-0.23.5-cp310-abi3-win_amd64.whl", hash = "sha256:41a28cfa3d9ea50f5629e44550a03188c8fbd5079803dfc03554b6fd594b33fa", size = 338756, upload-time = "2026-04-14T16:11:19.661Z" }, - { url = "https://files.pythonhosted.org/packages/7f/fb/114ff43fdd256d0befed32f77c1dadee9517867181c70794571f718ed05c/tree_sitter_c_sharp-0.23.5-cp310-abi3-win_arm64.whl", hash = "sha256:2de4ebf95ddc2e92cd3105c8a8e0e7ec646bc82f52bfaf2f3acec0fa2401ec09", size = 337260, upload-time = "2026-04-14T16:11:20.849Z" }, -] - -[[package]] -name = "tree-sitter-cpp" -version = "0.23.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/2c/4dd63d705a8933543cad9b92ff31be849b164fec91a6eb63475ebc9ce668/tree_sitter_cpp-0.23.4.tar.gz", hash = "sha256:6a59c4cebb1ad1dc2e8d586cf8a72b39d21b8108b7b139d089719e81a339e41d", size = 940358, upload-time = "2024-11-11T06:59:24.934Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/ac/11d56670f7b048362db872ca866fd00ba2002a322ab179f047b7c0fb2910/tree_sitter_cpp-0.23.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aacb1759f0efd9dbc25bd8ee88184a340483018869f75412d9c3bc32c039a520", size = 287861, upload-time = "2024-11-11T06:59:15.005Z" }, - { url = "https://files.pythonhosted.org/packages/12/1c/0337c016bdc00a77a3326d12f10ee836401dd28f27db6fd5b7734bfb21ed/tree_sitter_cpp-0.23.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc3c404d9f0cbd87951213a85440afbf4c31e718f8d907fa9ee12bea4b8d276f", size = 315513, upload-time = "2024-11-11T06:59:16.679Z" }, - { url = "https://files.pythonhosted.org/packages/b3/7b/dd38c049b10ed7fda118b903a1d28a8b55a36b98c30606ef90e8f374c6de/tree_sitter_cpp-0.23.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc43ddf1279d5d5a4ef190373f4cb16522801bec4492bcd4754edf2aeba2b7b", size = 334813, upload-time = "2024-11-11T06:59:18.253Z" }, - { url = "https://files.pythonhosted.org/packages/6a/4d/23e390234d2acd351f5563b1079c515d7c1fe13ddb7392cee543be74dda3/tree_sitter_cpp-0.23.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:773d2cafc08bbc0f998687fa33f42f378c1a371cdb582870c4d13abb06092706", size = 316110, upload-time = "2024-11-11T06:59:19.823Z" }, - { url = "https://files.pythonhosted.org/packages/32/c7/b94a7e0e803af9d3bd4608fb4f0cfb2e9e233abaf0a38c928bfb0b1a025d/tree_sitter_cpp-0.23.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:247d127f0eb6574b0f6b30c0151e0bd0774e2e7acf9c558bdf9fbb8adc2e80c0", size = 308242, upload-time = "2024-11-11T06:59:21.466Z" }, - { url = "https://files.pythonhosted.org/packages/37/7e/909e52b3dec09c475140b0e175511e275d0d00ba2dbd7c68102d377ae0f6/tree_sitter_cpp-0.23.4-cp39-abi3-win_amd64.whl", hash = "sha256:68606a45bea92669d155399e1239f771a7767d8683cd8f8e30e7d813107030ca", size = 290997, upload-time = "2024-11-11T06:59:22.432Z" }, - { url = "https://files.pythonhosted.org/packages/d4/6a/65435d4d1f4c735be7ffe52d7c2e7b8a7f7c2790343a2719c60c548611c8/tree_sitter_cpp-0.23.4-cp39-abi3-win_arm64.whl", hash = "sha256:712f84f18be94cbe2a148fa4fdf40fcf4a8c25a8f7670efb9f8a47ddec2fc281", size = 288203, upload-time = "2024-11-11T06:59:23.404Z" }, -] - -[[package]] -name = "tree-sitter-elixir" -version = "0.3.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/83/0501ee426bcd40cf5f765ce66ff2e7136d438ff4e65aeb08991f9826d4e5/tree_sitter_elixir-0.3.5.tar.gz", hash = "sha256:ead089393b1ce732304e6b6fb0bc0ab79e3295663d697be025bd49f0f367b74d", size = 445087, upload-time = "2026-03-02T13:31:09.378Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/29/c2c2b028c49f3c08270dd01ee72a9e735d59c59499d0b7ed09f45157f6b8/tree_sitter_elixir-0.3.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:514078a2f68d27da9a1e6b6e9601b8456faba6260ecfa252e898a848c4f8584d", size = 163335, upload-time = "2026-03-02T13:31:00.053Z" }, - { url = "https://files.pythonhosted.org/packages/7e/d7/f0ad3de0b359a8a1f694268855bb34134c88774fa2276cb33413163c0403/tree_sitter_elixir-0.3.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:015f537731af690cfa238b0fb76a8af4f0d1a2c54a38563f159926d2967ce650", size = 174644, upload-time = "2026-03-02T13:31:01.198Z" }, - { url = "https://files.pythonhosted.org/packages/31/35/78c94e164542ad08098b83cb7e046261f3ab2edade96e29727dd209bfa35/tree_sitter_elixir-0.3.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ebfe3491a3d00ac50b12a3bfcabb1c564f3809ed8a095099fe87f49d6b3987e6", size = 182857, upload-time = "2026-03-02T13:31:02.512Z" }, - { url = "https://files.pythonhosted.org/packages/3c/50/69ed38e335d1228f6eb1c12707269fefb349710aaf0b6d4a730ea88b95c2/tree_sitter_elixir-0.3.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1159057f914d4468fc53cb9d7e8369f8a7826e1d07765bb53fbf391e6058863", size = 184199, upload-time = "2026-03-02T13:31:03.512Z" }, - { url = "https://files.pythonhosted.org/packages/82/8a/8233648868bf2432cb7ab85ffc4ac4b2b1cf4addf75d6a62bacd2dba6f73/tree_sitter_elixir-0.3.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d6187b4d592bfb31760799ac6ddbb5a2457ba0a612de43d77bcbcd5f00cc49bf", size = 183571, upload-time = "2026-03-02T13:31:04.728Z" }, - { url = "https://files.pythonhosted.org/packages/b4/4a/f78454d228835a619db173f816090ab0c86f865987e2504280ced7fdbd5c/tree_sitter_elixir-0.3.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5d5d8aa077ff244d24406b1fb5a17c03a2919c5183c51ca35654870d08b239b", size = 182618, upload-time = "2026-03-02T13:31:06.018Z" }, - { url = "https://files.pythonhosted.org/packages/c6/a5/634b505a4c349becc753c1faef5350f32ca027297c16a45fb0942967db2a/tree_sitter_elixir-0.3.5-cp39-abi3-win_amd64.whl", hash = "sha256:c0b5df229405d42ba5c94254d92e414b1f200be8422561d243ae5b3558e84f76", size = 167219, upload-time = "2026-03-02T13:31:07.071Z" }, - { url = "https://files.pythonhosted.org/packages/77/f2/711baae88f98e3a30efee9383fbcb603a3188c20941643c71d3d3b936d66/tree_sitter_elixir-0.3.5-cp39-abi3-win_arm64.whl", hash = "sha256:fee42b90962e1e131cc31720f3038410291b2196ed231e00c1721597fc0567df", size = 164003, upload-time = "2026-03-02T13:31:08.013Z" }, -] - -[[package]] -name = "tree-sitter-go" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/05/727308adbbc79bcb1c92fc0ea10556a735f9d0f0a5435a18f59d40f7fd77/tree_sitter_go-0.25.0.tar.gz", hash = "sha256:a7466e9b8d94dda94cae8d91629f26edb2d26166fd454d4831c3bf6dfa2e8d68", size = 93890, upload-time = "2025-08-29T06:20:25.044Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/aa/0984707acc2b9bb461fe4a41e7e0fc5b2b1e245c32820f0c83b3c602957c/tree_sitter_go-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b852993063a3429a443e7bd0aa376dd7dd329d595819fabf56ac4cf9d7257b54", size = 47117, upload-time = "2025-08-29T06:20:14.286Z" }, - { url = "https://files.pythonhosted.org/packages/32/16/dd4cb124b35e99239ab3624225da07d4cb8da4d8564ed81d03fcb3a6ba9f/tree_sitter_go-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:503b81a2b4c31e302869a1de3a352ad0912ccab3df9ac9950197b0a9ceeabd8f", size = 48674, upload-time = "2025-08-29T06:20:17.557Z" }, - { url = "https://files.pythonhosted.org/packages/86/fb/b30d63a08044115d8b8bd196c6c2ab4325fb8db5757249a4ef0563966e2e/tree_sitter_go-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04b3b3cb4aff18e74e28d49b716c6f24cb71ddfdd66768987e26e4d0fa812f74", size = 66418, upload-time = "2025-08-29T06:20:18.345Z" }, - { url = "https://files.pythonhosted.org/packages/26/21/d3d88a30ad007419b2c97b3baeeef7431407faf9f686195b6f1cad0aedf9/tree_sitter_go-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:148255aca2f54b90d48c48a9dbb4c7faad6cad310a980b2c5a5a9822057ed145", size = 72006, upload-time = "2025-08-29T06:20:19.14Z" }, - { url = "https://files.pythonhosted.org/packages/cd/d0/0dd6442353ced8a88bbda9e546f4ea29e381b59b5a40b122e5abb586bb6c/tree_sitter_go-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4d338116cdf8a6c6ff990d2441929b41323ef17c710407abe0993c13417d6aad", size = 70603, upload-time = "2025-08-29T06:20:21.544Z" }, - { url = "https://files.pythonhosted.org/packages/01/e2/ee5e09f63504fc286539535d374d2eaa0e7d489b80f8f744bb3962aff22a/tree_sitter_go-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5608e089d2a29fa8d2b327abeb2ad1cdb8e223c440a6b0ceab0d3fa80bdeebae", size = 66088, upload-time = "2025-08-29T06:20:22.336Z" }, - { url = "https://files.pythonhosted.org/packages/6e/b6/d9142583374720e79aca9ccb394b3795149a54c012e1dfd80738df2d984e/tree_sitter_go-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:30d4ada57a223dfc2c32d942f44d284d40f3d1215ddcf108f96807fd36d53022", size = 48152, upload-time = "2025-08-29T06:20:23.089Z" }, - { url = "https://files.pythonhosted.org/packages/9e/00/9a2638e7339236f5b01622952a4d71c1474dd3783d1982a89555fc1f03b1/tree_sitter_go-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:d5d62362059bf79997340773d47cc7e7e002883b527a05cca829c46e40b70ded", size = 46752, upload-time = "2025-08-29T06:20:24.235Z" }, -] - -[[package]] -name = "tree-sitter-html" -version = "0.23.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/06/ad1c53c79da15bef85939aa022d72301e12a9773e9bb9a5e6a6f65b7753a/tree_sitter_html-0.23.2.tar.gz", hash = "sha256:bc9922defe23144d9146bc1509fcd00d361bf6b3303f9effee6532c6a0296961", size = 13977, upload-time = "2024-11-11T05:58:07.403Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/27/b846852b567601c4df765bcb4636085a3260e9f03ae21e0ef2e7c7f957fc/tree_sitter_html-0.23.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e1641d5edf5568a246c6c47b947ed524b5bf944664e6473b21d4ae568e28ee9", size = 14787, upload-time = "2024-11-11T05:57:58.684Z" }, - { url = "https://files.pythonhosted.org/packages/bd/17/827c315deb156bb8cac541da800c4bd62878f50a28b7498fbb722bddd225/tree_sitter_html-0.23.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:3d0a83dd6cd1c7d4bcf6287b5145c92140f0194f8516f329ae8b9e952fbfa8ff", size = 15232, upload-time = "2024-11-11T05:58:00.139Z" }, - { url = "https://files.pythonhosted.org/packages/91/cb/2028fe446d0e18edf3737d91edcb6430f2c97f2296b8cd760702dfa13d90/tree_sitter_html-0.23.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b3775732fffc0abd275a419ef018fd4c1ad4044b2a2e422f3378d93c30eded", size = 39109, upload-time = "2024-11-11T05:58:00.986Z" }, - { url = "https://files.pythonhosted.org/packages/19/bc/b24f5e66be51447cf7e9bcce3d9440a6b4f17021da85779a51566646a7c7/tree_sitter_html-0.23.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bdaa7ac5030d416aea0c512d4810ef847bbbd62d61e3d213f370b64ce147293", size = 39630, upload-time = "2024-11-11T05:58:02.424Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d5/31b46cb362ad9679af21ff8b75d846fb7522ecf949beea4fddc86e97815d/tree_sitter_html-0.23.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d2e9631b66041a4fd792d7f79a0c4128adb3bfc71f3dcb7e1a3eab5dbee77d67", size = 37440, upload-time = "2024-11-11T05:58:03.819Z" }, - { url = "https://files.pythonhosted.org/packages/28/30/03910b7c037105f33166439f0518dd0aa4f1b7ef8c9d7367c6e9cc6b5681/tree_sitter_html-0.23.2-cp39-abi3-win_amd64.whl", hash = "sha256:85095f49f9e57f0ac9087a3e830783352c8447fdda55b1c1139aa47e5eaa0e21", size = 17765, upload-time = "2024-11-11T05:58:05.163Z" }, - { url = "https://files.pythonhosted.org/packages/20/32/63761055b03c69202a0e67b6e9a5cb3578da23aeefb62ee3e7ec2c1b0ff2/tree_sitter_html-0.23.2-cp39-abi3-win_arm64.whl", hash = "sha256:0f65ed9e877144d0f04ade5644e5b0e88bf98a9e60bce65235c99905623e2f1a", size = 15576, upload-time = "2024-11-11T05:58:06.577Z" }, -] - -[[package]] -name = "tree-sitter-java" -version = "0.23.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/dc/eb9c8f96304e5d8ae1663126d89967a622a80937ad2909903569ccb7ec8f/tree_sitter_java-0.23.5.tar.gz", hash = "sha256:f5cd57b8f1270a7f0438878750d02ccc79421d45cca65ff284f1527e9ef02e38", size = 138121, upload-time = "2024-12-21T18:24:26.936Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/21/b3399780b440e1567a11d384d0ebb1aea9b642d0d98becf30fa55c0e3a3b/tree_sitter_java-0.23.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:355ce0308672d6f7013ec913dee4a0613666f4cda9044a7824240d17f38209df", size = 58926, upload-time = "2024-12-21T18:24:12.53Z" }, - { url = "https://files.pythonhosted.org/packages/57/ef/6406b444e2a93bc72a04e802f4107e9ecf04b8de4a5528830726d210599c/tree_sitter_java-0.23.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:24acd59c4720dedad80d548fe4237e43ef2b7a4e94c8549b0ca6e4c4d7bf6e69", size = 62288, upload-time = "2024-12-21T18:24:14.634Z" }, - { url = "https://files.pythonhosted.org/packages/4e/6c/74b1c150d4f69c291ab0b78d5dd1b59712559bbe7e7daf6d8466d483463f/tree_sitter_java-0.23.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9401e7271f0b333df39fc8a8336a0caf1b891d9a2b89ddee99fae66b794fc5b7", size = 85533, upload-time = "2024-12-21T18:24:16.695Z" }, - { url = "https://files.pythonhosted.org/packages/29/09/e0d08f5c212062fd046db35c1015a2621c2631bc8b4aae5740d7adb276ad/tree_sitter_java-0.23.5-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:370b204b9500b847f6d0c5ad584045831cee69e9a3e4d878535d39e4a7e4c4f1", size = 84033, upload-time = "2024-12-21T18:24:18.758Z" }, - { url = "https://files.pythonhosted.org/packages/43/56/7d06b23ddd09bde816a131aa504ee11a1bbe87c6b62ab9b2ed23849a3382/tree_sitter_java-0.23.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:aae84449e330363b55b14a2af0585e4e0dae75eb64ea509b7e5b0e1de536846a", size = 82564, upload-time = "2024-12-21T18:24:20.493Z" }, - { url = "https://files.pythonhosted.org/packages/da/d6/0528c7e1e88a18221dbd8ccee3825bf274b1fa300f745fd74eb343878043/tree_sitter_java-0.23.5-cp39-abi3-win_amd64.whl", hash = "sha256:1ee45e790f8d31d416bc84a09dac2e2c6bc343e89b8a2e1d550513498eedfde7", size = 60650, upload-time = "2024-12-21T18:24:22.902Z" }, - { url = "https://files.pythonhosted.org/packages/72/57/5bab54d23179350356515526fff3cc0f3ac23bfbc1a1d518a15978d4880e/tree_sitter_java-0.23.5-cp39-abi3-win_arm64.whl", hash = "sha256:402efe136104c5603b429dc26c7e75ae14faaca54cfd319ecc41c8f2534750f4", size = 59059, upload-time = "2024-12-21T18:24:24.934Z" }, -] - -[[package]] -name = "tree-sitter-javascript" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/e0/e63103c72a9d3dfd89a31e02e660263ad84b7438e5f44ee82e443e65bbde/tree_sitter_javascript-0.25.0.tar.gz", hash = "sha256:329b5414874f0588a98f1c291f1b28138286617aa907746ffe55adfdcf963f38", size = 132338, upload-time = "2025-09-01T07:13:44.792Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/df/5106ac250cd03661ebc3cc75da6b3d9f6800a3606393a0122eca58038104/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b70f887fb269d6e58c349d683f59fa647140c410cfe2bee44a883b20ec92e3dc", size = 64052, upload-time = "2025-09-01T07:13:36.865Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/6b4b2bc90d8ab3955856ce852cc9d1e82c81d7ab9646385f0e75ffd5b5d3/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:8264a996b8845cfce06965152a013b5d9cbb7d199bc3503e12b5682e62bb1de1", size = 66440, upload-time = "2025-09-01T07:13:37.962Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c4/7da74ecdcd8a398f88bd003a87c65403b5fe0e958cdd43fbd5fd4a398fcf/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dc04ba91fc8583344e57c1f1ed5b2c97ecaaf47480011b92fbeab8dda96db75", size = 99728, upload-time = "2025-09-01T07:13:38.755Z" }, - { url = "https://files.pythonhosted.org/packages/96/c8/97da3af4796495e46421e9344738addb3602fa6426ea695be3fcbadbee37/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:199d09985190852e0912da2b8d26c932159be314bc04952cf917ed0e4c633e6b", size = 106072, upload-time = "2025-09-01T07:13:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/13/be/c964e8130be08cc9bd6627d845f0e4460945b158429d39510953bbcb8fcc/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dfcf789064c58dc13c0a4edb550acacfc6f0f280577f1e7a00de3e89fc7f8ddc", size = 104388, upload-time = "2025-09-01T07:13:40.866Z" }, - { url = "https://files.pythonhosted.org/packages/ee/89/9b773dee0f8961d1bb8d7baf0a204ab587618df19897c1ef260916f318ec/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b852d3aee8a36186dbcc32c798b11b4869f9b5041743b63b65c2ef793db7a54", size = 98377, upload-time = "2025-09-01T07:13:41.838Z" }, - { url = "https://files.pythonhosted.org/packages/3b/dc/d90cb1790f8cec9b4878d278ad9faf7c8f893189ce0f855304fd704fc274/tree_sitter_javascript-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:e5ed840f5bd4a3f0272e441d19429b26eedc257abe5574c8546da6b556865e3c", size = 62975, upload-time = "2025-09-01T07:13:42.828Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1f/f9eba1038b7d4394410f3c0a6ec2122b590cd7acb03f196e52fa57ebbe72/tree_sitter_javascript-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:622a69d677aa7f6ee2931d8c77c981a33f0ebb6d275aa9d43d3397c879a9bb0b", size = 61668, upload-time = "2025-09-01T07:13:43.803Z" }, -] - -[[package]] -name = "tree-sitter-lua" -version = "0.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/07/98d7c5f60c9a79a1d40f85e59b7c25a0102d2eebcc5a83608c7c308edf22/tree_sitter_lua-0.5.0.tar.gz", hash = "sha256:0e46356038ccb8ce1049289104c56230003448309a335f2e353f1edc7b373552", size = 36829, upload-time = "2026-02-26T17:07:33.469Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/b2/d1ffd919692b217d257222cbfa1705268dfea073b91ffb81726da0e27fe8/tree_sitter_lua-0.5.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cc4f2eb734dc9223bf96c0eeffa78a9485db207d00841e27e52c8b036f2164f7", size = 22781, upload-time = "2026-02-26T17:07:26.412Z" }, - { url = "https://files.pythonhosted.org/packages/de/0c/6bc3228d01419e8b5af664bf328d174b02a64736ffa23a335c778c8cda68/tree_sitter_lua-0.5.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c14714ad395c4166566f3e4dd0cc0979411684cbcd23702e3c631c3e6eae84fd", size = 23437, upload-time = "2026-02-26T17:07:27.504Z" }, - { url = "https://files.pythonhosted.org/packages/45/2b/1edfd9bef9a1cc11047cd87ca9c60707b8425080cfc0498a7d3bc762d783/tree_sitter_lua-0.5.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ec448c854fea32414a0449147d648bc5baddf7a0357008c4abe3269db35370a", size = 41743, upload-time = "2026-02-26T17:07:28.433Z" }, - { url = "https://files.pythonhosted.org/packages/bf/7f/53bbfde347e5d9a34e0a9ed367d340dd876cf987c6ce8478c0597e1cf608/tree_sitter_lua-0.5.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b02f057a997e618c5b1b03a5cef9dd6c2673043d396ca86edba372728f17ef53", size = 44405, upload-time = "2026-02-26T17:07:29.662Z" }, - { url = "https://files.pythonhosted.org/packages/f9/63/989c0bcde97280cb7938aa2797ce310735c907ad372f6adc4645ef8dfb86/tree_sitter_lua-0.5.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a048571f55a3dd30c94e2313091274338284cab23e757c181e4961c185ba9d0", size = 43208, upload-time = "2026-02-26T17:07:30.612Z" }, - { url = "https://files.pythonhosted.org/packages/6d/da/d9ce9a35c3042b2fd7453ba69d543d32c5d09563277a099b0859ce53d919/tree_sitter_lua-0.5.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:922a5a3d0fec8af373cab504cbcd9abeeebb212d454f54163591c50c183466be", size = 41357, upload-time = "2026-02-26T17:07:31.408Z" }, - { url = "https://files.pythonhosted.org/packages/25/20/8973f4049d81b2920ef496cf61b9b947ccee63dfb1aa89cb73810cb22784/tree_sitter_lua-0.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:ace3dd61218124ee08410a55601cb5fbbb00be3ee004b30e705cef9ef25165a9", size = 24755, upload-time = "2026-02-26T17:07:32.128Z" }, - { url = "https://files.pythonhosted.org/packages/8c/97/3104ecfa3c34320411bcad9b4f2823956487b6e222edcc83689819badc9d/tree_sitter_lua-0.5.0-cp310-abi3-win_arm64.whl", hash = "sha256:8488f3bea40779896f5771bcfcdc26900eb21e94f6658eb68a848fc37dd39221", size = 23506, upload-time = "2026-02-26T17:07:32.775Z" }, -] - -[[package]] -name = "tree-sitter-php" -version = "0.24.1" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/c8/1a499038cb4036bea1d560ffbc807a6fb940261aa22296bd49a62ed8bcba/tree_sitter_php-0.24.1-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:d56e2dcf025450f84a2cdbf4b18a09e6cb88b92e9e6858e63de3d4133ab2e43e", size = 219550, upload-time = "2025-08-16T22:14:30.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5e/b52f2599acb29f6899470f7137d3d491c752b88df3950fb7408aea57ddca/tree_sitter_php-0.24.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:29759c67d4c27a68c227ed82c0b7e4699617b1bd23757d50c081f81a12b4f80d", size = 229632, upload-time = "2025-08-16T22:14:31.85Z" }, - { url = "https://files.pythonhosted.org/packages/6b/58/ca290da45380bd6ba7c6b0b98cc5fc30325c32c7f14f0c93196a451b19c4/tree_sitter_php-0.24.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94b89832ac09f078eed2acd88598838bc51012224cbcebb916dbb6a37e74357e", size = 325351, upload-time = "2025-08-16T22:14:33Z" }, - { url = "https://files.pythonhosted.org/packages/9a/c6/fd863a7a779d0ab67688939eba0e08bff7b1ffe731288d3d3610df21217b/tree_sitter_php-0.24.1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a1404a30f2972498ace040b0029738b8dac45d0a12932ccb8b605eb94bafbe4", size = 313021, upload-time = "2025-08-16T22:14:34.394Z" }, - { url = "https://files.pythonhosted.org/packages/48/ed/aace12f30c4f5474a9ad0e9da85c060174e3764342c9860974bb0feb02fc/tree_sitter_php-0.24.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3e96f61462a960c78e5389c7ba6c16c25e66b465c763b8e63ad66423326c2fa7", size = 305905, upload-time = "2025-08-16T22:14:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c4/6c690c33b1ae9cae9505c0a2896f046fda174d72c46bdafce6aab3b2f2e7/tree_sitter_php-0.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:1a1b65b72a8410d421f914ee13d38fd546a94d01cb834f69b27c78ba7589a5b5", size = 208014, upload-time = "2025-08-16T22:14:37.206Z" }, - { url = "https://files.pythonhosted.org/packages/7b/69/54c670d725c092b89e76ca6984582b6a768b128ac1859ed48141b124da1d/tree_sitter_php-0.24.1-cp310-abi3-win_arm64.whl", hash = "sha256:56a70c5ef1bddb15f220a479b2f2edf3042c764b6c443921fbd7ca9174d664e3", size = 206033, upload-time = "2025-08-16T22:14:38.632Z" }, -] - -[[package]] -name = "tree-sitter-python" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/8b/c992ff0e768cb6768d5c96234579bf8842b3a633db641455d86dd30d5dac/tree_sitter_python-0.25.0.tar.gz", hash = "sha256:b13e090f725f5b9c86aa455a268553c65cadf325471ad5b65cd29cac8a1a68ac", size = 159845, upload-time = "2025-09-11T06:47:58.159Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/64/a4e503c78a4eb3ac46d8e72a29c1b1237fa85238d8e972b063e0751f5a94/tree_sitter_python-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:14a79a47ddef72f987d5a2c122d148a812169d7484ff5c75a3db9609d419f361", size = 73790, upload-time = "2025-09-11T06:47:47.652Z" }, - { url = "https://files.pythonhosted.org/packages/e6/1d/60d8c2a0cc63d6ec4ba4e99ce61b802d2e39ef9db799bdf2a8f932a6cd4b/tree_sitter_python-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:480c21dbd995b7fe44813e741d71fed10ba695e7caab627fb034e3828469d762", size = 76691, upload-time = "2025-09-11T06:47:49.038Z" }, - { url = "https://files.pythonhosted.org/packages/aa/cb/d9b0b67d037922d60cbe0359e0c86457c2da721bc714381a63e2c8e35eba/tree_sitter_python-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:86f118e5eecad616ecdb81d171a36dde9bef5a0b21ed71ea9c3e390813c3baf5", size = 108133, upload-time = "2025-09-11T06:47:50.499Z" }, - { url = "https://files.pythonhosted.org/packages/40/bd/bf4787f57e6b2860f3f1c8c62f045b39fb32d6bac4b53d7a9e66de968440/tree_sitter_python-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be71650ca2b93b6e9649e5d65c6811aad87a7614c8c1003246b303f6b150f61b", size = 110603, upload-time = "2025-09-11T06:47:51.985Z" }, - { url = "https://files.pythonhosted.org/packages/5d/25/feff09f5c2f32484fbce15db8b49455c7572346ce61a699a41972dea7318/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6d5b5799628cc0f24691ab2a172a8e676f668fe90dc60468bee14084a35c16d", size = 108998, upload-time = "2025-09-11T06:47:53.046Z" }, - { url = "https://files.pythonhosted.org/packages/75/69/4946da3d6c0df316ccb938316ce007fb565d08f89d02d854f2d308f0309f/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:71959832fc5d9642e52c11f2f7d79ae520b461e63334927e93ca46cd61cd9683", size = 107268, upload-time = "2025-09-11T06:47:54.388Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a2/996fc2dfa1076dc460d3e2f3c75974ea4b8f02f6bc925383aaae519920e8/tree_sitter_python-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:9bcde33f18792de54ee579b00e1b4fe186b7926825444766f849bf7181793a76", size = 76073, upload-time = "2025-09-11T06:47:55.773Z" }, - { url = "https://files.pythonhosted.org/packages/07/19/4b5569d9b1ebebb5907d11554a96ef3fa09364a30fcfabeff587495b512f/tree_sitter_python-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:0fbf6a3774ad7e89ee891851204c2e2c47e12b63a5edbe2e9156997731c128bb", size = 74169, upload-time = "2025-09-11T06:47:56.747Z" }, -] - -[[package]] -name = "tree-sitter-ruby" -version = "0.23.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/5b/6d24be4fde4743481bd8e3fd24b434870cb6612238c8544b71fe129ed850/tree_sitter_ruby-0.23.1.tar.gz", hash = "sha256:886ed200bfd1f3ca7628bf1c9fefd42421bbdba70c627363abda67f662caa21e", size = 489602, upload-time = "2024-11-11T04:51:30.328Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/23/2e/2717b9451c712b60f833827a696baf29d8e50a0f7dccbf22a8d7006cc19e/tree_sitter_ruby-0.23.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:39f391322d2210843f07081182dbf00f8f69cfbfa4687b9575cac6d324bae443", size = 177959, upload-time = "2024-11-11T04:51:19.958Z" }, - { url = "https://files.pythonhosted.org/packages/e7/38/c41ecf7692b8ecccd26861d3293a88150a4a52fc081abe60f837030d7315/tree_sitter_ruby-0.23.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:aa4ee7433bd42fac22e2dad4a3c0f332292ecf482e610316828c711a0bb7f794", size = 195069, upload-time = "2024-11-11T04:51:21.82Z" }, - { url = "https://files.pythonhosted.org/packages/d8/01/14ef2d5107e6f42b64a400c3bbc3dd3b8fd24c3cef5306004ae03668f231/tree_sitter_ruby-0.23.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b36813a56006b7569db7868f6b762caa3f4e419bd0f8cf9ccbb4abb1b6254c", size = 226761, upload-time = "2024-11-11T04:51:23.021Z" }, - { url = "https://files.pythonhosted.org/packages/23/dd/1171b5dd25da10f768732a20fb62d2e3ae66e3b42329351f2ce5bf723abb/tree_sitter_ruby-0.23.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7bcd93972b4ca2803856d4fe0fbd04123ff29c4592bbb9f12a27528bd252341", size = 214427, upload-time = "2024-11-11T04:51:24.854Z" }, - { url = "https://files.pythonhosted.org/packages/60/bc/de76c877a90fd8a62cd60f496d7832efddc1b18a148593d9aa9b4a9ce5e0/tree_sitter_ruby-0.23.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66c65d6c2a629783ca4ab2bab539bd6f271ce6f77cacb62845831e11665b5bd3", size = 210409, upload-time = "2024-11-11T04:51:26.093Z" }, - { url = "https://files.pythonhosted.org/packages/dd/4a/f5bcca350b84cdf75a53e918b8efa06c46ed650d99d3ef22195e9d8020cc/tree_sitter_ruby-0.23.1-cp39-abi3-win_amd64.whl", hash = "sha256:02e2c19ebefe29226c14aa63e11e291d990f5b5c20a99940ab6e7eda44e744e5", size = 179843, upload-time = "2024-11-11T04:51:27.265Z" }, - { url = "https://files.pythonhosted.org/packages/71/5c/a2e068ad4b2c4ba9b774a88b24149168d3bcd94f58b964e49dcabfe5fd24/tree_sitter_ruby-0.23.1-cp39-abi3-win_arm64.whl", hash = "sha256:ed042007e89f2cceeb1cbdd8b0caa68af1e2ce54c7eb2053ace760f90657ac9f", size = 178025, upload-time = "2024-11-11T04:51:29.051Z" }, -] - -[[package]] -name = "tree-sitter-rust" -version = "0.24.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/87/75cbd22b927267d310f76cca1ab3c1d9d41035dfa3eb9cc95f96ee199440/tree_sitter_rust-0.24.2.tar.gz", hash = "sha256:54fb02a5911e345308b405174465112479f56dc39e3f1e7744d7568595f00db9", size = 339341, upload-time = "2026-03-27T21:08:55.629Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/24/2b2d33af5e27c84a4fde4e8cd2594bb4ab1e1cf48756a9f40dadc84956cc/tree_sitter_rust-0.24.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3620cfd12340efa43082d45df76349ff511893a9c361da2f8d6d51e307020a59", size = 129507, upload-time = "2026-03-27T21:08:47.585Z" }, - { url = "https://files.pythonhosted.org/packages/78/2a/cf39f881a545360b5a86bb1accba1f4acc713daab01fb9edd35b6e84f473/tree_sitter_rust-0.24.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:01a46622735498493f29f3e628a90de95c96a07bfbeb88996243eb986b1cee36", size = 136812, upload-time = "2026-03-27T21:08:48.761Z" }, - { url = "https://files.pythonhosted.org/packages/ca/45/a051bbd3045a61182dde25b93ae9a33d2677c935b16952283e12eaf46051/tree_sitter_rust-0.24.2-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e033c5a93b57c88e0a835880de39fc802909ff69f57aaff6000211c196ea5190", size = 164706, upload-time = "2026-03-27T21:08:49.605Z" }, - { url = "https://files.pythonhosted.org/packages/b5/f6/a5a146df5c0a5daea3ffcd5d7245775fe7f084357770d5a313dd6245ae78/tree_sitter_rust-0.24.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d76d1208c3638b871236090759dfc13d478921320653a6c9da5336e7c58f65a", size = 170310, upload-time = "2026-03-27T21:08:50.424Z" }, - { url = "https://files.pythonhosted.org/packages/95/a8/f85b1ca75e01361ca5f92d226593ca4857cea49551b9f6c8fa6fc08ea917/tree_sitter_rust-0.24.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:87930163a462408c49ab62c667e74029bc26b4cc7123dd1bdc7352215786c64a", size = 168668, upload-time = "2026-03-27T21:08:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/a2/e1/3519f866a4679ca36acd9f5a06a779ecb8a92b18887c5546458d521df557/tree_sitter_rust-0.24.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:da2b86099028fd42c6cd32878b7b16b01f8aac0f7b0e98742b7fa6bc3cf09b89", size = 162403, upload-time = "2026-03-27T21:08:52.588Z" }, - { url = "https://files.pythonhosted.org/packages/34/71/7ef609894dbfe5699eb16f7471f9b8af1d958d8ba3e29c238d7607e8cb47/tree_sitter_rust-0.24.2-cp39-abi3-win_amd64.whl", hash = "sha256:4529c125d928882ddfb879fdc6bc0704913261ecc078b6fa7902559e0daf200d", size = 129422, upload-time = "2026-03-27T21:08:54.031Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d8/050a781172745bc345f98abb7c56e72022ea0790f8e793de981c83c2ef15/tree_sitter_rust-0.24.2-cp39-abi3-win_arm64.whl", hash = "sha256:66ba90f61bd54f4c4f5d30434957daf64507c16b0313df76becb37d63f70a227", size = 128245, upload-time = "2026-03-27T21:08:54.803Z" }, -] - -[[package]] -name = "tree-sitter-scala" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/39/cd/993b418057ad5a8aae67fa895905634a418e3c7bd176452c6f97be8bd6d4/tree_sitter_scala-0.26.0.tar.gz", hash = "sha256:7f768094afbed10c07e60c202e275efc683418eeae4bdeff2c16f2ea0744939f", size = 1442211, upload-time = "2026-04-18T22:23:59.282Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d6/4b53e2c29a1278327bbd52f84fce3a10553989db46d257686f06906b237d/tree_sitter_scala-0.26.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:80a6cf19d923dacb54621422fd806ea52b9f103ead41a279fc2278f91a488395", size = 620588, upload-time = "2026-04-18T22:23:50.341Z" }, - { url = "https://files.pythonhosted.org/packages/cc/8a/87fbf40fc87bcb61c06860e95a75b425d5678eda786dea6ae46616e04f07/tree_sitter_scala-0.26.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7829245c660902148d06e6c9e36255d60b0feb47974c87a1d09dd2cbdbba12c8", size = 656089, upload-time = "2026-04-18T22:23:51.764Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cd/439f7e6ef3a918503bc0b0d810bb066c0a67c914c5adb22e38d3194dfd4d/tree_sitter_scala-0.26.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ec7e63b7b486a71b3799c665801a9bdfcf69417b86119ceb22630e43136082", size = 681973, upload-time = "2026-04-18T22:23:53.141Z" }, - { url = "https://files.pythonhosted.org/packages/3f/61/e64e1c2b2552f5dc556c9710ecf935ed531efa8a3eb9de9ad4e7c95f6e97/tree_sitter_scala-0.26.0-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff178a9310d859e819a6fe10f312b6e423d9a1d0cca5e6354a45fe0041677be", size = 680933, upload-time = "2026-04-18T22:23:54.264Z" }, - { url = "https://files.pythonhosted.org/packages/07/1c/7ea42e825690ed7ceb4cb348158341ac900d0bbb152184291a3913d44381/tree_sitter_scala-0.26.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3e5920b6ab7fd09cc91dceaaf7e12c76469990f5891337a8c0147ba25d1d55f9", size = 730181, upload-time = "2026-04-18T22:23:55.285Z" }, - { url = "https://files.pythonhosted.org/packages/fe/71/7c5328c30e84ad24204343c5ed5775757f9bb1c477275f443592652f099e/tree_sitter_scala-0.26.0-cp39-abi3-win_amd64.whl", hash = "sha256:5e5021d78cd80debca5848af2314ed1a4b5642a7cefb10979b8e30c4945aa6dd", size = 603989, upload-time = "2026-04-18T22:23:56.428Z" }, - { url = "https://files.pythonhosted.org/packages/0f/9a/578b52f4f94d50352ac04630c46d49966b8564bd424cf270ed016c86bc72/tree_sitter_scala-0.26.0-cp39-abi3-win_arm64.whl", hash = "sha256:0eb627916fd1448657b4bcbe178e0cab8d3c114ec04aec51f0d0cd5ca2aa996e", size = 608073, upload-time = "2026-04-18T22:23:57.855Z" }, -] - -[[package]] -name = "tree-sitter-swift" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/45/6986ace9ad2eb7a111b7c47c8900192bc4d6c9f3db236fde873b7f8579c3/tree_sitter_swift-0.7.2.tar.gz", hash = "sha256:67b9a3ba5ab8fff2c082a2c0c33c8b5a66539f8bfa5058385688b1aefc11cead", size = 926779, upload-time = "2026-05-04T05:05:13.461Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/7f/98abba4def5dca30ece6e3cd9fb09f0cddbdc250fd2d050d1cfdbe0c8924/tree_sitter_swift-0.7.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:4664a5cbf20f0090ea2de540abc4f3392479a89db516f9774a62885c1b61aac7", size = 330332, upload-time = "2026-05-04T05:05:03.176Z" }, - { url = "https://files.pythonhosted.org/packages/dd/dd/aee99d2ccf0deb48e84656fefdecf059392a6778d3f050bf33cfa1d6074c/tree_sitter_swift-0.7.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d5791dbec5e4070accc0e06d231e18879d67edab98369685a81a1f77e024727", size = 352232, upload-time = "2026-05-04T05:05:04.493Z" }, - { url = "https://files.pythonhosted.org/packages/c9/74/0af5181a67c71f09af7a9f7942ba8f65e22a4f4d6eed426e6daf6253d3a6/tree_sitter_swift-0.7.2-cp38-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:600053b3ed763beaa5156ba1d70b22602ed88a6cff6cf3aab238133983426f9e", size = 358235, upload-time = "2026-05-04T05:05:05.777Z" }, - { url = "https://files.pythonhosted.org/packages/34/04/e6ded10edc9ece2a5812058dace35bbae03685547d4bee03af843b7a9ca5/tree_sitter_swift-0.7.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c8398f0b105293bbae375c7701256772b90996044f822e8e590297cc671e6e4", size = 354699, upload-time = "2026-05-04T05:05:06.917Z" }, - { url = "https://files.pythonhosted.org/packages/8f/56/befd27fac44be001e0489cdeed8c5837ebba4e1a92d2155460f5a53c5fe1/tree_sitter_swift-0.7.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cfbd96472e4841dbacf903088044f4a6a0fb4fa5ef7084a5bf55a804fefcc013", size = 353478, upload-time = "2026-05-04T05:05:08.524Z" }, - { url = "https://files.pythonhosted.org/packages/1c/fb/9acab9dd78a2fcbd04c90a42bd8f313d9ae719f4e3388cd1345d03bbe0de/tree_sitter_swift-0.7.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e4de7c8a789c6fe01e0e0ba2a2792e9d4db905eb146ed9a321502a848826ba84", size = 356772, upload-time = "2026-05-04T05:05:09.612Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/5eb7a57346a287fa9bd7d5757a9fc1cbaef4dc043093a565e91384a7df18/tree_sitter_swift-0.7.2-cp38-abi3-win_amd64.whl", hash = "sha256:dec5aa6bc475ccd41685ce88dfde5894077bed6123b85e89e2c027f5ab6ab09e", size = 337169, upload-time = "2026-05-04T05:05:11.138Z" }, - { url = "https://files.pythonhosted.org/packages/7d/00/43b80f23c282cd0391442c1e3e5d9e6fb8c3fd62add900d6879522dc81de/tree_sitter_swift-0.7.2-cp38-abi3-win_arm64.whl", hash = "sha256:c7d11ca989e1930a55a79bbea5964fa1b121d947fa25ec7c068364383c85e6c3", size = 333364, upload-time = "2026-05-04T05:05:12.458Z" }, -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.23.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/fc/bb52958f7e399250aee093751e9373a6311cadbe76b6e0d109b853757f35/tree_sitter_typescript-0.23.2.tar.gz", hash = "sha256:7b167b5827c882261cb7a50dfa0fb567975f9b315e87ed87ad0a0a3aedb3834d", size = 773053, upload-time = "2024-11-11T02:36:11.396Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/28/95/4c00680866280e008e81dd621fd4d3f54aa3dad1b76b857a19da1b2cc426/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3cd752d70d8e5371fdac6a9a4df9d8924b63b6998d268586f7d374c9fba2a478", size = 286677, upload-time = "2024-11-11T02:35:58.839Z" }, - { url = "https://files.pythonhosted.org/packages/8f/2f/1f36fda564518d84593f2740d5905ac127d590baf5c5753cef2a88a89c15/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c7cc1b0ff5d91bac863b0e38b1578d5505e718156c9db577c8baea2557f66de8", size = 302008, upload-time = "2024-11-11T02:36:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/96/2d/975c2dad292aa9994f982eb0b69cc6fda0223e4b6c4ea714550477d8ec3a/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b1eed5b0b3a8134e86126b00b743d667ec27c63fc9de1b7bb23168803879e31", size = 351987, upload-time = "2024-11-11T02:36:02.669Z" }, - { url = "https://files.pythonhosted.org/packages/49/d1/a71c36da6e2b8a4ed5e2970819b86ef13ba77ac40d9e333cb17df6a2c5db/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e96d36b85bcacdeb8ff5c2618d75593ef12ebaf1b4eace3477e2bdb2abb1752c", size = 344960, upload-time = "2024-11-11T02:36:04.443Z" }, - { url = "https://files.pythonhosted.org/packages/7f/cb/f57b149d7beed1a85b8266d0c60ebe4c46e79c9ba56bc17b898e17daf88e/tree_sitter_typescript-0.23.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8d4f0f9bcb61ad7b7509d49a1565ff2cc363863644a234e1e0fe10960e55aea0", size = 340245, upload-time = "2024-11-11T02:36:06.473Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ab/dd84f0e2337296a5f09749f7b5483215d75c8fa9e33738522e5ed81f7254/tree_sitter_typescript-0.23.2-cp39-abi3-win_amd64.whl", hash = "sha256:3f730b66396bc3e11811e4465c41ee45d9e9edd6de355a58bbbc49fa770da8f9", size = 278015, upload-time = "2024-11-11T02:36:07.631Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e4/81f9a935789233cf412a0ed5fe04c883841d2c8fb0b7e075958a35c65032/tree_sitter_typescript-0.23.2-cp39-abi3-win_arm64.whl", hash = "sha256:05db58f70b95ef0ea126db5560f3775692f609589ed6f8dd0af84b7f19f1cbb7", size = 274052, upload-time = "2024-11-11T02:36:09.514Z" }, -] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.20260510" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/85/0d9fafce21be112e977a89677f1ce9d1aef921d745b17c758c93e861c11f/types_pyyaml-6.0.12.20260510.tar.gz", hash = "sha256:09c1f1cb65a6eebea1e2e51ccf4918b8288e152909609a35cdb0d805efd125ad", size = 17831, upload-time = "2026-05-10T05:26:28.136Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/ad/fd618a218925daada7b8a5e7326e662599fa5fdff4a4c44ab2795bd2d9ca/types_pyyaml-6.0.12.20260510-py3-none-any.whl", hash = "sha256:3492eb9ba4d9d833473214c4d5736cccf5f37d93f5854059721e1c84f785309d", size = 20304, upload-time = "2026-05-10T05:26:26.981Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, -] - -[[package]] -name = "urllib3" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, -] - -[[package]] -name = "uvicorn" -version = "0.47.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f6/b1/8e7077a8641086aea449e1b5752a570f1b5906c64e0a33cd6d93b63a066b/uvicorn-0.47.0.tar.gz", hash = "sha256:7c9a0ea1a9414106bbab7324609c162d8fa0cdcdcb703060987269d77c7bb533", size = 90582, upload-time = "2026-05-14T18:16:54.455Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/41/ac2dfdbc1f60c7af4f994c7a335cfa7040c01642b605d65f611cecc2a1e4/uvicorn-0.47.0-py3-none-any.whl", hash = "sha256:2c5715bc12d1892d84752049f400cd1c3cb018514967fdfeb97640443a6a9432", size = 71301, upload-time = "2026-05-14T18:16:51.762Z" }, -] - -[[package]] -name = "virtualenv" -version = "21.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "distlib" }, - { name = "filelock" }, - { name = "platformdirs" }, - { name = "python-discovery" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/ba/1f6e8c957e4932be060dcdc482d339c12e0216351478add3645cdaa53c05/virtualenv-21.3.3.tar.gz", hash = "sha256:f5bda277e553b1c2b3c1a8debfc30496e1288cc93ce6b7b71b3280047e317328", size = 7613784, upload-time = "2026-05-13T18:01:30.19Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/34/a9dbe051de88a63eb7408ea66630bac38e72f7f6077d4be58737106860d9/virtualenv-21.3.3-py3-none-any.whl", hash = "sha256:7d5987d8369e098e41406efb780a3d4ca79280097293899e351a6407ee153ab3", size = 7594554, upload-time = "2026-05-13T18:01:27.815Z" }, -] From 48955bb473478c626132b0cc3c065e53602cbf5c Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Thu, 20 Aug 2026 23:06:00 +0200 Subject: [PATCH 50/73] ci: pin Rust toolchain in the four jobs that compile the extension --- .github/workflows/ci.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ee295a22..ef86b417b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,17 @@ jobs: with: python-version: '3.12' + # Installing this package compiles the native extension, so cargo must be + # on PATH. Relying on the runner image's Rust plus rust-toolchain.toml's + # pin failed two ways on main within a day — "detected conflict: + # 'bin/cargo-clippy'" while rustup auto-installed the pinned components, + # and then "Cargo ... is not installed or is not on PATH" — each time + # failing the install step rather than the check the job exists to run. + - name: Install Rust + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable + with: + toolchain: "1.92.0" + - name: Cache pre-commit uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: @@ -167,6 +178,13 @@ jobs: cache: 'pip' cache-dependency-path: 'pyproject.toml' + # Same reason as the pre-commit job: installing this package compiles the + # native extension, so cargo has to be on PATH at the pinned version. + - name: Install Rust + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable + with: + toolchain: "1.92.0" + - name: Install Linters and Type Checker run: | python -m pip install --upgrade pip @@ -337,6 +355,14 @@ jobs: with: python-version: '3.12' + # See the note in the pre-commit job: without pinning the toolchain + # here, maturin's build lets rustup auto-install it and collide with + # the runner image's preinstalled cargo-clippy. + - name: Install Rust + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable + with: + toolchain: "1.92.0" + - name: Install dependencies run: | python -m pip install --upgrade pip @@ -374,6 +400,14 @@ jobs: with: python-version: '3.12' + # See the note in the pre-commit job: without pinning the toolchain + # here, maturin's build lets rustup auto-install it and collide with + # the runner image's preinstalled cargo-clippy. + - name: Install Rust + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable + with: + toolchain: "1.92.0" + - name: Install dependencies run: | python -m pip install --upgrade pip From ee229efd97a78d16708cfcd3a84827544dab0d08 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Thu, 20 Aug 2026 23:09:15 +0200 Subject: [PATCH 51/73] ci: unpin rustfmt/clippy components so building needs only cargo --- .github/workflows/ci.yml | 22 ++++++++++------------ CONTRIBUTING.md | 7 ++++++- rust-toolchain.toml | 10 +++++++++- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef86b417b..1cb7368fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,16 +29,16 @@ jobs: with: python-version: '3.12' - # Installing this package compiles the native extension, so cargo must be - # on PATH. Relying on the runner image's Rust plus rust-toolchain.toml's - # pin failed two ways on main within a day — "detected conflict: - # 'bin/cargo-clippy'" while rustup auto-installed the pinned components, - # and then "Cargo ... is not installed or is not on PATH" — each time - # failing the install step rather than the check the job exists to run. + # This job runs the cargo fmt and clippy hooks, so it is the one place + # that needs those components; rust-toolchain.toml deliberately does not + # pin them (see the comment there). It also compiles the extension, so + # cargo has to be on PATH at the pinned version rather than whatever the + # runner image happens to ship. - name: Install Rust uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: toolchain: "1.92.0" + components: rustfmt, clippy - name: Cache pre-commit uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 @@ -355,9 +355,8 @@ jobs: with: python-version: '3.12' - # See the note in the pre-commit job: without pinning the toolchain - # here, maturin's build lets rustup auto-install it and collide with - # the runner image's preinstalled cargo-clippy. + # Installing this package compiles the native extension, so cargo must + # be on PATH at the pinned version. - name: Install Rust uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: @@ -400,9 +399,8 @@ jobs: with: python-version: '3.12' - # See the note in the pre-commit job: without pinning the toolchain - # here, maturin's build lets rustup auto-install it and collide with - # the runner image's preinstalled cargo-clippy. + # Installing this package compiles the native extension, so cargo must + # be on PATH at the pinned version. - name: Install Rust uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dfafbb965..aea5055fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,6 +5,7 @@ ```bash git clone https://github.com/nikolay-e/diffctx.git cd diffctx +rustup component add rustfmt clippy python -m venv .venv && source .venv/bin/activate pip install "maturin>=1.10,<1.15" pip install -e ".[dev,full,mcp]" --no-build-isolation @@ -12,7 +13,11 @@ pre-commit install && pre-commit install --hook-type commit-msg ``` The package builds the Rust extension via maturin, so `maturin` must be -installed first and `--no-build-isolation` is required. +installed first and `--no-build-isolation` is required. `rust-toolchain.toml` +pins the compiler but deliberately not `rustfmt`/`clippy` — pinning components +makes rustup install them before anything can *build* the crate, which breaks +`pip install` from an sdist on a machine that already has them. The +`rustup component add` above is what the pre-commit hooks need. ## Development Workflow diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 904bafaee..badf5b262 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,12 @@ +# No `components` here on purpose. Anything that merely *builds* the crate — +# `pip install` from an sdist, maturin inside a pip build env, a CI job that +# only wants the extension compiled — would otherwise make rustup fetch +# rustfmt and clippy first, and on a machine that already has them (every +# GitHub runner image) that install aborts with +# `detected conflict: 'bin/cargo-fmt'`, failing the build for a component the +# build never uses. fmt and clippy are requested where they are run: the +# pre-commit CI job asks the toolchain action for them, and locally +# `rustup component add rustfmt clippy` once. [toolchain] channel = "1.92.0" -components = ["rustfmt", "clippy"] profile = "minimal" From 684538a8034eceaf98cd122b986b228a282831e2 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 01:20:36 +0200 Subject: [PATCH 52/73] refactor: dedup edges/parsers/config against helpers that already existed --- .../diffctx-native/src/config/edge_weights.rs | 236 ++--- crates/diffctx-native/src/config/weights.rs | 216 +---- crates/diffctx-native/src/edges/base.rs | 17 + .../src/edges/config_edges/cicd.rs | 15 +- .../src/edges/config_edges/kubernetes.rs | 49 +- .../src/edges/semantic/bazel.rs | 10 +- .../src/edges/semantic/c_family.rs | 102 +- .../src/edges/semantic/cargo_edges.rs | 27 +- .../src/edges/semantic/clojure.rs | 35 +- .../diffctx-native/src/edges/semantic/css.rs | 5 +- .../diffctx-native/src/edges/semantic/dart.rs | 98 +- .../diffctx-native/src/edges/semantic/dbt.rs | 34 +- .../src/edges/semantic/dotnet.rs | 115 +-- .../src/edges/semantic/elixir.rs | 26 +- .../src/edges/semantic/erlang.rs | 28 +- .../diffctx-native/src/edges/semantic/go.rs | 61 +- .../src/edges/semantic/graphql.rs | 22 +- .../src/edges/semantic/haskell.rs | 113 +-- .../src/edges/semantic/javascript.rs | 84 +- .../src/edges/semantic/julia.rs | 25 +- .../diffctx-native/src/edges/semantic/jvm.rs | 153 +-- .../src/edges/semantic/latex.rs | 2 +- .../diffctx-native/src/edges/semantic/lua.rs | 26 +- .../diffctx-native/src/edges/semantic/nim.rs | 72 +- .../diffctx-native/src/edges/semantic/nix.rs | 2 +- .../src/edges/semantic/ocaml.rs | 29 +- .../src/edges/semantic/openapi.rs | 8 +- .../diffctx-native/src/edges/semantic/perl.rs | 39 +- .../diffctx-native/src/edges/semantic/php.rs | 20 +- .../src/edges/semantic/prisma.rs | 27 +- .../src/edges/semantic/protobuf.rs | 25 +- .../src/edges/semantic/python.rs | 81 +- .../src/edges/semantic/r_lang.rs | 68 +- .../diffctx-native/src/edges/semantic/ruby.rs | 18 +- .../src/edges/semantic/rust_lang.rs | 148 +-- .../diffctx-native/src/edges/semantic/sql.rs | 23 +- .../src/edges/semantic/swift.rs | 25 +- .../src/edges/semantic/terraform.rs | 48 +- .../diffctx-native/src/edges/semantic/zig.rs | 67 +- crates/diffctx-native/src/git.rs | 59 +- crates/diffctx-native/src/main.rs | 144 ++- .../src/parsers/config_parser.rs | 70 +- .../src/parsers/tree_sitter_strategy.rs | 498 ++-------- crates/diffctx-native/src/stopwords.rs | 891 +----------------- crates/diffctx-native/src/stopwords/code.txt | 79 ++ crates/diffctx-native/src/stopwords/docs.txt | 8 + 46 files changed, 720 insertions(+), 3228 deletions(-) create mode 100644 crates/diffctx-native/src/stopwords/code.txt create mode 100644 crates/diffctx-native/src/stopwords/docs.txt diff --git a/crates/diffctx-native/src/config/edge_weights.rs b/crates/diffctx-native/src/config/edge_weights.rs index 686f19762..23d1a820d 100644 --- a/crates/diffctx-native/src/config/edge_weights.rs +++ b/crates/diffctx-native/src/config/edge_weights.rs @@ -1,5 +1,3 @@ -use once_cell::sync::Lazy; - pub struct DockerWeights { pub weight: f64, pub copy_weight: f64, @@ -9,19 +7,6 @@ pub struct DockerWeights { pub compose_volume_modifier: f64, } -impl Default for DockerWeights { - fn default() -> Self { - Self { - weight: 0.55, - copy_weight: 0.65, - compose_weight: 0.50, - reverse_factor: 0.40, - compose_context_modifier: 0.7, - compose_volume_modifier: 0.6, - } - } -} - pub struct KubernetesWeights { pub weight: f64, pub configmap_secret_weight: f64, @@ -31,19 +16,6 @@ pub struct KubernetesWeights { pub reverse_factor: f64, } -impl Default for KubernetesWeights { - fn default() -> Self { - Self { - weight: 0.65, - configmap_secret_weight: 0.70, - service_weight: 0.60, - selector_weight: 0.55, - image_weight: 0.40, - reverse_factor: 0.45, - } - } -} - pub struct HelmWeights { pub weight: f64, pub reverse_factor: f64, @@ -52,32 +24,11 @@ pub struct HelmWeights { pub configmap_modifier: f64, } -impl Default for HelmWeights { - fn default() -> Self { - Self { - weight: 0.70, - reverse_factor: 0.45, - value_modifier: 0.8, - definition_modifier: 0.9, - configmap_modifier: 0.5, - } - } -} - pub struct BuildSystemWeights { pub file_ref_weight: f64, pub reverse_factor: f64, } -impl Default for BuildSystemWeights { - fn default() -> Self { - Self { - file_ref_weight: 0.60, - reverse_factor: 0.35, - } - } -} - pub struct CicdWeights { pub weight: f64, pub script_weight: f64, @@ -85,17 +36,6 @@ pub struct CicdWeights { pub script_modifier: f64, } -impl Default for CicdWeights { - fn default() -> Self { - Self { - weight: 0.55, - script_weight: 0.60, - reverse_factor: 0.35, - script_modifier: 0.8, - } - } -} - pub struct PythonSemanticWeights { pub import_weight: f64, pub import_confirmed_boost: f64, @@ -103,67 +43,23 @@ pub struct PythonSemanticWeights { pub reverse_factor: f64, } -impl Default for PythonSemanticWeights { - fn default() -> Self { - Self { - import_weight: 0.75, - import_confirmed_boost: 1.5, - import_unconfirmed_penalty: 0.2, - reverse_factor: 0.5, - } - } -} - pub struct JavascriptSemanticWeights { pub import_weight: f64, pub reverse_factor: f64, } -impl Default for JavascriptSemanticWeights { - fn default() -> Self { - Self { - import_weight: 0.55, - reverse_factor: 0.5, - } - } -} - pub struct GoSemanticWeights { pub init_same_package_weight: f64, } -impl Default for GoSemanticWeights { - fn default() -> Self { - Self { - init_same_package_weight: 0.15, - } - } -} - pub struct OpenapiSemanticWeights { pub marker_scan_lines: usize, } -impl Default for OpenapiSemanticWeights { - fn default() -> Self { - Self { - marker_scan_lines: 5, - } - } -} - pub struct AnsibleSemanticWeights { pub sibling_modifier: f64, } -impl Default for AnsibleSemanticWeights { - fn default() -> Self { - Self { - sibling_modifier: 0.6, - } - } -} - pub struct CFamilySemanticWeights { pub base_weight: f64, /// A name (basename, function, type) defined in more than this many @@ -176,31 +72,12 @@ pub struct CFamilySemanticWeights { pub max_files_per_name: usize, } -impl Default for CFamilySemanticWeights { - fn default() -> Self { - Self { - base_weight: 0.70, - max_files_per_name: 8, - } - } -} - pub struct TerraformSemanticWeights { pub weight: f64, pub reverse_factor: f64, pub module_source_modifier: f64, } -impl Default for TerraformSemanticWeights { - fn default() -> Self { - Self { - weight: 0.60, - reverse_factor: 0.40, - module_source_modifier: 0.8, - } - } -} - pub struct TagsSemanticWeights { pub weight: f64, pub reverse_factor: f64, @@ -208,50 +85,81 @@ pub struct TagsSemanticWeights { pub min_ident_len: usize, } -impl Default for TagsSemanticWeights { - fn default() -> Self { - Self { - weight: 0.30, - reverse_factor: 0.70, - max_fragments_per_ident: 5, - min_ident_len: 3, - } - } -} - pub struct SemanticDiscoveryConfig { pub max_depth: usize, pub min_identifier_length: usize, pub min_ref_length_for_path_match: usize, } -impl Default for SemanticDiscoveryConfig { - fn default() -> Self { - Self { - max_depth: 2, - min_identifier_length: 2, - min_ref_length_for_path_match: 3, - } - } -} - -pub static DOCKER: Lazy = Lazy::new(DockerWeights::default); -pub static KUBERNETES: Lazy = Lazy::new(KubernetesWeights::default); -pub static HELM: Lazy = Lazy::new(HelmWeights::default); -pub static BUILD_SYSTEM: Lazy = Lazy::new(BuildSystemWeights::default); -pub static CICD: Lazy = Lazy::new(CicdWeights::default); -pub static PYTHON_SEMANTIC: Lazy = Lazy::new(PythonSemanticWeights::default); -pub static JAVASCRIPT_SEMANTIC: Lazy = - Lazy::new(JavascriptSemanticWeights::default); -pub static TERRAFORM_SEMANTIC: Lazy = - Lazy::new(TerraformSemanticWeights::default); -pub static GO_SEMANTIC: Lazy = Lazy::new(GoSemanticWeights::default); -pub static ANSIBLE_SEMANTIC: Lazy = - Lazy::new(AnsibleSemanticWeights::default); -pub static OPENAPI_SEMANTIC: Lazy = - Lazy::new(OpenapiSemanticWeights::default); -pub static C_FAMILY_SEMANTIC: Lazy = - Lazy::new(CFamilySemanticWeights::default); -pub static TAGS_SEMANTIC: Lazy = Lazy::new(TagsSemanticWeights::default); -pub static SEMANTIC_DISCOVERY: Lazy = - Lazy::new(SemanticDiscoveryConfig::default); +pub const DOCKER: DockerWeights = DockerWeights { + weight: 0.55, + copy_weight: 0.65, + compose_weight: 0.50, + reverse_factor: 0.40, + compose_context_modifier: 0.7, + compose_volume_modifier: 0.6, +}; +pub const KUBERNETES: KubernetesWeights = KubernetesWeights { + weight: 0.65, + configmap_secret_weight: 0.70, + service_weight: 0.60, + selector_weight: 0.55, + image_weight: 0.40, + reverse_factor: 0.45, +}; +pub const HELM: HelmWeights = HelmWeights { + weight: 0.70, + reverse_factor: 0.45, + value_modifier: 0.8, + definition_modifier: 0.9, + configmap_modifier: 0.5, +}; +pub const BUILD_SYSTEM: BuildSystemWeights = BuildSystemWeights { + file_ref_weight: 0.60, + reverse_factor: 0.35, +}; +pub const CICD: CicdWeights = CicdWeights { + weight: 0.55, + script_weight: 0.60, + reverse_factor: 0.35, + script_modifier: 0.8, +}; +pub const PYTHON_SEMANTIC: PythonSemanticWeights = PythonSemanticWeights { + import_weight: 0.75, + import_confirmed_boost: 1.5, + import_unconfirmed_penalty: 0.2, + reverse_factor: 0.5, +}; +pub const JAVASCRIPT_SEMANTIC: JavascriptSemanticWeights = JavascriptSemanticWeights { + import_weight: 0.55, + reverse_factor: 0.5, +}; +pub const TERRAFORM_SEMANTIC: TerraformSemanticWeights = TerraformSemanticWeights { + weight: 0.60, + reverse_factor: 0.40, + module_source_modifier: 0.8, +}; +pub const GO_SEMANTIC: GoSemanticWeights = GoSemanticWeights { + init_same_package_weight: 0.15, +}; +pub const ANSIBLE_SEMANTIC: AnsibleSemanticWeights = AnsibleSemanticWeights { + sibling_modifier: 0.6, +}; +pub const OPENAPI_SEMANTIC: OpenapiSemanticWeights = OpenapiSemanticWeights { + marker_scan_lines: 5, +}; +pub const C_FAMILY_SEMANTIC: CFamilySemanticWeights = CFamilySemanticWeights { + base_weight: 0.70, + max_files_per_name: 8, +}; +pub const TAGS_SEMANTIC: TagsSemanticWeights = TagsSemanticWeights { + weight: 0.30, + reverse_factor: 0.70, + max_fragments_per_ident: 5, + min_ident_len: 3, +}; +pub const SEMANTIC_DISCOVERY: SemanticDiscoveryConfig = SemanticDiscoveryConfig { + max_depth: 2, + min_identifier_length: 2, + min_ref_length_for_path_match: 3, +}; diff --git a/crates/diffctx-native/src/config/weights.rs b/crates/diffctx-native/src/config/weights.rs index 679ffac3f..0406a31d4 100644 --- a/crates/diffctx-native/src/config/weights.rs +++ b/crates/diffctx-native/src/config/weights.rs @@ -171,6 +171,24 @@ pub struct LangWeights { pub lexical_max: f64, } +impl LangWeights { + pub const fn new( + call: f64, + symbol_ref: f64, + type_ref: f64, + lexical_min: f64, + lexical_max: f64, + ) -> Self { + Self { + call, + symbol_ref, + type_ref, + lexical_min, + lexical_max, + } + } +} + pub static DEFAULT_LANG_WEIGHTS: LangWeights = LangWeights { call: 0.55, symbol_ref: 0.60, @@ -181,186 +199,24 @@ pub static DEFAULT_LANG_WEIGHTS: LangWeights = LangWeights { pub static LANG_WEIGHTS: Lazy> = Lazy::new(|| { let entries: &[(&str, LangWeights)] = &[ - ( - "python", - LangWeights { - call: 0.65, - symbol_ref: 0.70, - type_ref: 0.50, - lexical_min: 0.10, - lexical_max: 0.20, - }, - ), - ( - "javascript", - LangWeights { - call: 0.50, - symbol_ref: 0.55, - type_ref: 0.45, - lexical_min: 0.10, - lexical_max: 0.20, - }, - ), - ( - "jsx", - LangWeights { - call: 0.50, - symbol_ref: 0.55, - type_ref: 0.45, - lexical_min: 0.10, - lexical_max: 0.20, - }, - ), - ( - "typescript", - LangWeights { - call: 0.70, - symbol_ref: 0.75, - type_ref: 0.65, - lexical_min: 0.10, - lexical_max: 0.18, - }, - ), - ( - "tsx", - LangWeights { - call: 0.70, - symbol_ref: 0.75, - type_ref: 0.65, - lexical_min: 0.10, - lexical_max: 0.18, - }, - ), - ( - "rust", - LangWeights { - call: 0.90, - symbol_ref: 0.95, - type_ref: 0.85, - lexical_min: 0.05, - lexical_max: 0.10, - }, - ), - ( - "java", - LangWeights { - call: 0.85, - symbol_ref: 0.90, - type_ref: 0.80, - lexical_min: 0.05, - lexical_max: 0.10, - }, - ), - ( - "kotlin", - LangWeights { - call: 0.80, - symbol_ref: 0.85, - type_ref: 0.75, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), - ( - "scala", - LangWeights { - call: 0.80, - symbol_ref: 0.85, - type_ref: 0.75, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), - ( - "go", - LangWeights { - call: 0.80, - symbol_ref: 0.85, - type_ref: 0.75, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), - ( - "c", - LangWeights { - call: 0.60, - symbol_ref: 0.65, - type_ref: 0.55, - lexical_min: 0.08, - lexical_max: 0.15, - }, - ), - ( - "cpp", - LangWeights { - call: 0.65, - symbol_ref: 0.70, - type_ref: 0.60, - lexical_min: 0.08, - lexical_max: 0.15, - }, - ), - ( - "csharp", - LangWeights { - call: 0.75, - symbol_ref: 0.80, - type_ref: 0.70, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), - ( - "fsharp", - LangWeights { - call: 0.70, - symbol_ref: 0.75, - type_ref: 0.65, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), - ( - "ruby", - LangWeights { - call: 0.60, - symbol_ref: 0.65, - type_ref: 0.55, - lexical_min: 0.08, - lexical_max: 0.15, - }, - ), - ( - "php", - LangWeights { - call: 0.60, - symbol_ref: 0.65, - type_ref: 0.55, - lexical_min: 0.08, - lexical_max: 0.15, - }, - ), - ( - "shell", - LangWeights { - call: 0.40, - symbol_ref: 0.45, - type_ref: 0.35, - lexical_min: 0.10, - lexical_max: 0.18, - }, - ), - ( - "swift", - LangWeights { - call: 0.75, - symbol_ref: 0.80, - type_ref: 0.70, - lexical_min: 0.05, - lexical_max: 0.12, - }, - ), + ("python", LangWeights::new(0.65, 0.70, 0.50, 0.10, 0.20)), + ("javascript", LangWeights::new(0.50, 0.55, 0.45, 0.10, 0.20)), + ("jsx", LangWeights::new(0.50, 0.55, 0.45, 0.10, 0.20)), + ("typescript", LangWeights::new(0.70, 0.75, 0.65, 0.10, 0.18)), + ("tsx", LangWeights::new(0.70, 0.75, 0.65, 0.10, 0.18)), + ("rust", LangWeights::new(0.90, 0.95, 0.85, 0.05, 0.10)), + ("java", LangWeights::new(0.85, 0.90, 0.80, 0.05, 0.10)), + ("kotlin", LangWeights::new(0.80, 0.85, 0.75, 0.05, 0.12)), + ("scala", LangWeights::new(0.80, 0.85, 0.75, 0.05, 0.12)), + ("go", LangWeights::new(0.80, 0.85, 0.75, 0.05, 0.12)), + ("c", LangWeights::new(0.60, 0.65, 0.55, 0.08, 0.15)), + ("cpp", LangWeights::new(0.65, 0.70, 0.60, 0.08, 0.15)), + ("csharp", LangWeights::new(0.75, 0.80, 0.70, 0.05, 0.12)), + ("fsharp", LangWeights::new(0.70, 0.75, 0.65, 0.05, 0.12)), + ("ruby", LangWeights::new(0.60, 0.65, 0.55, 0.08, 0.15)), + ("php", LangWeights::new(0.60, 0.65, 0.55, 0.08, 0.15)), + ("shell", LangWeights::new(0.40, 0.45, 0.35, 0.10, 0.18)), + ("swift", LangWeights::new(0.75, 0.80, 0.70, 0.05, 0.12)), ]; entries.iter().copied().collect() }); diff --git a/crates/diffctx-native/src/edges/base.rs b/crates/diffctx-native/src/edges/base.rs index 16ba93e28..df6da2e04 100644 --- a/crates/diffctx-native/src/edges/base.rs +++ b/crates/diffctx-native/src/edges/base.rs @@ -1,6 +1,7 @@ use std::path::{Path, PathBuf}; use once_cell::sync::Lazy; +use regex::Regex; use rustc_hash::{FxHashMap, FxHashSet}; use crate::config::edge_weights::SEMANTIC_DISCOVERY; @@ -298,6 +299,7 @@ pub fn link_by_path_match( if matched.len() > MAX_FILES_PER_PATH_REF { return; } + // Not `add_edges_from_ids`: `matched` holds borrowed ids, not owned ones. for rep in matched { if rep != src_id { add_edge(edges, src_id, rep, weight, reverse_factor); @@ -407,6 +409,21 @@ pub fn discover_files_by_refs( discovered } +// The first capture group of every match, owned. Written out 97 times across +// `edges/`, and rustfmt spreads the chain over three lines each time. +pub fn captures1<'a>(re: &'a Regex, content: &'a str) -> impl Iterator + 'a { + re.captures_iter(content).map(|c| c[1].to_string()) +} + +// Keyword tables are written as one whitespace-separated string, not an array +// literal: rustfmt packs a short array and gives up on a long one, so 840 +// keywords across 28 tables occupied 880 lines. Every one of those tables is +// only ever probed with `contains`, never iterated, so nothing observes the +// literal layout. +pub fn kw(list: &str) -> FxHashSet<&str> { + list.split_ascii_whitespace().collect() +} + pub fn file_ext(path: &Path) -> String { path.extension() .map(|e| format!(".{}", e.to_string_lossy().to_lowercase())) diff --git a/crates/diffctx-native/src/edges/config_edges/cicd.rs b/crates/diffctx-native/src/edges/config_edges/cicd.rs index b1223cd38..673df985e 100644 --- a/crates/diffctx-native/src/edges/config_edges/cicd.rs +++ b/crates/diffctx-native/src/edges/config_edges/cicd.rs @@ -47,17 +47,12 @@ static FILE_REF_RE: Lazy = Lazy::new(|| { }); static PKG_MANAGER_SUBCOMMANDS: Lazy> = Lazy::new(|| { - [ - "run", "test", "start", "build", "install", "ci", "init", "publish", "pack", "link", - "unlink", "exec", "add", "remove", "upgrade", "info", "list", "outdated", "audit", "fix", - "cache", "config", "help", "version", "create", "set", "get", "why", "dedupe", "prune", - "dlx", "store", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "run test start build install ci init publish pack link unlink exec add remove upgrade info ", + "list outdated audit fix cache config help version create set get why dedupe prune dlx ", + "store ", + )) }); - fn is_github_actions(path: &Path) -> bool { let path_str = path.to_string_lossy(); let lower = path_str.to_lowercase(); diff --git a/crates/diffctx-native/src/edges/config_edges/kubernetes.rs b/crates/diffctx-native/src/edges/config_edges/kubernetes.rs index ff69a397e..5c0103c7b 100644 --- a/crates/diffctx-native/src/edges/config_edges/kubernetes.rs +++ b/crates/diffctx-native/src/edges/config_edges/kubernetes.rs @@ -70,49 +70,14 @@ static VOLUME_PVC_RE: Lazy = Lazy::new(|| { }); static K8S_KINDS: Lazy> = Lazy::new(|| { - [ - "Deployment", - "Service", - "ConfigMap", - "Secret", - "Ingress", - "Pod", - "ReplicaSet", - "StatefulSet", - "DaemonSet", - "Job", - "CronJob", - "PersistentVolume", - "PersistentVolumeClaim", - "ServiceAccount", - "Role", - "RoleBinding", - "ClusterRole", - "ClusterRoleBinding", - "NetworkPolicy", - "HorizontalPodAutoscaler", - "Namespace", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "Deployment Service ConfigMap Secret Ingress Pod ReplicaSet StatefulSet DaemonSet Job ", + "CronJob PersistentVolume PersistentVolumeClaim ServiceAccount Role RoleBinding ClusterRole ", + "ClusterRoleBinding NetworkPolicy HorizontalPodAutoscaler Namespace ", + )) }); - -static WORKLOAD_KINDS: Lazy> = Lazy::new(|| { - [ - "Pod", - "Deployment", - "StatefulSet", - "DaemonSet", - "ReplicaSet", - "Job", - "CronJob", - ] - .iter() - .copied() - .collect() -}); - +static WORKLOAD_KINDS: Lazy> = + Lazy::new(|| base::kw("Pod Deployment StatefulSet DaemonSet ReplicaSet Job CronJob")); fn is_yaml_file(path: &Path) -> bool { let ext = base::file_ext(path); YAML_EXTS.contains(ext.as_str()) diff --git a/crates/diffctx-native/src/edges/semantic/bazel.rs b/crates/diffctx-native/src/edges/semantic/bazel.rs index acb0eb1ee..30ee52fa7 100644 --- a/crates/diffctx-native/src/edges/semantic/bazel.rs +++ b/crates/diffctx-native/src/edges/semantic/bazel.rs @@ -40,17 +40,11 @@ fn is_bazel_file(path: &Path) -> bool { } fn extract_labels(content: &str) -> FxHashSet { - DEPS_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEPS_RE, content).collect() } fn extract_loads(content: &str) -> FxHashSet { - LOAD_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&LOAD_RE, content).collect() } fn extract_srcs(content: &str) -> FxHashSet { diff --git a/crates/diffctx-native/src/edges/semantic/c_family.rs b/crates/diffctx-native/src/edges/semantic/c_family.rs index 9821a4f57..e8f8ab7c9 100644 --- a/crates/diffctx-native/src/edges/semantic/c_family.rs +++ b/crates/diffctx-native/src/edges/semantic/c_family.rs @@ -11,7 +11,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::{Fragment, FragmentId}; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge}; +use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids}; fn is_c_family(path: &Path) -> bool { let ext = base::file_ext(path); @@ -45,59 +45,18 @@ static INHERITANCE_RE: Lazy = Lazy::new(|| { }); static C_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "for", - "while", - "switch", - "case", - "return", - "sizeof", - "typeof", - "alignof", - "static_assert", - "do", - "else", - "goto", - "break", - "continue", - "default", - "register", - "volatile", - "extern", - "typedef", - "auto", - "inline", - "restrict", - "noexcept", - "decltype", - "nullptr", - "throw", - "try", - "catch", - "delete", - "new", - "template", - "namespace", - "using", - "operator", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if for while switch case return sizeof typeof alignof static_assert do else goto break ", + "continue default register volatile extern typedef auto inline restrict noexcept decltype ", + "nullptr throw try catch delete new template namespace using operator ", + )) }); - static C_COMMON_MACROS: Lazy> = Lazy::new(|| { - [ - "NULL", "TRUE", "FALSE", "BOOL", "DWORD", "HANDLE", "VOID", "HRESULT", "LPCTSTR", "LPCSTR", - "LPWSTR", "INT", "UINT", "LONG", "ULONG", "WORD", "BYTE", "CHAR", "SHORT", "EOF", - "SIZE_MAX", "INT_MAX", "INT_MIN", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "NULL TRUE FALSE BOOL DWORD HANDLE VOID HRESULT LPCTSTR LPCSTR LPWSTR INT UINT LONG ULONG ", + "WORD BYTE CHAR SHORT EOF SIZE_MAX INT_MAX INT_MIN ", + )) }); - fn extract_includes(content: &str) -> FxHashSet { let mut includes = FxHashSet::default(); for cap in INCLUDE_RE.captures_iter(content) { @@ -111,17 +70,12 @@ fn extract_includes(content: &str) -> FxHashSet { } fn extract_definitions(content: &str) -> (FxHashSet, FxHashSet) { - let functions: FxHashSet = FUNC_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let functions: FxHashSet = base::captures1(&FUNC_DEF_RE, content) .filter(|n| { !C_KEYWORDS.contains(n.as_str()) && n.len() > SEMANTIC_DISCOVERY.min_identifier_length }) .collect(); - let types: FxHashSet = TYPE_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let types: FxHashSet = base::captures1(&TYPE_DEF_RE, content).collect(); (functions, types) } @@ -129,9 +83,7 @@ fn extract_references( content: &str, own_defs: &FxHashSet, ) -> (FxHashSet, FxHashSet) { - let calls: FxHashSet = FUNC_CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let calls: FxHashSet = base::captures1(&FUNC_CALL_RE, content) .filter(|n| { !C_KEYWORDS.contains(n.as_str()) && !own_defs.contains(n) @@ -139,9 +91,7 @@ fn extract_references( && n.len() > SEMANTIC_DISCOVERY.min_identifier_length }) .collect(); - let type_refs: FxHashSet = TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let type_refs: FxHashSet = base::captures1(&TYPE_REF_RE, content) .filter(|n| { !C_COMMON_MACROS.contains(n.as_str()) && !own_defs.contains(n) @@ -300,22 +250,26 @@ impl EdgeBuilder for CFamilyEdgeBuilder { if !unambiguous(func_def_files.get(call)) { continue; } - for def_id in func_defs_map.get(call).unwrap_or(&vec![]) { - if def_id != &f.id { - add_edge(&mut edges, &f.id, def_id, call_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &f.id, + func_defs_map.get(call).unwrap_or(&vec![]), + call_weight, + reverse_factor, + ); } for t in &type_refs { if !unambiguous(type_def_files.get(t)) { continue; } - for def_id in type_defs_map.get(t).unwrap_or(&vec![]) { - if def_id != &f.id { - add_edge(&mut edges, &f.id, def_id, type_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &f.id, + type_defs_map.get(t).unwrap_or(&vec![]), + type_weight, + reverse_factor, + ); } for cap in INHERITANCE_RE.captures_iter(&f.content) { diff --git a/crates/diffctx-native/src/edges/semantic/cargo_edges.rs b/crates/diffctx-native/src/edges/semantic/cargo_edges.rs index 361aceb18..e758cf045 100644 --- a/crates/diffctx-native/src/edges/semantic/cargo_edges.rs +++ b/crates/diffctx-native/src/edges/semantic/cargo_edges.rs @@ -8,7 +8,9 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::{Fragment, FragmentId}; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, FragmentIndex, add_edge, link_by_name}; +use super::super::base::{ + self, EdgeBuilder, FragmentIndex, add_edge, add_edges_from_ids, link_by_name, +}; static WORKSPACE_MEMBERS_RE: Lazy = Lazy::new(|| Regex::new(r"(?s)\[workspace\][^\[]*?members\s*=\s*\[(.*?)\]").unwrap()); @@ -70,10 +72,7 @@ fn extract_feature_deps(content: &str) -> FxHashSet { } fn extract_entry_points(content: &str) -> Vec { - let mut entries: Vec = BIN_SECTION_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let mut entries: Vec = base::captures1(&BIN_SECTION_RE, content).collect(); if let Some(c) = LIB_SECTION_RE.captures(content) { entries.push(c[1].to_string()); } @@ -136,22 +135,14 @@ impl EdgeBuilder for CargoEdgeBuilder { for (_, rel_path) in extract_path_deps(&cf.content) { let dep_dir = parent.join(&rel_path).to_string_lossy().to_string(); if let Some(fids) = cargo_by_dir.get(&dep_dir) { - for fid in fids { - if fid != &cf.id { - add_edge(&mut edges, &cf.id, fid, dep_w, rev); - } - } + add_edges_from_ids(&mut edges, &cf.id, &fids, dep_w, rev); } } for member in extract_workspace_members(&cf.content) { let member_dir = parent.join(&member).to_string_lossy().to_string(); if let Some(fids) = cargo_by_dir.get(&member_dir) { - for fid in fids { - if fid != &cf.id { - add_edge(&mut edges, &cf.id, fid, ws_w, rev); - } - } + add_edges_from_ids(&mut edges, &cf.id, &fids, ws_w, rev); } link_by_name( &cf.id, @@ -172,11 +163,7 @@ impl EdgeBuilder for CargoEdgeBuilder { } let dep_dir = parent.join(rel_path).to_string_lossy().to_string(); if let Some(fids) = cargo_by_dir.get(&dep_dir) { - for fid in fids { - if fid != &cf.id { - add_edge(&mut edges, &cf.id, fid, dep_w, rev); - } - } + add_edges_from_ids(&mut edges, &cf.id, &fids, dep_w, rev); } } } diff --git a/crates/diffctx-native/src/edges/semantic/clojure.rs b/crates/diffctx-native/src/edges/semantic/clojure.rs index 5824c2680..ce886048e 100644 --- a/crates/diffctx-native/src/edges/semantic/clojure.rs +++ b/crates/diffctx-native/src/edges/semantic/clojure.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_clojure_file(path: &Path) -> bool { base::has_ext(path, &[".clj", ".cljs", ".cljc", ".edn"]) @@ -26,18 +26,12 @@ static DEFN_RE: Lazy = Lazy::new(|| { static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\(([\w.\-]+/[\w\-!?*+<>=]+)").unwrap()); static CLJ_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", "do", "let", "fn", "def", "defn", "defmacro", "when", "cond", "case", "loop", - "recur", "throw", "try", "catch", "finally", "quote", "var", "ns", "require", "use", - "import", "in-ns", "refer", "nil", "true", "false", "println", "pr", "prn", "str", "first", - "rest", "cons", "conj", "assoc", "dissoc", "get", "count", "map", "filter", "reduce", - "apply", "partial", "comp", "identity", "not", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if do let fn def defn defmacro when cond case loop recur throw try catch finally quote var ", + "ns require use import in-ns refer nil true false println pr prn str first rest cons conj ", + "assoc dissoc get count map filter reduce apply partial comp identity not ", + )) }); - fn extract_requires(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); for cap in REQUIRE_RE.captures_iter(content) { @@ -72,10 +66,7 @@ fn extract_ns(content: &str) -> Option { } fn extract_defs(content: &str) -> FxHashSet { - DEFN_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEFN_RE, content).collect() } pub struct ClojureEdgeBuilder; @@ -134,11 +125,7 @@ impl EdgeBuilder for ClojureEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&func.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } @@ -147,11 +134,7 @@ impl EdgeBuilder for ClojureEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/css.rs b/crates/diffctx-native/src/edges/semantic/css.rs index b88574cad..1ad4c848a 100644 --- a/crates/diffctx-native/src/edges/semantic/css.rs +++ b/crates/diffctx-native/src/edges/semantic/css.rs @@ -18,10 +18,7 @@ static IMPORT_RE: Lazy = Lazy::new(|| Regex::new(r#"(?m)^\s*@(?:import|use|forward)\s+['"]([^'"]+)['"]"#).unwrap()); fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } pub struct CssEdgeBuilder; diff --git a/crates/diffctx-native/src/edges/semantic/dart.rs b/crates/diffctx-native/src/edges/semantic/dart.rs index 373f62c63..b9d01ba46 100644 --- a/crates/diffctx-native/src/edges/semantic/dart.rs +++ b/crates/diffctx-native/src/edges/semantic/dart.rs @@ -9,7 +9,8 @@ use crate::types::{Fragment, FragmentId}; use super::super::EdgeDict; use super::super::base::{ - self, EdgeBuilder, FragmentIndex, add_edge, discover_files_by_refs, link_by_name, + self, EdgeBuilder, FragmentIndex, add_edge, add_edges_from_ids, discover_files_by_refs, + link_by_name, }; fn is_dart_file(path: &Path) -> bool { @@ -33,75 +34,14 @@ static TYPE_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w+)\b").unw static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b([a-z_]\w+)\s*\(").unwrap()); static DART_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "else", - "for", - "while", - "do", - "switch", - "case", - "break", - "continue", - "return", - "var", - "final", - "const", - "void", - "null", - "true", - "false", - "new", - "this", - "super", - "class", - "extends", - "implements", - "with", - "abstract", - "import", - "export", - "library", - "part", - "typedef", - "enum", - "mixin", - "extension", - "async", - "await", - "yield", - "try", - "catch", - "finally", - "throw", - "rethrow", - "assert", - "in", - "is", - "as", - "dynamic", - "Function", - "String", - "int", - "double", - "bool", - "List", - "Map", - "Set", - "Future", - "Stream", - "Iterable", - "Object", - "Null", - "Never", - "Type", - "print", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if else for while do switch case break continue return var final const void null true ", + "false new this super class extends implements with abstract import export library part ", + "typedef enum mixin extension async await yield try catch finally throw rethrow assert in ", + "is as dynamic Function String int double bool List Map Set Future Stream Iterable Object ", + "Null Never Type print ", + )) }); - fn extract_refs(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); for cap in IMPORT_RE.captures_iter(content) { @@ -140,17 +80,13 @@ fn extract_defines(content: &str) -> FxHashSet { } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&TYPE_REF_RE, content) .filter(|n| !DART_KEYWORDS.contains(n.as_str())) .collect() } fn extract_calls(content: &str) -> FxHashSet { - CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&CALL_RE, content) .filter(|n| !DART_KEYWORDS.contains(n.as_str())) .collect() } @@ -205,11 +141,7 @@ impl EdgeBuilder for DartEdgeBuilder { continue; } if let Some(dst_ids) = name_to_defs.get(name) { - for dst_id in dst_ids { - if dst_id != &f.id { - add_edge(&mut edges, &f.id, dst_id, type_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &dst_ids, type_weight, reverse_factor); } } @@ -219,11 +151,7 @@ impl EdgeBuilder for DartEdgeBuilder { continue; } if let Some(dst_ids) = name_to_defs.get(name) { - for dst_id in dst_ids { - if dst_id != &f.id { - add_edge(&mut edges, &f.id, dst_id, fn_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &dst_ids, fn_weight, reverse_factor); } } diff --git a/crates/diffctx-native/src/edges/semantic/dbt.rs b/crates/diffctx-native/src/edges/semantic/dbt.rs index abac87f72..76aaa2c9c 100644 --- a/crates/diffctx-native/src/edges/semantic/dbt.rs +++ b/crates/diffctx-native/src/edges/semantic/dbt.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_dbt_file(content: &str) -> bool { content.contains("{{ ref(") || content.contains("{{ source(") || content.contains("{{ config(") @@ -27,20 +27,13 @@ static MACRO_CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\{\{\s*(\w+)\s*\(" static MACRO_DEF_RE: Lazy = Lazy::new(|| Regex::new(r"\{%-?\s*macro\s+(\w+)").unwrap()); static DBT_BUILTINS: Lazy> = Lazy::new(|| { - [ - "ref", "source", "config", "set", "if", "for", "endif", "endfor", "else", "elif", "block", - "endblock", "macro", "endmacro", "do", "call", "filter", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "ref source config set if for endif endfor else elif block endblock macro endmacro do call ", + "filter ", + )) }); - fn extract_refs(content: &str) -> FxHashSet { - REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&REF_RE, content).collect() } fn extract_sources(content: &str) -> FxHashSet { @@ -51,18 +44,13 @@ fn extract_sources(content: &str) -> FxHashSet { } fn extract_macro_calls(content: &str) -> FxHashSet { - MACRO_CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&MACRO_CALL_RE, content) .filter(|n| !DBT_BUILTINS.contains(n.as_str())) .collect() } fn extract_macro_defs(content: &str) -> FxHashSet { - MACRO_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MACRO_DEF_RE, content).collect() } pub struct DbtEdgeBuilder; @@ -106,11 +94,7 @@ impl EdgeBuilder for DbtEdgeBuilder { } for mc in extract_macro_calls(&f.content) { if let Some(targets) = macro_to_frags.get(&mc.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, macro_w, macro_rev); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, macro_w, macro_rev); } } } diff --git a/crates/diffctx-native/src/edges/semantic/dotnet.rs b/crates/diffctx-native/src/edges/semantic/dotnet.rs index f89518b92..7b4f882f7 100644 --- a/crates/diffctx-native/src/edges/semantic/dotnet.rs +++ b/crates/diffctx-native/src/edges/semantic/dotnet.rs @@ -10,7 +10,8 @@ use crate::types::{Fragment, FragmentId, FragmentKind}; use super::super::EdgeDict; use super::super::base::{ - self, EdgeBuilder, FragmentIndex, add_edge, discover_files_by_refs, link_by_name, + self, EdgeBuilder, FragmentIndex, add_edge, add_edges_from_ids, discover_files_by_refs, + link_by_name, }; /// Same ambiguity bar as `CFamilySemanticWeights::max_files_per_name`: a name @@ -61,81 +62,15 @@ static TYPE_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w+)\b").unw static MEMBER_USE_RE: Lazy = Lazy::new(|| Regex::new(r"\.\s*([a-zA-Z_]\w{2,})").unwrap()); static DOTNET_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "String", - "Int32", - "Boolean", - "Object", - "Void", - "Task", - "Action", - "Func", - "List", - "Dictionary", - "IEnumerable", - "IList", - "ICollection", - "Exception", - "Console", - "Math", - "Convert", - "Type", - "Attribute", - "Nullable", - "if", - "else", - "for", - "while", - "do", - "switch", - "case", - "break", - "continue", - "return", - "new", - "this", - "base", - "null", - "true", - "false", - "var", - "dynamic", - "async", - "await", - "try", - "catch", - "finally", - "throw", - "using", - "namespace", - "class", - "struct", - "interface", - "enum", - "record", - "delegate", - "event", - "public", - "private", - "protected", - "internal", - "static", - "abstract", - "sealed", - "virtual", - "override", - "partial", - "readonly", - "const", - "ref", - "out", - "in", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "String Int32 Boolean Object Void Task Action Func List Dictionary IEnumerable IList ", + "ICollection Exception Console Math Convert Type Attribute Nullable if else for while do ", + "switch case break continue return new this base null true false var dynamic async await ", + "try catch finally throw using namespace class struct interface enum record delegate event ", + "public private protected internal static abstract sealed virtual override partial readonly ", + "const ref out in ", + )) }); - fn extract_usings(content: &str, path: &Path) -> FxHashSet { let mut refs = FxHashSet::default(); if is_cs_file(path) { @@ -152,10 +87,7 @@ fn extract_usings(content: &str, path: &Path) -> FxHashSet { } fn extract_namespaces(content: &str) -> FxHashSet { - NAMESPACE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&NAMESPACE_RE, content).collect() } fn extract_defines(content: &str) -> FxHashSet { @@ -167,10 +99,7 @@ fn extract_defines(content: &str) -> FxHashSet { } fn extract_partials(content: &str) -> FxHashSet { - PARTIAL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&PARTIAL_RE, content).collect() } fn extract_base_types(content: &str) -> FxHashSet { @@ -187,17 +116,13 @@ fn extract_base_types(content: &str) -> FxHashSet { } fn extract_attributes(content: &str) -> FxHashSet { - ATTRIBUTE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&ATTRIBUTE_RE, content) .filter(|n| !DOTNET_KEYWORDS.contains(n.as_str())) .collect() } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&TYPE_REF_RE, content) .filter(|n| !DOTNET_KEYWORDS.contains(n.as_str())) .collect() } @@ -377,11 +302,7 @@ impl EdgeBuilder for DotNetEdgeBuilder { let usings = extract_usings(&f.content, Path::new(f.path())); for u in &usings { if let Some(targets) = ns_to_frags.get(u) { - for tgt in targets { - if tgt != &f.id { - add_edge(&mut edges, &f.id, tgt, using_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, using_weight, reverse_factor); } link_by_name(&f.id, u, &idx, &mut edges, using_weight, reverse_factor); } @@ -448,11 +369,7 @@ impl EdgeBuilder for DotNetEdgeBuilder { for ns in &self_ns { if let Some(targets) = ns_to_frags.get(ns) { - for tgt in targets { - if tgt != &f.id { - add_edge(&mut edges, &f.id, tgt, same_ns_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, same_ns_weight, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/elixir.rs b/crates/diffctx-native/src/edges/semantic/elixir.rs index a36aa7fdb..81519ae58 100644 --- a/crates/diffctx-native/src/edges/semantic/elixir.rs +++ b/crates/diffctx-native/src/edges/semantic/elixir.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_elixir_file(path: &Path) -> bool { base::has_ext(path, &[".ex", ".exs"]) @@ -38,23 +38,17 @@ fn extract_refs(content: &str) -> FxHashSet { &*REQUIRE_RE, &*BEHAVIOUR_RE, ] { - refs.extend(re.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&re, content)); } refs } fn extract_module_defs(content: &str) -> FxHashSet { - DEFMODULE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEFMODULE_RE, content).collect() } fn extract_func_defs(content: &str) -> FxHashSet { - DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEF_RE, content).collect() } pub struct ElixirEdgeBuilder; @@ -119,11 +113,7 @@ impl EdgeBuilder for ElixirEdgeBuilder { let name = &mref[1]; let leaf = name.split('.').last().unwrap_or(name).to_lowercase(); if let Some(targets) = module_to_frags.get(&leaf) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } for id in &f.identifiers { @@ -131,11 +121,7 @@ impl EdgeBuilder for ElixirEdgeBuilder { continue; } if let Some(targets) = fn_to_frags.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/erlang.rs b/crates/diffctx-native/src/edges/semantic/erlang.rs index 97717c35d..8ba5480f0 100644 --- a/crates/diffctx-native/src/edges/semantic/erlang.rs +++ b/crates/diffctx-native/src/edges/semantic/erlang.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_erlang_file(path: &Path) -> bool { base::has_ext(path, &[".erl", ".hrl"]) @@ -24,13 +24,13 @@ static REMOTE_CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b([a-z]\w*):(\w+ fn extract_refs(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); - refs.extend(INCLUDE_RE.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&INCLUDE_RE, content)); refs.extend( BEHAVIOUR_RE .captures_iter(content) .map(|c| c[1].to_string()), ); - refs.extend(IMPORT_RE.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&IMPORT_RE, content)); refs.extend( REMOTE_CALL_RE .captures_iter(content) @@ -40,17 +40,11 @@ fn extract_refs(content: &str) -> FxHashSet { } fn extract_modules(content: &str) -> FxHashSet { - MODULE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MODULE_RE, content).collect() } fn extract_func_defs(content: &str) -> FxHashSet { - FUNC_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&FUNC_DEF_RE, content).collect() } pub struct ErlangEdgeBuilder; @@ -108,11 +102,7 @@ impl EdgeBuilder for ErlangEdgeBuilder { for cap in REMOTE_CALL_RE.captures_iter(&f.content) { let module = &cap[1]; if let Some(targets) = mod_to_frags.get(&module.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, call_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, call_w, reverse_factor); } } for id in &f.identifiers { @@ -120,11 +110,7 @@ impl EdgeBuilder for ErlangEdgeBuilder { continue; } if let Some(targets) = fn_to_frags.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, call_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, call_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/go.rs b/crates/diffctx-native/src/edges/semantic/go.rs index 352f5e1c7..5248330b9 100644 --- a/crates/diffctx-native/src/edges/semantic/go.rs +++ b/crates/diffctx-native/src/edges/semantic/go.rs @@ -31,10 +31,7 @@ static PKG_CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b([a-z]\w+)\.([A-Z] static INIT_FUNC_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*func\s+init\s*\(").unwrap()); fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } /// None when the fragment carries no `package` line — i.e. every @@ -47,14 +44,8 @@ fn get_package_name(content: &str) -> Option { } fn extract_definitions(content: &str) -> (FxHashSet, FxHashSet) { - let funcs: FxHashSet = FUNC_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - let types: FxHashSet = TYPE_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let funcs: FxHashSet = base::captures1(&FUNC_DEF_RE, content).collect(); + let types: FxHashSet = base::captures1(&TYPE_DEF_RE, content).collect(); (funcs, types) } @@ -65,14 +56,8 @@ fn extract_references( FxHashSet, FxHashSet<(String, String)>, ) { - let func_calls: FxHashSet = FUNC_CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - let type_refs: FxHashSet = TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let func_calls: FxHashSet = base::captures1(&FUNC_CALL_RE, content).collect(); + let type_refs: FxHashSet = base::captures1(&TYPE_REF_RE, content).collect(); let pkg_calls: FxHashSet<(String, String)> = PKG_CALL_RE .captures_iter(content) .map(|c| (c[1].to_string(), c[2].to_string())) @@ -242,11 +227,13 @@ impl EdgeBuilder for GoEdgeBuilder { if name_capped(&lower) { continue; } - for fid in type_defs.get(&lower).unwrap_or(&vec![]) { - if fid != &gf.id { - add_edge(&mut edges, &gf.id, fid, type_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &gf.id, + type_defs.get(&lower).unwrap_or(&vec![]), + type_weight, + reverse_factor, + ); } for func_call in &func_calls { @@ -254,11 +241,13 @@ impl EdgeBuilder for GoEdgeBuilder { if name_capped(&lower) { continue; } - for fid in func_defs.get(&lower).unwrap_or(&vec![]) { - if fid != &gf.id { - add_edge(&mut edges, &gf.id, fid, func_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &gf.id, + func_defs.get(&lower).unwrap_or(&vec![]), + func_weight, + reverse_factor, + ); } for (pkg_name, _symbol) in &pkg_calls { @@ -266,11 +255,13 @@ impl EdgeBuilder for GoEdgeBuilder { if pkg_capped(&lower) { continue; } - for fid in pkg_to_frags.get(&lower).unwrap_or(&vec![]) { - if fid != &gf.id { - add_edge(&mut edges, &gf.id, fid, func_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &gf.id, + pkg_to_frags.get(&lower).unwrap_or(&vec![]), + func_weight, + reverse_factor, + ); } let has_init = has_init_func(&gf.content); diff --git a/crates/diffctx-native/src/edges/semantic/graphql.rs b/crates/diffctx-native/src/edges/semantic/graphql.rs index b3a1bf28c..060117ce9 100644 --- a/crates/diffctx-native/src/edges/semantic/graphql.rs +++ b/crates/diffctx-native/src/edges/semantic/graphql.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_graphql_file(path: &Path) -> bool { base::has_ext(path, &[".graphql", ".gql"]) @@ -33,16 +33,11 @@ static GQL_BUILTINS: Lazy> = Lazy::new(|| { }); fn extract_defs(content: &str) -> FxHashSet { - TYPE_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&TYPE_DEF_RE, content).collect() } fn extract_type_refs(content: &str) -> FxHashSet { - let mut refs: FxHashSet = FIELD_TYPE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let mut refs: FxHashSet = base::captures1(&FIELD_TYPE_RE, content) .filter(|n| !GQL_BUILTINS.contains(n.as_str())) .collect(); for cap in IMPLEMENTS_RE.captures_iter(content) { @@ -65,10 +60,7 @@ fn extract_type_refs(content: &str) -> FxHashSet { } fn extract_extends(content: &str) -> FxHashSet { - EXTEND_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&EXTEND_RE, content).collect() } pub struct GraphqlEdgeBuilder; @@ -111,11 +103,7 @@ impl EdgeBuilder for GraphqlEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&tref.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, type_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, type_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/haskell.rs b/crates/diffctx-native/src/edges/semantic/haskell.rs index 898c508ae..375a5727a 100644 --- a/crates/diffctx-native/src/edges/semantic/haskell.rs +++ b/crates/diffctx-native/src/edges/semantic/haskell.rs @@ -9,7 +9,8 @@ use crate::types::{Fragment, FragmentId}; use super::super::EdgeDict; use super::super::base::{ - self, EdgeBuilder, FragmentIndex, add_edge, discover_files_by_refs, link_by_name, + self, EdgeBuilder, FragmentIndex, add_edge, add_edges_from_ids, discover_files_by_refs, + link_by_name, }; fn is_haskell_file(path: &Path) -> bool { @@ -31,86 +32,20 @@ static FUNC_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^([a-z_]\w*)\s*::"). static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b([a-z_]\w+)\b").unwrap()); static HASKELL_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "module", - "where", - "import", - "qualified", - "as", - "hiding", - "data", - "newtype", - "type", - "class", - "instance", - "deriving", - "if", - "then", - "else", - "case", - "of", - "let", - "in", - "do", - "return", - "where", - "forall", - "foreign", - "default", - "infixl", - "infixr", - "infix", - "otherwise", - "undefined", - "error", - "show", - "read", - "map", - "filter", - "foldl", - "foldr", - "head", - "tail", - "null", - "length", - "print", - "putStrLn", - "getLine", - "main", - "IO", - "Maybe", - "Just", - "Nothing", - "Either", - "Left", - "Right", - "True", - "False", - "Bool", - "Int", - "Integer", - "Float", - "Double", - "Char", - "String", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "module where import qualified as hiding data newtype type class instance deriving if then ", + "else case of let in do return where forall foreign default infixl infixr infix otherwise ", + "undefined error show read map filter foldl foldr head tail null length print putStrLn ", + "getLine main IO Maybe Just Nothing Either Left Right True False Bool Int Integer Float ", + "Double Char String ", + )) }); - fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } fn extract_modules(content: &str) -> FxHashSet { - MODULE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MODULE_RE, content).collect() } fn extract_defines(content: &str) -> FxHashSet { @@ -135,17 +70,13 @@ fn extract_instance_refs(content: &str) -> Vec<(String, String)> { } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&TYPE_REF_RE, content) .filter(|n| !HASKELL_KEYWORDS.contains(n.as_str())) .collect() } fn extract_calls(content: &str) -> FxHashSet { - CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&CALL_RE, content) .filter(|n| !HASKELL_KEYWORDS.contains(n.as_str())) .collect() } @@ -201,11 +132,7 @@ impl EdgeBuilder for HaskellEdgeBuilder { let imports = extract_imports(&f.content); for imp in &imports { if let Some(targets) = module_to_frags.get(imp) { - for tgt in targets { - if tgt != &f.id { - add_edge(&mut edges, &f.id, tgt, import_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, import_weight, reverse_factor); } link_by_name(&f.id, imp, &idx, &mut edges, import_weight, reverse_factor); } @@ -235,11 +162,7 @@ impl EdgeBuilder for HaskellEdgeBuilder { continue; } if let Some(dst_ids) = name_to_defs.get(name) { - for dst_id in dst_ids { - if dst_id != &f.id { - add_edge(&mut edges, &f.id, dst_id, type_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &dst_ids, type_weight, reverse_factor); } } @@ -249,11 +172,7 @@ impl EdgeBuilder for HaskellEdgeBuilder { continue; } if let Some(dst_ids) = name_to_defs.get(name) { - for dst_id in dst_ids { - if dst_id != &f.id { - add_edge(&mut edges, &f.id, dst_id, fn_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &dst_ids, fn_weight, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/javascript.rs b/crates/diffctx-native/src/edges/semantic/javascript.rs index c51742689..824164e75 100644 --- a/crates/diffctx-native/src/edges/semantic/javascript.rs +++ b/crates/diffctx-native/src/edges/semantic/javascript.rs @@ -43,70 +43,14 @@ static DEF_RE: Lazy = Lazy::new(|| { }); static JS_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "for", - "while", - "return", - "function", - "class", - "const", - "let", - "var", - "new", - "delete", - "typeof", - "instanceof", - "void", - "switch", - "case", - "break", - "continue", - "throw", - "try", - "catch", - "finally", - "yield", - "async", - "await", - "import", - "export", - "default", - "from", - "require", - "super", - "this", - "true", - "false", - "null", - "undefined", - "console", - "Math", - "Object", - "Array", - "String", - "Number", - "Boolean", - "Error", - "Promise", - "Map", - "Set", - "Date", - "JSON", - "RegExp", - "Symbol", - "parseInt", - "parseFloat", - "setTimeout", - "setInterval", - "clearTimeout", - "clearInterval", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if for while return function class const let var new delete typeof instanceof void switch ", + "case break continue throw try catch finally yield async await import export default from ", + "require super this true false null undefined console Math Object Array String Number ", + "Boolean Error Promise Map Set Date JSON RegExp Symbol parseInt parseFloat setTimeout ", + "setInterval clearTimeout clearInterval ", + )) }); - fn extract_import_sources(content: &str) -> FxHashSet { let mut sources = FxHashSet::default(); for cap in IMPORT_SOURCE_RE.captures_iter(content) { @@ -121,25 +65,17 @@ fn extract_import_sources(content: &str) -> FxHashSet { } fn extract_defines(content: &str) -> FxHashSet { - DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEF_RE, content).collect() } fn extract_calls(content: &str) -> FxHashSet { - CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&CALL_RE, content) .filter(|n| !JS_KEYWORDS.contains(n.as_str())) .collect() } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&TYPE_REF_RE, content).collect() } fn extract_exports(content: &str) -> FxHashSet { diff --git a/crates/diffctx-native/src/edges/semantic/julia.rs b/crates/diffctx-native/src/edges/semantic/julia.rs index bd8af5efe..5c941eb8d 100644 --- a/crates/diffctx-native/src/edges/semantic/julia.rs +++ b/crates/diffctx-native/src/edges/semantic/julia.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_julia_file(path: &Path) -> bool { base::has_ext(path, &[".jl"]) @@ -45,17 +45,14 @@ fn extract_imports(content: &str) -> FxHashSet { } } } - refs.extend(INCLUDE_RE.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&INCLUDE_RE, content)); refs } fn extract_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = STRUCT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - defs.extend(ABSTRACT_RE.captures_iter(content).map(|c| c[1].to_string())); - defs.extend(FUNC_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut defs: FxHashSet = base::captures1(&STRUCT_RE, content).collect(); + defs.extend(base::captures1(&ABSTRACT_RE, content)); + defs.extend(base::captures1(&FUNC_RE, content)); defs.extend( SHORT_FUNC_RE .captures_iter(content) @@ -111,11 +108,7 @@ impl EdgeBuilder for JuliaEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, type_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, type_w, reverse_factor); } } for id in &f.identifiers { @@ -123,11 +116,7 @@ impl EdgeBuilder for JuliaEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/jvm.rs b/crates/diffctx-native/src/edges/semantic/jvm.rs index 8e893b0e0..82c30a8e6 100644 --- a/crates/diffctx-native/src/edges/semantic/jvm.rs +++ b/crates/diffctx-native/src/edges/semantic/jvm.rs @@ -12,7 +12,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::{Fragment, FragmentId, FragmentKind}; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge}; +use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids}; /// Same ambiguity bar as `CFamilySemanticWeights::max_files_per_name`: a name /// resolving to more files than this names a vocabulary word, not a @@ -73,78 +73,16 @@ static SCALA_EXTENDS_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)\b(?:extends|with)\s+([A-Z]\w*)").unwrap()); static JVM_STDLIB_TYPES: Lazy> = Lazy::new(|| { - [ - "String", - "Integer", - "Long", - "Double", - "Float", - "Boolean", - "Byte", - "Short", - "Character", - "Object", - "Class", - "System", - "Math", - "Collections", - "Arrays", - "Optional", - "HashMap", - "ArrayList", - "LinkedList", - "Iterator", - "Iterable", - "Comparable", - "Runnable", - "Thread", - "Exception", - "RuntimeException", - "IllegalArgumentException", - "IllegalStateException", - "NullPointerException", - "IndexOutOfBoundsException", - "IOException", - "InputStream", - "OutputStream", - "StringBuilder", - "StringBuffer", - "Number", - "Enum", - "Void", - "Override", - "Unit", - "Any", - "AnyVal", - "AnyRef", - "Nothing", - "Option", - "Some", - "Either", - "Left", - "Right", - "Try", - "Success", - "Failure", - "Future", - "Promise", - "Seq", - "Vector", - "Map", - "Set", - "Tuple", - "Function", - "Product", - "Serializable", - "Pair", - "Triple", - "Sequence", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "String Integer Long Double Float Boolean Byte Short Character Object Class System Math ", + "Collections Arrays Optional HashMap ArrayList LinkedList Iterator Iterable Comparable ", + "Runnable Thread Exception RuntimeException IllegalArgumentException IllegalStateException ", + "NullPointerException IndexOutOfBoundsException IOException InputStream OutputStream ", + "StringBuilder StringBuffer Number Enum Void Override Unit Any AnyVal AnyRef Nothing Option ", + "Some Either Left Right Try Success Failure Future Promise Seq Vector Map Set Tuple ", + "Function Product Serializable Pair Triple Sequence ", + )) }); - struct ScalaImport { prefix: String, selectors: Vec, @@ -288,15 +226,9 @@ fn parse_scala_imports(content: &str) -> Vec { fn extract_imports(content: &str, path: &Path) -> FxHashSet { if is_java(path) { - JAVA_IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&JAVA_IMPORT_RE, content).collect() } else if is_kotlin(path) { - KOTLIN_IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&KOTLIN_IMPORT_RE, content).collect() } else if is_scala(path) { let mut refs = FxHashSet::default(); for imp in parse_scala_imports(content) { @@ -319,20 +251,11 @@ fn extract_imports(content: &str, path: &Path) -> FxHashSet { fn extract_classes(content: &str, path: &Path) -> FxHashSet { if is_java(path) { - JAVA_CLASS_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&JAVA_CLASS_RE, content).collect() } else if is_kotlin(path) { - KOTLIN_CLASS_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&KOTLIN_CLASS_RE, content).collect() } else if is_scala(path) { - SCALA_CLASS_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&SCALA_CLASS_RE, content).collect() } else { FxHashSet::default() } @@ -391,17 +314,11 @@ fn extract_inheritance(content: &str, path: &Path) -> FxHashSet { } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&TYPE_REF_RE, content).collect() } fn extract_annotations(content: &str) -> FxHashSet { - ANNOTATION_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&ANNOTATION_RE, content).collect() } fn extract_member_uses(content: &str) -> FxHashSet { @@ -610,11 +527,13 @@ impl EdgeBuilder for JVMEdgeBuilder { .entry(jf.path()) .or_default() .insert(imp.prefix.clone()); - for fid in package_to_frags.get(imp.prefix.as_str()).unwrap_or(&vec![]) { - if fid != &jf.id { - add_edge(&mut edges, &jf.id, fid, import_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &jf.id, + package_to_frags.get(imp.prefix.as_str()).unwrap_or(&vec![]), + import_weight, + reverse_factor, + ); // `import Tables._` / `import pkg.Obj._` endorses an // object's members, not a package: the prefix leaf is // the object name. @@ -643,11 +562,13 @@ impl EdgeBuilder for JVMEdgeBuilder { .entry(jf.path()) .or_default() .insert(pkg_prefix.to_string()); - for fid in package_to_frags.get(pkg_prefix).unwrap_or(&vec![]) { - if fid != &jf.id { - add_edge(&mut edges, &jf.id, fid, import_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &jf.id, + package_to_frags.get(pkg_prefix).unwrap_or(&vec![]), + import_weight, + reverse_factor, + ); } else { let mut hit_fqn = false; if let Some(fids) = fqn_to_frags.get(&imp.to_lowercase()) { @@ -741,11 +662,13 @@ impl EdgeBuilder for JVMEdgeBuilder { } if let Some(current_pkg) = extract_package(&jf.content, path) { - for fid in package_to_frags.get(¤t_pkg).unwrap_or(&vec![]) { - if fid != &jf.id { - add_edge(&mut edges, &jf.id, fid, same_package_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &jf.id, + package_to_frags.get(¤t_pkg).unwrap_or(&vec![]), + same_package_weight, + reverse_factor, + ); } } diff --git a/crates/diffctx-native/src/edges/semantic/latex.rs b/crates/diffctx-native/src/edges/semantic/latex.rs index 88b3d03ff..53abba3f7 100644 --- a/crates/diffctx-native/src/edges/semantic/latex.rs +++ b/crates/diffctx-native/src/edges/semantic/latex.rs @@ -25,7 +25,7 @@ static SUBFILE_RE: Lazy = fn extract_refs(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); for re in [&*INPUT_RE, &*SUBFILE_RE] { - refs.extend(re.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&re, content)); } for cap in USEPACKAGE_RE.captures_iter(content) { for pkg in cap[1].split(',') { diff --git a/crates/diffctx-native/src/edges/semantic/lua.rs b/crates/diffctx-native/src/edges/semantic/lua.rs index c824a7a14..4cfec9113 100644 --- a/crates/diffctx-native/src/edges/semantic/lua.rs +++ b/crates/diffctx-native/src/edges/semantic/lua.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_lua_file(path: &Path) -> bool { base::has_ext(path, &[".lua"]) @@ -25,11 +25,8 @@ static LOCAL_FUNC_RE: Lazy = static METHOD_CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b(\w+)[:.]\w+\s*\(").unwrap()); fn extract_requires(content: &str) -> FxHashSet { - let mut refs: FxHashSet = REQUIRE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - refs.extend(DOFILE_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut refs: FxHashSet = base::captures1(&REQUIRE_RE, content).collect(); + refs.extend(base::captures1(&DOFILE_RE, content)); refs } @@ -49,10 +46,7 @@ fn extract_defs(content: &str) -> FxHashSet { } fn extract_method_targets(content: &str) -> FxHashSet { - METHOD_CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&METHOD_CALL_RE, content).collect() } pub struct LuaEdgeBuilder; @@ -95,11 +89,7 @@ impl EdgeBuilder for LuaEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&target.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, method_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, method_w, reverse_factor); } } for id in &f.identifiers { @@ -107,11 +97,7 @@ impl EdgeBuilder for LuaEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/nim.rs b/crates/diffctx-native/src/edges/semantic/nim.rs index c0e0f529b..4357d825a 100644 --- a/crates/diffctx-native/src/edges/semantic/nim.rs +++ b/crates/diffctx-native/src/edges/semantic/nim.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_nim_file(path: &Path) -> bool { base::has_ext(path, &[".nim", ".nims"]) @@ -27,61 +27,12 @@ static TYPE_SINGLE_RE: Lazy = Lazy::new(|| { static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b(\w+)\s*[\(\[]").unwrap()); static NIM_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "elif", - "else", - "when", - "case", - "of", - "for", - "while", - "block", - "break", - "continue", - "return", - "result", - "proc", - "func", - "method", - "var", - "let", - "const", - "type", - "import", - "from", - "include", - "export", - "template", - "macro", - "iterator", - "converter", - "object", - "ref", - "ptr", - "nil", - "true", - "false", - "and", - "or", - "not", - "xor", - "div", - "mod", - "echo", - "assert", - "doAssert", - "len", - "add", - "del", - "new", - "newSeq", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if elif else when case of for while block break continue return result proc func method ", + "var let const type import from include export template macro iterator converter object ref ", + "ptr nil true false and or not xor div mod echo assert doAssert len add del new newSeq ", + )) }); - fn extract_imports(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); for cap in IMPORT_RE.captures_iter(content) { @@ -104,10 +55,7 @@ fn extract_imports(content: &str) -> FxHashSet { } fn extract_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = PROC_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let mut defs: FxHashSet = base::captures1(&PROC_RE, content).collect(); defs.extend( TYPE_SINGLE_RE .captures_iter(content) @@ -162,11 +110,7 @@ impl EdgeBuilder for NimEdgeBuilder { fn_w }; if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/nix.rs b/crates/diffctx-native/src/edges/semantic/nix.rs index 0d68e1f8a..0767e47ea 100644 --- a/crates/diffctx-native/src/edges/semantic/nix.rs +++ b/crates/diffctx-native/src/edges/semantic/nix.rs @@ -21,7 +21,7 @@ static FILE_REF_RE: Lazy = Lazy::new(|| Regex::new(r#"\./[\w./-]+"#).unwr fn extract_refs(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); - refs.extend(IMPORT_RE.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&IMPORT_RE, content)); refs.extend( CALL_PACKAGE_RE .captures_iter(content) diff --git a/crates/diffctx-native/src/edges/semantic/ocaml.rs b/crates/diffctx-native/src/edges/semantic/ocaml.rs index f52318a85..5e7b886d3 100644 --- a/crates/diffctx-native/src/edges/semantic/ocaml.rs +++ b/crates/diffctx-native/src/edges/semantic/ocaml.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_ocaml_file(path: &Path) -> bool { base::has_ext(path, &[".ml", ".mli"]) @@ -25,8 +25,8 @@ static MODULE_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w*)\.\w+" fn extract_opens(content: &str) -> FxHashSet { let mut refs = FxHashSet::default(); - refs.extend(OPEN_RE.captures_iter(content).map(|c| c[1].to_string())); - refs.extend(INCLUDE_RE.captures_iter(content).map(|c| c[1].to_string())); + refs.extend(base::captures1(&OPEN_RE, content)); + refs.extend(base::captures1(&INCLUDE_RE, content)); refs } @@ -37,17 +37,14 @@ fn extract_defs(content: &str) -> FxHashSet { .captures_iter(content) .map(|c| c[1].to_string()), ); - defs.extend(LET_RE.captures_iter(content).map(|c| c[1].to_string())); - defs.extend(VAL_RE.captures_iter(content).map(|c| c[1].to_string())); - defs.extend(TYPE_DEF_RE.captures_iter(content).map(|c| c[1].to_string())); + defs.extend(base::captures1(&LET_RE, content)); + defs.extend(base::captures1(&VAL_RE, content)); + defs.extend(base::captures1(&TYPE_DEF_RE, content)); defs } fn extract_module_refs(content: &str) -> FxHashSet { - MODULE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MODULE_REF_RE, content).collect() } pub struct OCamlEdgeBuilder; @@ -94,11 +91,7 @@ impl EdgeBuilder for OCamlEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&mref.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, mod_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, mod_w, reverse_factor); } } for id in &f.identifiers { @@ -106,11 +99,7 @@ impl EdgeBuilder for OCamlEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/openapi.rs b/crates/diffctx-native/src/edges/semantic/openapi.rs index e76518a2f..bbc862a74 100644 --- a/crates/diffctx-native/src/edges/semantic/openapi.rs +++ b/crates/diffctx-native/src/edges/semantic/openapi.rs @@ -9,7 +9,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_openapi_candidate(path: &Path) -> bool { let ext = base::file_ext(path); @@ -110,11 +110,7 @@ impl EdgeBuilder for OpenapiEdgeBuilder { for f in &frags { for iref in extract_internal_refs(&f.content) { if let Some(targets) = schema_to_frags.get(&iref.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, internal_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, internal_w, reverse_factor); } } for eref in extract_external_refs(&f.content) { diff --git a/crates/diffctx-native/src/edges/semantic/perl.rs b/crates/diffctx-native/src/edges/semantic/perl.rs index 484132589..2f1f05a45 100644 --- a/crates/diffctx-native/src/edges/semantic/perl.rs +++ b/crates/diffctx-native/src/edges/semantic/perl.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_perl_file(path: &Path) -> bool { base::has_ext(path, &[".pl", ".pm"]) @@ -47,24 +47,10 @@ fn extract_uses(content: &str) -> FxHashSet { } static PERL_PRAGMAS: Lazy> = Lazy::new(|| { - [ - "strict", - "warnings", - "utf8", - "lib", - "constant", - "vars", - "feature", - "Exporter", - "Carp", - "Data::Dumper", - "File::Basename", - ] - .iter() - .copied() - .collect() + base::kw( + "strict warnings utf8 lib constant vars feature Exporter Carp Data::Dumper File::Basename", + ) }); - fn extract_packages(content: &str) -> FxHashSet { PACKAGE_RE .captures_iter(content) @@ -76,10 +62,7 @@ fn extract_packages(content: &str) -> FxHashSet { } fn extract_subs(content: &str) -> FxHashSet { - SUB_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&SUB_RE, content).collect() } fn extract_parents(content: &str) -> FxHashSet { @@ -161,11 +144,7 @@ impl EdgeBuilder for PerlEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&method.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, method_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, method_w, reverse_factor); } } for id in &f.identifiers { @@ -173,11 +152,7 @@ impl EdgeBuilder for PerlEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&id.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/php.rs b/crates/diffctx-native/src/edges/semantic/php.rs index 410569d36..bd3009422 100644 --- a/crates/diffctx-native/src/edges/semantic/php.rs +++ b/crates/diffctx-native/src/edges/semantic/php.rs @@ -9,7 +9,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_php_file(path: &Path) -> bool { PHP_EXTENSIONS.contains(base::file_ext(path).as_str()) @@ -43,10 +43,7 @@ fn extract_uses(content: &str) -> FxHashSet { } fn extract_requires(content: &str) -> FxHashSet { - REQUIRE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&REQUIRE_RE, content).collect() } fn extract_namespace(content: &str) -> Option { @@ -54,11 +51,8 @@ fn extract_namespace(content: &str) -> Option { } fn extract_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - defs.extend(FUNC_DEF_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut defs: FxHashSet = base::captures1(&DEF_RE, content).collect(); + defs.extend(base::captures1(&FUNC_DEF_RE, content)); defs } @@ -131,11 +125,7 @@ impl EdgeBuilder for PhpEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, type_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, type_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/prisma.rs b/crates/diffctx-native/src/edges/semantic/prisma.rs index 43c707bda..e743fc4cb 100644 --- a/crates/diffctx-native/src/edges/semantic/prisma.rs +++ b/crates/diffctx-native/src/edges/semantic/prisma.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; fn is_prisma_file(path: &Path) -> bool { base::has_ext(path, &[".prisma"]) @@ -25,26 +25,17 @@ static TYPE_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w+)\b").unw static CLIENT_RE: Lazy = Lazy::new(|| Regex::new(r"(?:prisma\.\w+|@prisma/client)").unwrap()); -static PRISMA_BUILTINS: Lazy> = Lazy::new(|| { - [ - "String", "Int", "Float", "Boolean", "DateTime", "Json", "Bytes", "BigInt", "Decimal", - ] - .iter() - .copied() - .collect() -}); - +static PRISMA_BUILTINS: Lazy> = + Lazy::new(|| base::kw("String Int Float Boolean DateTime Json Bytes BigInt Decimal")); fn extract_defs(content: &str) -> FxHashSet { let mut defs = FxHashSet::default(); - defs.extend(MODEL_RE.captures_iter(content).map(|c| c[1].to_string())); - defs.extend(ENUM_RE.captures_iter(content).map(|c| c[1].to_string())); + defs.extend(base::captures1(&MODEL_RE, content)); + defs.extend(base::captures1(&ENUM_RE, content)); defs } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&TYPE_REF_RE, content) .filter(|t| !PRISMA_BUILTINS.contains(t.as_str())) .collect() } @@ -85,11 +76,7 @@ impl EdgeBuilder for PrismaEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&tref.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, schema_w, schema_rev); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, schema_w, schema_rev); } } } diff --git a/crates/diffctx-native/src/edges/semantic/protobuf.rs b/crates/diffctx-native/src/edges/semantic/protobuf.rs index 844104ece..21ac63249 100644 --- a/crates/diffctx-native/src/edges/semantic/protobuf.rs +++ b/crates/diffctx-native/src/edges/semantic/protobuf.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_proto_file(path: &Path) -> bool { base::has_ext(path, &[".proto"]) @@ -26,25 +26,16 @@ static RPC_TYPE_RE: Lazy = Lazy::new(|| { }); fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } fn extract_defs(content: &str) -> FxHashSet { - MSG_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MSG_RE, content).collect() } fn extract_type_refs(content: &str) -> FxHashSet { - let mut refs: FxHashSet = FIELD_TYPE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - refs.extend(RPC_TYPE_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut refs: FxHashSet = base::captures1(&FIELD_TYPE_RE, content).collect(); + refs.extend(base::captures1(&RPC_TYPE_RE, content)); refs } @@ -93,11 +84,7 @@ impl EdgeBuilder for ProtobufEdgeBuilder { msg_w }; if let Some(targets) = name_to_defs.get(&tref.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/python.rs b/crates/diffctx-native/src/edges/semantic/python.rs index 7c2976715..add20399a 100644 --- a/crates/diffctx-native/src/edges/semantic/python.rs +++ b/crates/diffctx-native/src/edges/semantic/python.rs @@ -55,90 +55,27 @@ fn extract_imports(content: &str, path: &Path, repo_root: Option<&Path>) -> FxHa } fn extract_defines(content: &str) -> FxHashSet { - DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&DEF_RE, content).collect() } fn extract_calls(content: &str) -> FxHashSet { - CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&CALL_RE, content) .filter(|n| !PY_KEYWORDS.contains(n.as_str())) .collect() } fn extract_type_refs(content: &str) -> FxHashSet { - TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&TYPE_REF_RE, content).collect() } static PY_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "for", - "while", - "return", - "def", - "class", - "import", - "from", - "as", - "with", - "try", - "except", - "finally", - "raise", - "pass", - "break", - "continue", - "yield", - "lambda", - "assert", - "del", - "elif", - "else", - "global", - "nonlocal", - "and", - "or", - "not", - "is", - "in", - "async", - "await", - "True", - "False", - "None", - "print", - "len", - "range", - "type", - "list", - "dict", - "set", - "tuple", - "str", - "int", - "float", - "bool", - "super", - "isinstance", - "hasattr", - "getattr", - "setattr", - "property", - "staticmethod", - "classmethod", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if for while return def class import from as with try except finally raise pass break ", + "continue yield lambda assert del elif else global nonlocal and or not is in async await ", + "True False None print len range type list dict set tuple str int float bool super ", + "isinstance hasattr getattr setattr property staticmethod classmethod ", + )) }); - pub struct PythonEdgeBuilder; impl EdgeBuilder for PythonEdgeBuilder { diff --git a/crates/diffctx-native/src/edges/semantic/r_lang.rs b/crates/diffctx-native/src/edges/semantic/r_lang.rs index 185729fe4..e0250b573 100644 --- a/crates/diffctx-native/src/edges/semantic/r_lang.rs +++ b/crates/diffctx-native/src/edges/semantic/r_lang.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_r_file(path: &Path) -> bool { base::has_ext(path, &[".r", ".rmd"]) @@ -25,59 +25,19 @@ static S4_METHOD_RE: Lazy = static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b([a-zA-Z_.]\w*)\s*\(").unwrap()); static R_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "else", - "for", - "while", - "repeat", - "function", - "return", - "next", - "break", - "in", - "TRUE", - "FALSE", - "NULL", - "NA", - "Inf", - "NaN", - "library", - "require", - "source", - "print", - "cat", - "paste", - "c", - "list", - "data.frame", - "matrix", - "length", - "nrow", - "ncol", - "which", - "apply", - "sapply", - "lapply", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if else for while repeat function return next break in TRUE FALSE NULL NA Inf NaN library ", + "require source print cat paste c list data.frame matrix length nrow ncol which apply ", + "sapply lapply ", + )) }); - fn extract_sources(content: &str) -> FxHashSet { - SOURCE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&SOURCE_RE, content).collect() } fn extract_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = FUNC_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - defs.extend(S4_CLASS_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut defs: FxHashSet = base::captures1(&FUNC_DEF_RE, content).collect(); + defs.extend(base::captures1(&S4_CLASS_RE, content)); defs.extend( S4_METHOD_RE .captures_iter(content) @@ -87,9 +47,7 @@ fn extract_defs(content: &str) -> FxHashSet { } fn extract_calls(content: &str) -> FxHashSet { - CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + base::captures1(&CALL_RE, content) .filter(|n| !R_KEYWORDS.contains(n.as_str())) .collect() } @@ -139,11 +97,7 @@ impl EdgeBuilder for RLangEdgeBuilder { fn_w }; if let Some(targets) = name_to_defs.get(&call.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/ruby.rs b/crates/diffctx-native/src/edges/semantic/ruby.rs index d61f958a2..5f3845e9b 100644 --- a/crates/diffctx-native/src/edges/semantic/ruby.rs +++ b/crates/diffctx-native/src/edges/semantic/ruby.rs @@ -9,7 +9,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_ruby_file(path: &Path) -> bool { RUBY_EXTENSIONS.contains(base::file_ext(path).as_str()) @@ -27,10 +27,7 @@ static CONST_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z][A-Za-z_]*(?:::[A-Z][A-Za-z_]*)*)\b").unwrap()); fn extract_requires(content: &str) -> FxHashSet { - REQUIRE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&REQUIRE_RE, content).collect() } fn extract_defines(content: &str) -> FxHashSet { @@ -54,10 +51,7 @@ fn extract_mixins(content: &str) -> FxHashSet { } fn extract_const_refs(content: &str) -> FxHashSet { - CONST_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&CONST_REF_RE, content).collect() } pub struct RubyEdgeBuilder; @@ -106,11 +100,7 @@ impl EdgeBuilder for RubyEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&leaf.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, const_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, const_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/rust_lang.rs b/crates/diffctx-native/src/edges/semantic/rust_lang.rs index 14b0c0fbe..d2b541c15 100644 --- a/crates/diffctx-native/src/edges/semantic/rust_lang.rs +++ b/crates/diffctx-native/src/edges/semantic/rust_lang.rs @@ -38,97 +38,24 @@ static IMPL_RE: Lazy = static PUB_USE_RE: Lazy = Lazy::new(|| Regex::new(r"(?m)^\s*pub\s+use\s+([\w:]+)").unwrap()); static RUST_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "else", - "for", - "while", - "loop", - "match", - "return", - "break", - "continue", - "let", - "mut", - "ref", - "fn", - "pub", - "mod", - "use", - "struct", - "enum", - "trait", - "impl", - "type", - "where", - "as", - "in", - "self", - "super", - "crate", - "extern", - "async", - "await", - "move", - "unsafe", - "const", - "static", - "dyn", - "box", - "true", - "false", - "Some", - "None", - "Ok", - "Err", - "vec", - "println", - "eprintln", - "format", - "write", - "writeln", - "panic", - "assert", - "assert_eq", - "assert_ne", - "debug_assert", - "todo", - "unimplemented", - "unreachable", - "cfg", - "derive", - "allow", - "deny", - "warn", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if else for while loop match return break continue let mut ref fn pub mod use struct enum ", + "trait impl type where as in self super crate extern async await move unsafe const static ", + "dyn box true false Some None Ok Err vec println eprintln format write writeln panic assert ", + "assert_eq assert_ne debug_assert todo unimplemented unreachable cfg derive allow deny warn ", + )) }); - fn extract_uses(content: &str) -> FxHashSet { - USE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&USE_RE, content).collect() } fn extract_mods(content: &str) -> FxHashSet { - MOD_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&MOD_RE, content).collect() } fn extract_definitions(content: &str) -> (FxHashSet, FxHashSet) { - let funcs: FxHashSet = FN_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - let types: FxHashSet = TYPE_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); + let funcs: FxHashSet = base::captures1(&FN_DEF_RE, content).collect(); + let types: FxHashSet = base::captures1(&TYPE_DEF_RE, content).collect(); (funcs, types) } @@ -140,10 +67,7 @@ fn extract_trait_impls(content: &str) -> Vec<(String, String)> { } fn extract_pub_uses(content: &str) -> Vec { - PUB_USE_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&PUB_USE_RE, content).collect() } fn extract_references( @@ -153,14 +77,10 @@ fn extract_references( FxHashSet, FxHashSet<(String, String)>, ) { - let type_refs: FxHashSet = TYPE_REF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let type_refs: FxHashSet = base::captures1(&TYPE_REF_RE, content) .filter(|n| !RUST_KEYWORDS.contains(n.as_str())) .collect(); - let fn_calls: FxHashSet = FN_CALL_RE - .captures_iter(content) - .map(|c| c[1].to_string()) + let fn_calls: FxHashSet = base::captures1(&FN_CALL_RE, content) .filter(|n| !RUST_KEYWORDS.contains(n.as_str())) .collect(); let path_calls: FxHashSet<(String, String)> = PATH_CALL_RE @@ -300,11 +220,13 @@ impl EdgeBuilder for RustEdgeBuilder { for (impl_fid, pairs) in &trait_impls { for (trait_name, _type_name) in pairs { - for trait_fid in type_defs.get(&trait_name.to_lowercase()).unwrap_or(&vec![]) { - if trait_fid != impl_fid { - add_edge(&mut edges, impl_fid, trait_fid, type_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + impl_fid, + type_defs.get(&trait_name.to_lowercase()).unwrap_or(&vec![]), + type_weight, + reverse_factor, + ); } } @@ -315,11 +237,7 @@ impl EdgeBuilder for RustEdgeBuilder { .iter() .flatten() { - for target_fid in *target_list { - if target_fid != &f.id { - add_edge(&mut edges, &f.id, target_fid, use_weight, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, *target_list, use_weight, reverse_factor); } } } @@ -373,11 +291,13 @@ impl EdgeBuilder for RustEdgeBuilder { if name_capped(&lower) { continue; } - for fid in type_defs.get(&lower).unwrap_or(&vec![]) { - if fid != &rf.id { - add_edge(&mut edges, &rf.id, fid, type_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &rf.id, + type_defs.get(&lower).unwrap_or(&vec![]), + type_weight, + reverse_factor, + ); } for fn_call in &fn_calls { @@ -385,11 +305,13 @@ impl EdgeBuilder for RustEdgeBuilder { if name_capped(&lower) { continue; } - for fid in fn_defs.get(&lower).unwrap_or(&vec![]) { - if fid != &rf.id { - add_edge(&mut edges, &rf.id, fid, fn_weight, reverse_factor); - } - } + add_edges_from_ids( + &mut edges, + &rf.id, + fn_defs.get(&lower).unwrap_or(&vec![]), + fn_weight, + reverse_factor, + ); } for (mod_name, _symbol) in &path_calls { diff --git a/crates/diffctx-native/src/edges/semantic/sql.rs b/crates/diffctx-native/src/edges/semantic/sql.rs index 0d6dc4a79..b031375d8 100644 --- a/crates/diffctx-native/src/edges/semantic/sql.rs +++ b/crates/diffctx-native/src/edges/semantic/sql.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_sql_file(path: &Path) -> bool { base::has_ext(path, &[".sql"]) @@ -24,17 +24,12 @@ static TABLE_REF_RE: Lazy = Lazy::new(|| { }); static SQL_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "select", "from", "where", "and", "or", "not", "in", "exists", "null", "true", "false", - "set", "values", "as", "on", "using", "left", "right", "inner", "outer", "cross", "group", - "order", "by", "having", "limit", "offset", "union", "all", "distinct", "case", "when", - "then", "else", "end", "if", "begin", "declare", "returns", "return", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "select from where and or not in exists null true false set values as on using left right ", + "inner outer cross group order by having limit offset union all distinct case when then ", + "else end if begin declare returns return ", + )) }); - fn extract_creates(content: &str) -> FxHashSet { CREATE_RE .captures_iter(content) @@ -100,11 +95,7 @@ impl EdgeBuilder for SqlEdgeBuilder { table_ref_w }; if let Some(targets) = table_to_frags.get(&tref) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/swift.rs b/crates/diffctx-native/src/edges/semantic/swift.rs index 39a1dfa50..816d08531 100644 --- a/crates/diffctx-native/src/edges/semantic/swift.rs +++ b/crates/diffctx-native/src/edges/semantic/swift.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_swift_file(path: &Path) -> bool { base::has_ext(path, &[".swift"]) @@ -30,18 +30,12 @@ static EXTENSION_RE: Lazy = static TYPE_REF_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w*)\b").unwrap()); fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } fn extract_type_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = TYPE_DEF_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - defs.extend(FUNC_DEF_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut defs: FxHashSet = base::captures1(&TYPE_DEF_RE, content).collect(); + defs.extend(base::captures1(&FUNC_DEF_RE, content)); defs } @@ -59,10 +53,7 @@ fn extract_conformances(content: &str) -> FxHashSet { } fn extract_extensions(content: &str) -> FxHashSet { - EXTENSION_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&EXTENSION_RE, content).collect() } pub struct SwiftEdgeBuilder; @@ -117,11 +108,7 @@ impl EdgeBuilder for SwiftEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, type_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, type_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/edges/semantic/terraform.rs b/crates/diffctx-native/src/edges/semantic/terraform.rs index 10a1d8409..26d947d0a 100644 --- a/crates/diffctx-native/src/edges/semantic/terraform.rs +++ b/crates/diffctx-native/src/edges/semantic/terraform.rs @@ -33,49 +33,13 @@ static SOURCE_RE: Lazy = Lazy::new(|| Regex::new(r#"(?m)^\s*source\s*=\s*"([^"]+)""#).unwrap()); static GENERIC_NAMES: Lazy> = Lazy::new(|| { - [ - "name", - "region", - "tags", - "environment", - "env", - "description", - "enabled", - "type", - "value", - "default", - "count", - "id", - "arn", - "vpc_id", - "subnet_id", - "key", - "project", - "owner", - "stage", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "name region tags environment env description enabled type value default count id arn ", + "vpc_id subnet_id key project owner stage ", + )) }); - -static RESOURCE_SKIP_TYPES: Lazy> = Lazy::new(|| { - [ - "var", - "local", - "data", - "module", - "path", - "terraform", - "each", - "self", - "count", - ] - .iter() - .copied() - .collect() -}); - +static RESOURCE_SKIP_TYPES: Lazy> = + Lazy::new(|| base::kw("var local data module path terraform each self count")); fn extract_locals(content: &str) -> FxHashSet { let mut locals_keys = FxHashSet::default(); let mut in_locals = false; diff --git a/crates/diffctx-native/src/edges/semantic/zig.rs b/crates/diffctx-native/src/edges/semantic/zig.rs index 4e659c8f3..247a8d065 100644 --- a/crates/diffctx-native/src/edges/semantic/zig.rs +++ b/crates/diffctx-native/src/edges/semantic/zig.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edge, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; fn is_zig_file(path: &Path) -> bool { base::has_ext(path, &[".zig"]) @@ -25,56 +25,19 @@ static TYPE_RE: Lazy = Lazy::new(|| Regex::new(r"\b([A-Z]\w+)\b").unwrap( static CALL_RE: Lazy = Lazy::new(|| Regex::new(r"\b(\w+)\s*\(").unwrap()); static ZIG_KEYWORDS: Lazy> = Lazy::new(|| { - [ - "if", - "else", - "while", - "for", - "switch", - "return", - "break", - "continue", - "fn", - "pub", - "const", - "var", - "struct", - "enum", - "union", - "error", - "try", - "catch", - "unreachable", - "undefined", - "null", - "true", - "false", - "comptime", - "inline", - "extern", - "export", - "test", - "defer", - "errdefer", - ] - .iter() - .copied() - .collect() + base::kw(concat!( + "if else while for switch return break continue fn pub const var struct enum union error ", + "try catch unreachable undefined null true false comptime inline extern export test defer ", + "errdefer ", + )) }); - fn extract_imports(content: &str) -> FxHashSet { - IMPORT_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect() + base::captures1(&IMPORT_RE, content).collect() } fn extract_defs(content: &str) -> FxHashSet { - let mut defs: FxHashSet = FN_RE - .captures_iter(content) - .map(|c| c[1].to_string()) - .collect(); - defs.extend(STRUCT_RE.captures_iter(content).map(|c| c[1].to_string())); + let mut defs: FxHashSet = base::captures1(&FN_RE, content).collect(); + defs.extend(base::captures1(&STRUCT_RE, content)); defs } @@ -119,11 +82,7 @@ impl EdgeBuilder for ZigEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, type_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, type_w, reverse_factor); } } for cap in CALL_RE.captures_iter(&f.content) { @@ -132,11 +91,7 @@ impl EdgeBuilder for ZigEdgeBuilder { continue; } if let Some(targets) = name_to_defs.get(&name.to_lowercase()) { - for t in targets { - if t != &f.id { - add_edge(&mut edges, &f.id, t, fn_w, reverse_factor); - } - } + add_edges_from_ids(&mut edges, &f.id, &targets, fn_w, reverse_factor); } } } diff --git a/crates/diffctx-native/src/git.rs b/crates/diffctx-native/src/git.rs index ab715c0a9..4d196864b 100644 --- a/crates/diffctx-native/src/git.rs +++ b/crates/diffctx-native/src/git.rs @@ -111,6 +111,22 @@ fn validate_diff_range(diff_range: &str) -> Result<()> { Ok(()) } +// The argv for every `git diff` this crate runs. Both controls it carries are +// security-relevant — SAFE_DIFF_FLAGS pins the parser against hostile repo-local +// config, `validate_diff_range` is the argv-injection gate whose own comment +// records a bypass that already shipped — and until now they were enforced by +// five copies of this sequence agreeing with each other. +fn diff_args<'a>(extra: &[&'a str], diff_range: Option<&'a str>) -> Result> { + let mut args: Vec<&str> = vec!["diff"]; + args.extend_from_slice(SAFE_DIFF_FLAGS); + args.extend_from_slice(extra); + if let Some(range) = diff_range { + validate_diff_range(range)?; + args.push(range); + } + Ok(args) +} + /// Second gate for the single revisions derived from a range (`base`, `head`), /// covering the call sites that pass a rev straight into argv or into the /// `cat-file --batch` request stream. A leading dash turns the rev into a git @@ -349,12 +365,7 @@ pub fn find_toplevel(path: &Path) -> Option { } pub fn get_diff_text(repo_root: &Path, diff_range: Option<&str>) -> Result { - let mut args: Vec<&str> = vec!["diff"]; - args.extend_from_slice(SAFE_DIFF_FLAGS); - if let Some(range) = diff_range { - validate_diff_range(range)?; - args.push(range); - } + let args = diff_args(&[], diff_range)?; run_git(repo_root, &args) } @@ -546,14 +557,7 @@ fn parse_hunk_header(caps: ®ex::Captures, path: &Path) -> Option { } pub fn parse_diff(repo_root: &Path, diff_range: Option<&str>) -> Result> { - let mut args: Vec<&str> = vec!["diff"]; - args.extend_from_slice(SAFE_DIFF_FLAGS); - args.push("--unified=0"); - args.push("-M"); - if let Some(range) = diff_range { - validate_diff_range(range)?; - args.push(range); - } + let args = diff_args(&["--unified=0", "-M"], diff_range)?; let output = run_git(repo_root, &args)?; Ok(parse_hunks_from_diff_output(&output, repo_root)) @@ -613,13 +617,7 @@ pub fn run_git_z(repo_root: &Path, args: &[&str]) -> Result> { } pub fn get_changed_files(repo_root: &Path, diff_range: Option<&str>) -> Result> { - let mut args: Vec<&str> = vec!["diff"]; - args.extend_from_slice(SAFE_DIFF_FLAGS); - args.extend_from_slice(&["--name-only", "-M", "-z"]); - if let Some(range) = diff_range { - validate_diff_range(range)?; - args.push(range); - } + let args = diff_args(&["--name-only", "-M", "-z"], diff_range)?; let parts = run_git_z(repo_root, &args)?; Ok(parts .iter() @@ -633,13 +631,7 @@ pub fn get_changed_files(repo_root: &Path, diff_range: Option<&str>) -> Result) -> Result> { - let mut args: Vec<&str> = vec!["diff"]; - args.extend_from_slice(SAFE_DIFF_FLAGS); - args.extend_from_slice(&["--diff-filter=D", "--name-only", "-M", "-z"]); - if let Some(range) = diff_range { - validate_diff_range(range)?; - args.push(range); - } + let args = diff_args(&["--diff-filter=D", "--name-only", "-M", "-z"], diff_range)?; let parts = run_git_z(repo_root, &args)?; Ok(parts .iter() @@ -660,13 +652,10 @@ pub fn get_deleted_files(repo_root: &Path, diff_range: Option<&str>) -> Result) -> Result> { - let mut args: Vec<&str> = vec!["diff"]; - args.extend_from_slice(SAFE_DIFF_FLAGS); - args.extend_from_slice(&["--diff-filter=R", "--name-status", "-M", "-z"]); - if let Some(range) = diff_range { - validate_diff_range(range)?; - args.push(range); - } + let args = diff_args( + &["--diff-filter=R", "--name-status", "-M", "-z"], + diff_range, + )?; let output = run_git(repo_root, &args)?; let parts: Vec<&str> = output.split('\0').collect(); diff --git a/crates/diffctx-native/src/main.rs b/crates/diffctx-native/src/main.rs index 420aa6444..d3cb11f75 100644 --- a/crates/diffctx-native/src/main.rs +++ b/crates/diffctx-native/src/main.rs @@ -143,6 +143,57 @@ fn print_token_summary(rendered: &str) { // Mirrors `_diff_result_is_empty` in src/diffctx/_app.py: deletions and renames // are real signal even with zero fragments, so only a result carrying neither // counts as empty. +fn run_with_deadline(timeout: u64, work: F) -> Result +where + F: FnOnce() -> Result + Send + 'static, + T: Send + 'static, +{ + let (tx, rx) = mpsc::channel(); + thread::spawn(move || { + let _ = tx.send(work()); + }); + match rx.recv_timeout(Duration::from_secs(timeout)) { + Ok(result) => result, + Err(mpsc::RecvTimeoutError::Timeout) => { + eprintln!( + "diffctx: pipeline exceeded {timeout}s wall-clock deadline; aborting before \ + OOM/SIGKILL. Narrow the review with an explicit '--diff ..' range or \ + run on a smaller subtree, or raise '--timeout'." + ); + std::process::exit(124); + } + Err(mpsc::RecvTimeoutError::Disconnected) => { + anyhow::bail!("diffctx: pipeline worker terminated unexpectedly"); + } + } +} + +// Both entry points end the same way, and the exit code is part of the CLI +// contract: an empty diff must still print, still summarize, and still exit +// EXIT_EMPTY_DIFF rather than 0. +fn emit(cli: &Cli, rendered: &str, is_empty: bool) -> Result<()> { + if is_empty { + eprintln!( + "diffctx: diff produced no semantic context (clean working tree, binary-only, or \ + files over the size cap); {}", + empty_diff_hint( + &cli.path, + cli.budget, + cli.diff_ref.as_deref().unwrap_or("HEAD") + ) + ); + } + if !cli.quiet { + print_token_summary(rendered); + } + print!("{rendered}"); + io::stdout().flush()?; + if is_empty { + std::process::exit(EXIT_EMPTY_DIFF); + } + Ok(()) +} + fn diff_result_is_empty(output: &DiffContextOutput) -> bool { output.deleted_files.is_empty() && output.renamed_files.is_empty() @@ -188,9 +239,8 @@ fn run_locate( scoring_mode: ScoringMode, timeout: u64, ) -> Result<()> { - let (tx, rx) = mpsc::channel(); - thread::spawn(move || { - let result = _diffctx::pipeline::build_diff_context_locate( + let output = run_with_deadline(timeout, move || { + _diffctx::pipeline::build_diff_context_locate( &path, diff_ref.as_deref(), budget, @@ -198,23 +248,8 @@ fn run_locate( tau, scoring_mode, timeout, - ); - let _ = tx.send(result); - }); - let output = match rx.recv_timeout(Duration::from_secs(timeout)) { - Ok(result) => result?, - Err(mpsc::RecvTimeoutError::Timeout) => { - eprintln!( - "diffctx: pipeline exceeded {timeout}s wall-clock deadline; aborting before \ - OOM/SIGKILL. Narrow the review with an explicit '--diff ..' range or \ - run on a smaller subtree, or raise '--timeout'." - ); - std::process::exit(124); - } - Err(mpsc::RecvTimeoutError::Disconnected) => { - anyhow::bail!("diffctx: pipeline worker terminated unexpectedly"); - } - }; + ) + })?; let rendered = format!("{}\n", serde_json::to_string(&output)?); let is_empty = output.item_count == 0 @@ -223,26 +258,7 @@ fn run_locate( && output.lockfile_changes.is_empty() && output.ignored_changes.is_empty() && output.policy_excluded_count == 0; - if is_empty { - eprintln!( - "diffctx: diff produced no semantic context (clean working tree, binary-only, or \ - files over the size cap); {}", - empty_diff_hint( - &cli.path, - cli.budget, - cli.diff_ref.as_deref().unwrap_or("HEAD") - ) - ); - } - if !cli.quiet { - print_token_summary(&rendered); - } - print!("{rendered}"); - io::stdout().flush()?; - if is_empty { - std::process::exit(EXIT_EMPTY_DIFF); - } - Ok(()) + emit(cli, &rendered, is_empty) } fn main() -> Result<()> { @@ -288,9 +304,8 @@ fn main() -> Result<()> { ); } - let (tx, rx) = mpsc::channel(); - thread::spawn(move || { - let result = build_diff_context( + let output = run_with_deadline(timeout, move || { + build_diff_context( &path, diff_ref.as_deref(), budget, @@ -300,24 +315,8 @@ fn main() -> Result<()> { full, scoring_mode, timeout, - ); - let _ = tx.send(result); - }); - - let output = match rx.recv_timeout(Duration::from_secs(timeout)) { - Ok(result) => result?, - Err(mpsc::RecvTimeoutError::Timeout) => { - eprintln!( - "diffctx: pipeline exceeded {timeout}s wall-clock deadline; aborting before \ - OOM/SIGKILL. Narrow the review with an explicit '--diff ..' range or \ - run on a smaller subtree, or raise '--timeout'." - ); - std::process::exit(124); - } - Err(mpsc::RecvTimeoutError::Disconnected) => { - anyhow::bail!("diffctx: pipeline worker terminated unexpectedly"); - } - }; + ) + })?; let rendered = match cli.format.as_str() { "json" => format!("{}\n", serde_json::to_string_pretty(&output)?), @@ -327,26 +326,5 @@ fn main() -> Result<()> { } }; - if diff_result_is_empty(&output) { - eprintln!( - "diffctx: diff produced no semantic context (clean working tree, binary-only, or \ - files over the size cap); {}", - empty_diff_hint( - &cli.path, - cli.budget, - cli.diff_ref.as_deref().unwrap_or("HEAD") - ) - ); - } - if !cli.quiet { - print_token_summary(&rendered); - } - print!("{rendered}"); - io::stdout().flush()?; - - if diff_result_is_empty(&output) { - std::process::exit(EXIT_EMPTY_DIFF); - } - - Ok(()) + emit(&cli, &rendered, diff_result_is_empty(&output)) } diff --git a/crates/diffctx-native/src/parsers/config_parser.rs b/crates/diffctx-native/src/parsers/config_parser.rs index 2716b54cc..3c2c085b7 100644 --- a/crates/diffctx-native/src/parsers/config_parser.rs +++ b/crates/diffctx-native/src/parsers/config_parser.rs @@ -35,78 +35,14 @@ impl FragmentationStrategy for ConfigStrategy { fn fragment(&self, path: Arc, content: &str) -> Vec { let ext = file_extension_lower(&path); match ext.as_str() { - ".yaml" | ".yml" => fragment_yaml(path, content), - ".toml" => fragment_toml(path, content), - ".json" => fragment_json(path, content), + ".yaml" | ".yml" => split_at_top_level_pattern(path, content, &YAML_TOP_LEVEL_KEY), + ".toml" => split_at_top_level_pattern(path, content, &TOML_SECTION_HEADER), + ".json" => split_at_top_level_pattern(path, content, &JSON_TOP_LEVEL_KEY), _ => Vec::new(), } } } -fn fragment_yaml(path: Arc, content: &str) -> Vec { - split_at_top_level_pattern(path, content, &YAML_TOP_LEVEL_KEY) -} - -fn fragment_toml(path: Arc, content: &str) -> Vec { - split_at_top_level_pattern(path, content, &TOML_SECTION_HEADER) -} - -fn fragment_json(path: Arc, content: &str) -> Vec { - let lines: Vec<&str> = content.split('\n').collect(); - if lines.is_empty() { - return Vec::new(); - } - - let mut boundaries: Vec = Vec::new(); - - for (i, line) in lines.iter().enumerate() { - if JSON_TOP_LEVEL_KEY.is_match(line) { - boundaries.push(i); - } - } - - if boundaries.len() < 2 { - return make_single_fragment(path, &lines); - } - - let mut fragments: Vec = Vec::new(); - for (idx, &start_idx) in boundaries.iter().enumerate() { - let end_idx = if idx + 1 < boundaries.len() { - boundaries[idx + 1] - 1 - } else { - lines.len() - 1 - }; - - let end_idx = trim_trailing_blanks(&lines, start_idx, end_idx); - let start_line = start_idx as u32 + 1; - let end_line = end_idx as u32 + 1; - - let mut snippet = lines[start_idx..=end_idx].join("\n"); - if snippet.trim().is_empty() { - continue; - } - if !snippet.ends_with('\n') { - snippet.push('\n'); - } - - let identifiers = - extract_identifiers(&snippet, TOKENIZATION.fragment_min_identifier_length); - fragments.push(Fragment { - id: FragmentId::new(Arc::clone(&path), start_line, end_line), - kind: FragmentKind::Chunk, - content: Arc::from(snippet), - identifiers, - token_count: 0, - symbol_name: None, - }); - } - - if fragments.is_empty() { - return make_single_fragment(path, &lines); - } - fragments -} - fn split_at_top_level_pattern(path: Arc, content: &str, pattern: &Regex) -> Vec { let lines: Vec<&str> = content.split('\n').collect(); if lines.is_empty() { diff --git a/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs b/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs index 259cf8103..78046f425 100644 --- a/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs +++ b/crates/diffctx-native/src/parsers/tree_sitter_strategy.rs @@ -22,14 +22,14 @@ const BODY_NODE_TYPES: &[&str] = &[ ]; struct LangConfig { - extension: &'static str, + extensions: &'static [&'static str], ts_name: &'static str, definition_types: &'static [&'static str], } const LANG_CONFIGS: &[LangConfig] = &[ LangConfig { - extension: ".py", + extensions: &[".py", ".pyw", ".pyi"], ts_name: "python", definition_types: &[ "function_definition", @@ -38,36 +38,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".pyw", - ts_name: "python", - definition_types: &[ - "function_definition", - "class_definition", - "decorated_definition", - ], - }, - LangConfig { - extension: ".pyi", - ts_name: "python", - definition_types: &[ - "function_definition", - "class_definition", - "decorated_definition", - ], - }, - LangConfig { - extension: ".js", - ts_name: "javascript", - definition_types: &[ - "function_declaration", - "class_declaration", - "method_definition", - "arrow_function", - "variable_declarator", - ], - }, - LangConfig { - extension: ".mjs", + extensions: &[".js", ".mjs", ".cjs"], ts_name: "javascript", definition_types: &[ "function_declaration", @@ -78,18 +49,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".cjs", - ts_name: "javascript", - definition_types: &[ - "function_declaration", - "class_declaration", - "method_definition", - "arrow_function", - "variable_declarator", - ], - }, - LangConfig { - extension: ".jsx", + extensions: &[".jsx"], ts_name: "jsx", definition_types: &[ "function_declaration", @@ -100,7 +60,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".ts", + extensions: &[".ts", ".mts", ".cts"], ts_name: "typescript", definition_types: &[ "function_declaration", @@ -114,35 +74,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".mts", - ts_name: "typescript", - definition_types: &[ - "function_declaration", - "class_declaration", - "method_definition", - "arrow_function", - "interface_declaration", - "type_alias_declaration", - "enum_declaration", - "variable_declarator", - ], - }, - LangConfig { - extension: ".cts", - ts_name: "typescript", - definition_types: &[ - "function_declaration", - "class_declaration", - "method_definition", - "arrow_function", - "interface_declaration", - "type_alias_declaration", - "enum_declaration", - "variable_declarator", - ], - }, - LangConfig { - extension: ".tsx", + extensions: &[".tsx"], ts_name: "tsx", definition_types: &[ "function_declaration", @@ -156,7 +88,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".go", + extensions: &[".go"], ts_name: "go", definition_types: &[ "function_declaration", @@ -167,7 +99,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".rs", + extensions: &[".rs"], ts_name: "rust", definition_types: &[ "function_item", @@ -183,7 +115,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".java", + extensions: &[".java"], ts_name: "java", definition_types: &[ "method_declaration", @@ -194,7 +126,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".c", + extensions: &[".c", ".h"], ts_name: "c", definition_types: &[ "function_definition", @@ -205,18 +137,9 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".h", - ts_name: "c", - definition_types: &[ - "function_definition", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", + extensions: &[ + ".cpp", ".cc", ".cxx", ".hpp", ".hh", ".hxx", ".c++", ".h++", ".ipp", ".tpp", ], - }, - LangConfig { - extension: ".cpp", ts_name: "cpp", definition_types: &[ "function_definition", @@ -230,87 +153,12 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".cc", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".cxx", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".hpp", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".hh", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".hxx", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".rb", - ts_name: "ruby", - definition_types: &["method", "class", "module", "singleton_method"], - }, - LangConfig { - extension: ".rake", + extensions: &[".rb", ".rake", ".gemspec"], ts_name: "ruby", definition_types: &["method", "class", "module", "singleton_method"], }, LangConfig { - extension: ".cs", + extensions: &[".cs"], ts_name: "c_sharp", definition_types: &[ "method_declaration", @@ -324,7 +172,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".php", + extensions: &[".php", ".phtml"], ts_name: "php", definition_types: &[ "function_definition", @@ -336,7 +184,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".scala", + extensions: &[".scala", ".sc"], ts_name: "scala", definition_types: &[ "class_definition", @@ -347,18 +195,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".sc", - ts_name: "scala", - definition_types: &[ - "class_definition", - "object_definition", - "trait_definition", - "function_definition", - "function_declaration", - ], - }, - LangConfig { - extension: ".swift", + extensions: &[".swift"], ts_name: "swift", definition_types: &[ "class_declaration", @@ -367,36 +204,13 @@ const LANG_CONFIGS: &[LangConfig] = &[ "protocol_function_declaration", ], }, - // --- Ruby extra extensions --- - LangConfig { - extension: ".gemspec", - ts_name: "ruby", - definition_types: &["method", "class", "module", "singleton_method"], - }, - // --- Bash/Shell --- - LangConfig { - extension: ".sh", - ts_name: "bash", - definition_types: &["function_definition"], - }, - LangConfig { - extension: ".bash", - ts_name: "bash", - definition_types: &["function_definition"], - }, LangConfig { - extension: ".zsh", + extensions: &[".sh", ".bash", ".zsh", ".ksh"], ts_name: "bash", definition_types: &["function_definition"], }, LangConfig { - extension: ".ksh", - ts_name: "bash", - definition_types: &["function_definition"], - }, - // --- CSS --- - LangConfig { - extension: ".css", + extensions: &[".css", ".scss", ".less"], ts_name: "css", definition_types: &[ "rule_set", @@ -406,28 +220,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".scss", - ts_name: "css", - definition_types: &[ - "rule_set", - "media_statement", - "keyframes_statement", - "import_statement", - ], - }, - LangConfig { - extension: ".less", - ts_name: "css", - definition_types: &[ - "rule_set", - "media_statement", - "keyframes_statement", - "import_statement", - ], - }, - // --- Haskell --- - LangConfig { - extension: ".hs", + extensions: &[".hs", ".lhs"], ts_name: "haskell", definition_types: &[ "function", @@ -440,55 +233,22 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".lhs", - ts_name: "haskell", - definition_types: &[ - "function", - "type_synomym", - "newtype", - "data_type", - "class", - "instance", - "signature", - ], - }, - // --- Elixir --- - LangConfig { - extension: ".ex", + extensions: &[".ex", ".exs"], ts_name: "elixir", definition_types: &["call"], }, LangConfig { - extension: ".exs", - ts_name: "elixir", - definition_types: &["call"], - }, - // --- Lua --- - LangConfig { - extension: ".lua", + extensions: &[".lua"], ts_name: "lua", definition_types: &["function_declaration", "function_definition"], }, - // --- R --- LangConfig { - extension: ".r", + extensions: &[".r"], ts_name: "r", definition_types: &["function_definition"], }, - // --- OCaml --- - LangConfig { - extension: ".ml", - ts_name: "ocaml", - definition_types: &[ - "let_binding", - "type_definition", - "module_definition", - "module_type_definition", - "value_definition", - ], - }, LangConfig { - extension: ".mli", + extensions: &[".ml", ".mli"], ts_name: "ocaml", definition_types: &[ "let_binding", @@ -498,20 +258,13 @@ const LANG_CONFIGS: &[LangConfig] = &[ "value_definition", ], }, - // --- Erlang --- LangConfig { - extension: ".erl", + extensions: &[".erl", ".hrl"], ts_name: "erlang", definition_types: &["function_clause", "type_spec", "attribute"], }, LangConfig { - extension: ".hrl", - ts_name: "erlang", - definition_types: &["function_clause", "type_spec", "attribute"], - }, - // --- Julia --- - LangConfig { - extension: ".jl", + extensions: &[".jl"], ts_name: "julia", definition_types: &[ "function_definition", @@ -522,9 +275,8 @@ const LANG_CONFIGS: &[LangConfig] = &[ "module_definition", ], }, - // --- Zig --- LangConfig { - extension: ".zig", + extensions: &[".zig"], ts_name: "zig", definition_types: &[ "function_declaration", @@ -535,42 +287,23 @@ const LANG_CONFIGS: &[LangConfig] = &[ "union_declaration", ], }, - // --- Clojure --- LangConfig { - extension: ".clj", + extensions: &[".clj", ".cljs", ".cljc"], ts_name: "clojure", definition_types: &["list_lit"], }, LangConfig { - extension: ".cljs", - ts_name: "clojure", - definition_types: &["list_lit"], - }, - LangConfig { - extension: ".cljc", - ts_name: "clojure", - definition_types: &["list_lit"], - }, - // --- Nix --- - LangConfig { - extension: ".nix", + extensions: &[".nix"], ts_name: "nix", definition_types: &["binding", "inherit"], }, - // --- Groovy --- LangConfig { - extension: ".groovy", + extensions: &[".groovy", ".gradle"], ts_name: "groovy", definition_types: &["method_declaration", "class_declaration", "closure"], }, LangConfig { - extension: ".gradle", - ts_name: "groovy", - definition_types: &["method_declaration", "class_declaration", "closure"], - }, - // --- Objective-C --- - LangConfig { - extension: ".m", + extensions: &[".m", ".mm"], ts_name: "objc", definition_types: &[ "class_interface", @@ -582,20 +315,7 @@ const LANG_CONFIGS: &[LangConfig] = &[ ], }, LangConfig { - extension: ".mm", - ts_name: "objc", - definition_types: &[ - "class_interface", - "class_implementation", - "method_declaration", - "protocol_declaration", - "category_interface", - "category_implementation", - ], - }, - // --- Dart --- - LangConfig { - extension: ".dart", + extensions: &[".dart"], ts_name: "dart", definition_types: &[ "class_declaration", @@ -606,21 +326,8 @@ const LANG_CONFIGS: &[LangConfig] = &[ "mixin_declaration", ], }, - // --- GraphQL --- - LangConfig { - extension: ".graphql", - ts_name: "graphql", - definition_types: &[ - "object_type_definition", - "interface_type_definition", - "enum_type_definition", - "input_object_type_definition", - "union_type_definition", - "scalar_type_definition", - ], - }, LangConfig { - extension: ".gql", + extensions: &[".graphql", ".gql"], ts_name: "graphql", definition_types: &[ "object_type_definition", @@ -631,14 +338,8 @@ const LANG_CONFIGS: &[LangConfig] = &[ "scalar_type_definition", ], }, - // LaTeX: tree-sitter-latex crate is broken, using generic parser instead - // LangConfig { extension: ".tex", ts_name: "latex", ... }, - // LangConfig { extension: ".latex", ts_name: "latex", ... }, - // LangConfig { extension: ".sty", ts_name: "latex", ... }, - // LangConfig { extension: ".cls", ts_name: "latex", ... } - // --- Prisma --- LangConfig { - extension: ".prisma", + extensions: &[".prisma"], ts_name: "prisma", definition_types: &[ "model_declaration", @@ -648,130 +349,38 @@ const LANG_CONFIGS: &[LangConfig] = &[ "datasource_declaration", ], }, - // --- Svelte --- LangConfig { - extension: ".svelte", + extensions: &[".svelte"], ts_name: "svelte", definition_types: &["script_element", "style_element", "element"], }, - // --- HCL / Terraform --- - LangConfig { - extension: ".tf", - ts_name: "hcl", - definition_types: &["block"], - }, LangConfig { - extension: ".hcl", + extensions: &[".tf", ".hcl"], ts_name: "hcl", definition_types: &["block"], }, - // --- HTML --- LangConfig { - extension: ".html", + extensions: &[".html", ".htm"], ts_name: "html", definition_types: &["element", "script_element", "style_element"], }, LangConfig { - extension: ".htm", - ts_name: "html", - definition_types: &["element", "script_element", "style_element"], - }, - // --- JSON --- - LangConfig { - extension: ".json", + extensions: &[".json"], ts_name: "json", definition_types: &["pair"], }, - // --- YAML --- LangConfig { - extension: ".yaml", + extensions: &[".yaml", ".yml"], ts_name: "yaml", definition_types: &["block_mapping_pair"], }, LangConfig { - extension: ".yml", - ts_name: "yaml", - definition_types: &["block_mapping_pair"], - }, - // --- CMake --- - LangConfig { - extension: ".cmake", + extensions: &[".cmake"], ts_name: "cmake", definition_types: &["function_def", "macro_def", "if_condition", "foreach_loop"], }, - // --- PHP extra extensions --- - LangConfig { - extension: ".phtml", - ts_name: "php", - definition_types: &[ - "function_definition", - "method_declaration", - "class_declaration", - "interface_declaration", - "trait_declaration", - "enum_declaration", - ], - }, - // --- C++ extra extensions --- - LangConfig { - extension: ".c++", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".h++", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, LangConfig { - extension: ".ipp", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - LangConfig { - extension: ".tpp", - ts_name: "cpp", - definition_types: &[ - "function_definition", - "class_specifier", - "struct_specifier", - "enum_specifier", - "declaration", - "type_definition", - "using_declaration", - "alias_declaration", - ], - }, - // --- Makefile --- - LangConfig { - extension: ".mk", + extensions: &[".mk"], ts_name: "make", definition_types: &["rule"], }, @@ -911,7 +520,10 @@ fn file_extension(path: &str) -> &str { fn find_lang_config(path: &str) -> Option<&'static LangConfig> { let ext = file_extension(path).to_ascii_lowercase(); - if let Some(config) = LANG_CONFIGS.iter().find(|c| c.extension == ext) { + if let Some(config) = LANG_CONFIGS + .iter() + .find(|c| c.extensions.contains(&ext.as_str())) + { return Some(config); } find_lang_config_by_filename(path) @@ -1790,7 +1402,7 @@ fn fragment_embedded_source( } else { ".css" }; - let Some(config) = LANG_CONFIGS.iter().find(|c| c.extension == ext) else { + let Some(config) = LANG_CONFIGS.iter().find(|c| c.extensions.contains(&ext)) else { return; }; let Some(tree) = parse_with_cached_parser(ts_name, &language, snippet) else { @@ -2233,14 +1845,16 @@ mod grammar_tests { #[test] fn every_lang_config_extension_is_discoverable_via_extension_to_language() { for config in LANG_CONFIGS { - assert!( - crate::languages::EXTENSION_TO_LANGUAGE.contains_key(config.extension), - "LANG_CONFIGS extension {:?} (ts_name {:?}) has no EXTENSION_TO_LANGUAGE \ - entry, so candidate_files.rs silently excludes it from discovery even \ - though a grammar exists for it", - config.extension, - config.ts_name - ); + for ext in config.extensions { + assert!( + crate::languages::EXTENSION_TO_LANGUAGE.contains_key(*ext), + "LANG_CONFIGS extension {:?} (ts_name {:?}) has no EXTENSION_TO_LANGUAGE \ + entry, so candidate_files.rs silently excludes it from discovery even \ + though a grammar exists for it", + ext, + config.ts_name + ); + } } } diff --git a/crates/diffctx-native/src/stopwords.rs b/crates/diffctx-native/src/stopwords.rs index 82729fc80..3ad8d11be 100644 --- a/crates/diffctx-native/src/stopwords.rs +++ b/crates/diffctx-native/src/stopwords.rs @@ -3,889 +3,20 @@ use rustc_hash::FxHashSet; use crate::config::extensions::{CODE_EXTENSIONS, DOC_EXTENSIONS}; -fn set_from(words: &[&str]) -> FxHashSet { - words.iter().map(|w| w.to_string()).collect() +fn set_from_list(list: &str) -> FxHashSet { + list.split_ascii_whitespace().map(str::to_string).collect() } -static PY_KEYWORDS: Lazy> = Lazy::new(|| { - set_from(&[ - "and", "as", "assert", "async", "await", "break", "class", "continue", "def", "del", - "elif", "else", "except", "false", "finally", "for", "from", "global", "if", "import", - "in", "is", "lambda", "none", "nonlocal", "not", "or", "pass", "raise", "return", "true", - "try", "while", "with", "yield", - ]) -}); +// The word lists live in .txt next door rather than as array literals: rustfmt +// packs a short array and gives up on a long one, so 928 literals occupied 865 +// lines here. They are unioned into a set, so their order and any duplicate +// across the old three-way code split are unobservable — which is what makes +// the move to a flat file bit-equivalent. +pub static CODE_STOPWORDS: Lazy> = + Lazy::new(|| set_from_list(include_str!("stopwords/code.txt"))); -static CODE_STOPWORDS_BASE: Lazy> = Lazy::new(|| { - set_from(&[ - "todo", - "fixme", - "note", - "hack", - "xxx", - "foo", - "bar", - "baz", - "qux", - "tmp", - "temp", - "self", - "cls", - "get", - "set", - "put", - "delete", - "remove", - "update", - "create", - "read", - "write", - "open", - "close", - "start", - "stop", - "run", - "execute", - "call", - "invoke", - "handle", - "process", - "validate", - "check", - "test", - "init", - "setup", - "teardown", - "load", - "save", - "parse", - "format", - "convert", - "transform", - "render", - "build", - "make", - "copy", - "clone", - "reset", - "clear", - "flush", - "send", - "receive", - "emit", - "insert", - "append", - "extend", - "split", - "join", - "trim", - "strip", - "contains", - "includes", - "push", - "pop", - "concat", - "slice", - "each", - "print", - "println", - "printf", - "sprintf", - "fprintf", - "abort", - "retry", - "apply", - "resolve", - "reject", - "defer", - "sleep", - "wait", - "poll", - "encode", - "decode", - "encrypt", - "decrypt", - "hash", - "sign", - "verify", - "register", - "unregister", - "mount", - "unmount", - "enable", - "disable", - "show", - "hide", - "lock", - "unlock", - "acquire", - "release", - "commit", - "rollback", - "begin", - "end", - "value", - "values", - "result", - "results", - "item", - "items", - "element", - "elements", - "key", - "keys", - "text", - "num", - "number", - "count", - "index", - "idx", - "size", - "length", - "len", - "array", - "dict", - "obj", - "object", - "args", - "kwargs", - "params", - "options", - "err", - "error", - "errors", - "msg", - "message", - "messages", - "log", - "logger", - "debug", - "info", - "warn", - "warning", - "func", - "function", - "method", - "callback", - "handler", - "listener", - "event", - "events", - "request", - "response", - "req", - "res", - "body", - "header", - "headers", - "query", - "param", - "id", - "uid", - "uuid", - "var", - "let", - "const", - "new", - "this", - "null", - "nil", - "none", - "void", - "true", - "false", - "static", - "final", - "abstract", - "virtual", - "override", - "public", - "private", - "protected", - "internal", - "extern", - "inline", - "volatile", - "mutable", - "readonly", - "super", - "extends", - "implements", - "import", - "export", - "require", - "include", - "using", - "typedef", - "define", - "ifdef", - "ifndef", - "endif", - "elif", - "else", - "case", - "switch", - "break", - "continue", - "return", - "goto", - "sizeof", - "typeof", - "instanceof", - "throw", - "throws", - "try", - "catch", - "finally", - "raise", - "except", - "yield", - "lambda", - "proc", - "sub", - "def", - "async", - "await", - "int", - "uint", - "long", - "float", - "double", - "char", - "byte", - "short", - "signed", - "unsigned", - "bool", - "boolean", - "string", - "str", - "size_t", - "usize", - "isize", - "int8", - "int16", - "int32", - "int64", - "uint8", - "uint16", - "uint32", - "uint64", - "float32", - "float64", - "__init__", - "__main__", - "__name__", - "__str__", - "__repr__", - "__eq__", - "__hash__", - "__len__", - "__iter__", - "__next__", - "__enter__", - "__exit__", - "echo", - "done", - "local", - "eval", - "exec", - "exit", - "trap", - "bash", - "then", - "esac", - "fi", - "do", - "for", - "while", - "until", - "shift", - "unset", - "declare", - "alias", - "html", - "head", - "div", - "span", - "form", - "button", - "img", - "href", - "style", - "display", - "margin", - "padding", - "border", - "color", - "width", - "height", - "flex", - "grid", - "onclick", - "onchange", - "onsubmit", - "classname", - ]) -}); - -static DOMAIN_STOPWORDS: Lazy> = Lazy::new(|| { - set_from(&[ - "add", - "sort", - "filter", - "find", - "select", - "merge", - "match", - "replace", - "dispatch", - "notify", - "subscribe", - "publish", - "connect", - "disconnect", - "bind", - "listen", - "accept", - "every", - "some", - "reduce", - "splice", - "unshift", - "throw", - "catch", - "create", - "destroy", - "dispose", - "finalize", - "data", - "name", - "names", - "list", - "map", - "config", - "settings", - "context", - "ctx", - "state", - "status", - "type", - "kind", - "mode", - "flag", - "flags", - "path", - "file", - "dir", - "url", - "uri", - "host", - "port", - "input", - "output", - "source", - "target", - "dest", - "src", - "dst", - "user", - "users", - "model", - "models", - "view", - "views", - "service", - "services", - "client", - "server", - "api", - "app", - "main", - "util", - "utils", - "helper", - "helpers", - "common", - "base", - "core", - "default", - "defaults", - "version", - "label", - "labels", - "tag", - "tags", - "level", - "scope", - "token", - "tokens", - "task", - "tasks", - "job", - "jobs", - "step", - "steps", - "stage", - "cache", - "timeout", - "interval", - "duration", - "timestamp", - "channel", - "buffer", - "queue", - "stack", - "heap", - "node", - "nodes", - "edge", - "edges", - "child", - "children", - "parent", - "root", - "leaf", - "link", - "ref", - "reference", - "instance", - "schema", - "table", - "column", - "row", - "field", - "record", - "entry", - "spec", - "env", - "namespace", - "prefix", - "suffix", - "pattern", - "template", - "factory", - "builder", - "adapter", - "proxy", - "wrapper", - "manager", - "controller", - "provider", - "consumer", - "producer", - "worker", - "pool", - "connection", - "session", - "stream", - "pipe", - "socket", - "signal", - "trigger", - "action", - "command", - "rule", - "rules", - "policy", - "strategy", - "middleware", - "plugin", - "module", - "package", - "component", - "container", - "registry", - "repository", - "interface", - "struct", - "enum", - "union", - "trait", - "impl", - "class", - "implement", - "inherit", - "mixin", - "tostring", - "hashcode", - "equals", - "usestate", - "useeffect", - "usecontext", - "usereducer", - "usecallback", - "usememo", - "useref", - "uselayouteffect", - "useimperativehandle", - "usedebugvalue", - "useid", - "usetransition", - "usedeferredvalue", - "createcontext", - "forwardref", - "createref", - "suspense", - "strictmode", - "profiler", - "usenavigate", - "useparams", - "uselocation", - "usesearchparams", - "useloaderdata", - "useactiondata", - "usefetcher", - "useoutletcontext", - "usedispatch", - "useselector", - "usestore", - "usequery", - "usemutation", - "usesubscription", - "definecomponent", - "defineprops", - "defineemits", - "defineslots", - "definemodel", - "defineexpose", - "toref", - "torefs", - "reactive", - "computed", - "onmounted", - "onunmounted", - "onbeforemount", - "onupdated", - "watcheffect", - "nexttick", - "ngoninit", - "ngondestroy", - "ngonchanges", - "ngafterviewinit", - "console", - "document", - "window", - "navigator", - "location", - "history", - "fetch", - "promise", - "undefined", - "prototype", - "constructor", - "exports", - "props", - "effect", - "memo", - "styles", - "innerhtml", - "textcontent", - "appendchild", - "createelement", - "queryselector", - "getelementbyid", - "addeventlistener", - "resource", - "variable", - "locals", - "terraform", - "jsonencode", - "cidr", - "subnet", - "ingress", - "egress", - "protocol", - "cidr_blocks", - "security_group", - "arn", - "vpc", - "aws", - "gcp", - "azure", - "region", - "zone", - "cluster", - "replicas", - "selector", - "metadata", - "annotations", - "volumes", - "ports", - "image", - "containers", - "resources", - "limits", - "requests", - "apiversion", - "configmap", - "secret", - "deployment", - "statefulset", - "daemonset", - "cronjob", - "serviceaccount", - "role", - "rolebinding", - "clusterrole", - "install", - "deploy", - "pipeline", - "script", - "pull", - "uses", - "with", - "needs", - "runs", - "checkout", - "artifact", - "artifacts", - "workflow", - "schedule", - "cron", - "branch", - "branches", - "release", - "from", - "workdir", - "expose", - "entrypoint", - "volume", - "arg", - "healthcheck", - "stopsignal", - "describe", - "it", - "expect", - "assert", - "should", - "mock", - "stub", - "spy", - "before", - "after", - "beforeall", - "afterall", - "beforeeach", - "aftereach", - "suite", - "fixture", - "given", - "when", - "insert", - "update", - "delete", - "from", - "where", - "join", - "inner", - "outer", - "left", - "right", - "group", - "order", - "limit", - "offset", - "having", - "distinct", - "count", - "sum", - "avg", - "min", - "max", - "constraint", - "primary", - "foreign", - "unique", - "not", - "and", - "or", - "between", - "exists", - "values", - "into", - "alter", - "drop", - "truncate", - "grant", - "revoke", - "body", - "title", - "meta", - "script", - "label", - "select", - "option", - "thead", - "tbody", - "class", - "type", - "name", - "value", - "placeholder", - "required", - "disabled", - "checked", - "selected", - "hidden", - "http", - "https", - "tcp", - "udp", - "dns", - "ssl", - "tls", - "cert", - "certificate", - "content", - "authorization", - "bearer", - "basic", - "digest", - "origin", - "referer", - "cookie", - "cookies", - "redirect", - "gateway", - "load", - "balance", - "upstream", - "downstream", - "endpoint", - "route", - "routes", - "router", - "method", - "code", - "java", - "python", - "golang", - "ruby", - "rust", - "swift", - "kotlin", - "scala", - "perl", - "elixir", - "haskell", - "clojure", - "erlang", - "typescript", - "javascript", - "csharp", - "cplusplus", - "alpine", - "ubuntu", - "debian", - "linux", - "darwin", - "windows", - "time", - "math", - "system", - "vector", - "hashmap", - "hashset", - "treemap", - "arraylist", - "linkedlist", - "optional", - "future", - "pair", - "tuple", - "collection", - "collections", - "iterator", - "iterable", - "comparable", - "serializable", - "cloneable", - "runnable", - "callable", - "supplier", - "predicate", - "comparator", - "json", - "xml", - "yaml", - "toml", - "csv", - "email", - "phone", - "address", - "date", - "datetime", - "password", - "username", - "auth", - "login", - "logout", - "admin", - "account", - "profile", - "permission", - "team", - "organization", - "project", - "description", - "category", - "comment", - "comments", - "like", - "share", - "search", - "page", - "pages", - "upload", - "download", - "notification", - "notifications", - "alert", - "alerts", - "validation", - "production", - "staging", - "development", - "testing", - "localhost", - "unknown", - "refs", - "heads", - "remote", - "master", - "rebase", - "cherry", - "stash", - ]) -}); - -pub static CODE_STOPWORDS: Lazy> = Lazy::new(|| { - let mut combined = CODE_STOPWORDS_BASE.clone(); - for w in PY_KEYWORDS.iter() { - combined.insert(w.clone()); - } - for w in DOMAIN_STOPWORDS.iter() { - combined.insert(w.clone()); - } - combined -}); - -static DOCS_STOPWORDS: Lazy> = Lazy::new(|| { - set_from(&[ - "the", "and", "for", "that", "with", "this", "from", "has", "have", "not", "are", "was", - "were", "will", "can", "you", "all", "any", "but", "they", "their", "there", "than", - "then", "when", "what", "which", "about", "after", "also", "been", "before", "between", - "both", "could", "each", "even", "into", "its", "just", "more", "most", "other", "over", - "same", "should", "some", "such", "through", "very", "well", "would", "use", "using", - "used", "may", "must", "only", "within", "without", "new", "old", "one", "two", "three", - "first", "last", "next", "many", "example", "note", "see", "get", "set", "add", "like", - "need", "heading", "section", "content", "long", "under", "value", "field", "name", "type", - "page", "text", "data", "item", "list", "file", "code", "function", "class", "method", - "return", "where", "how", "why", "output", "input", "result", "error", "default", "true", - "false", - ]) -}); +static DOCS_STOPWORDS: Lazy> = + Lazy::new(|| set_from_list(include_str!("stopwords/docs.txt"))); pub const PROFILE_CODE: &str = "code"; pub const PROFILE_DOCS: &str = "docs"; diff --git a/crates/diffctx-native/src/stopwords/code.txt b/crates/diffctx-native/src/stopwords/code.txt new file mode 100644 index 000000000..6f757487e --- /dev/null +++ b/crates/diffctx-native/src/stopwords/code.txt @@ -0,0 +1,79 @@ +__enter__ __eq__ __exit__ __hash__ __init__ __iter__ __len__ __main__ __name__ +__next__ __repr__ __str__ abort abstract accept account acquire action adapter +add addeventlistener address admin after afterall aftereach alert alerts alias +alpine alter and annotations api apiversion app append appendchild apply arg +args arn array arraylist artifact artifacts as assert async auth authorization +avg await aws azure balance bar base bash basic baz bearer before beforeall +beforeeach begin between bind body bool boolean border branch branches break +buffer build builder button byte cache call callable callback case catch +category cert certificate channel char check checked checkout cherry child +children cidr cidr_blocks class classname clear client clojure clone cloneable +close cls cluster clusterrole code collection collections color column command +comment comments commit common comparable comparator component computed concat +config configmap connect connection console const constraint constructor +consumer container containers contains content context continue controller +convert cookie cookies copy core count cplusplus create createcontext +createelement createref cron cronjob csharp csv ctx daemonset darwin data date +datetime debian debug declare decode decrypt def default defaults defer define +definecomponent defineemits defineexpose definemodel defineprops defineslots +del delete deploy deployment describe description dest destroy development +dict digest dir disable disabled disconnect dispatch display dispose distinct +div dns do document done double download downstream drop dst duration each +echo edge edges effect egress element elements elif elixir else email emit +enable encode encrypt end endif endpoint entry entrypoint enum env equals +erlang err error errors esac eval event events every except exec execute +exists exit expect export exports expose extend extends extern factory false +fetch fi field file filter final finalize finally find fixme fixture flag +flags flex float float32 float64 flush foo for foreign form format forwardref +fprintf from func function future gateway gcp get getelementbyid given global +golang goto grant grid group hack handle handler hash hashcode hashmap hashset +haskell having head header headers heads healthcheck heap height helper +helpers hidden hide history host href html http https id idx if ifdef ifndef +image img impl implement implements import in include includes index info +ingress inherit init inline inner innerhtml input insert install instance +instanceof int int16 int32 int64 int8 interface internal interval into invoke +is isize it item items iterable iterator java javascript job jobs join json +jsonencode key keys kind kotlin kwargs label labels lambda leaf left len +length let level like limit limits link linkedlist linux list listen listener +load local localhost locals location lock log logger login logout long main +make manager map margin master match math max memo merge message messages meta +metadata method middleware min mixin mock mode model models module mount msg +mutable name names namespace navigator needs new nexttick ngafterviewinit +ngonchanges ngondestroy ngoninit nil node nodes none nonlocal not note +notification notifications notify null num number obj object offset +onbeforemount onchange onclick onmounted onsubmit onunmounted onupdated open +option optional options or order organization origin outer output override +package padding page pages pair param params parent parse pass password path +pattern perl permission phone pipe pipeline placeholder plugin policy poll +pool pop port ports predicate prefix primary print printf println private proc +process producer production profile profiler project promise props protected +protocol prototype provider proxy public publish pull push put python query +queryselector queue qux raise reactive read readonly rebase receive record +redirect reduce ref reference referer refs region register registry reject +release remote remove render replace replicas repository req request requests +require required res reset resolve resource resources response result results +retry return revoke right role rolebinding rollback root route router routes +row ruby rule rules run runnable runs rust save scala schedule schema scope +script search secret security_group select selected selector self send +serializable server service serviceaccount services session set settings setup +share shift short should show sign signal signed size size_t sizeof sleep +slice socket some sort source span spec splice split sprintf spy src ssl stack +stage staging start stash state statefulset static status step steps stop +stopsignal str strategy stream strictmode string strip struct stub style +styles sub subnet subscribe suffix suite sum super supplier suspense swift +switch system table tag tags target task tasks tbody tcp team teardown temp +template terraform test testing text textcontent thead then this throw throws +time timeout timestamp title tls tmp todo token tokens toml toref torefs +tostring trait transform trap treemap trigger trim true truncate try tuple +type typedef typeof typescript ubuntu udp uid uint uint16 uint32 uint64 uint8 +undefined union unique unknown unlock unmount unregister unset unshift +unsigned until update upload upstream uri url useactiondata usecallback +usecontext usedebugvalue usedeferredvalue usedispatch useeffect usefetcher +useid useimperativehandle uselayouteffect useloaderdata uselocation usememo +usemutation usenavigate useoutletcontext useparams usequery user usereducer +useref username users uses usesearchparams useselector usestate usestore +usesubscription usetransition using usize util utils uuid validate validation +value values var variable vector verify version view views virtual void +volatile volume volumes vpc wait warn warning watcheffect when where while +width window windows with workdir worker workflow wrapper write xml xxx yaml +yield zone diff --git a/crates/diffctx-native/src/stopwords/docs.txt b/crates/diffctx-native/src/stopwords/docs.txt new file mode 100644 index 000000000..3bb1cf607 --- /dev/null +++ b/crates/diffctx-native/src/stopwords/docs.txt @@ -0,0 +1,8 @@ +about add after all also and any are been before between both but can class +code content could data default each error even example false field file first +for from function get has have heading how input into item its just last like +list long many may method more most must name need new next not note old one +only other output over page result return same section see set should some +such text than that the their then there they this three through true two type +under use used using value very was well were what when where which why will +with within without would you From 6cc4c21bd996185cd337cff61d2bada429a5c7dc Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 01:29:02 +0200 Subject: [PATCH 53/73] refactor: one discovery routine for the 16 builders that shared its shape --- crates/diffctx-native/src/edges/base.rs | 30 +++++++++++++++++++ .../src/edges/semantic/clojure.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/css.rs | 21 ++++++------- .../src/edges/semantic/elixir.rs | 21 ++++++------- .../src/edges/semantic/erlang.rs | 21 ++++++------- .../src/edges/semantic/julia.rs | 21 ++++++------- .../src/edges/semantic/latex.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/lua.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/nim.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/nix.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/perl.rs | 21 ++++++------- .../src/edges/semantic/protobuf.rs | 21 ++++++------- .../src/edges/semantic/r_lang.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/ruby.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/sql.rs | 21 ++++++------- .../src/edges/semantic/swift.rs | 21 ++++++------- .../diffctx-native/src/edges/semantic/zig.rs | 21 ++++++------- 17 files changed, 174 insertions(+), 192 deletions(-) diff --git a/crates/diffctx-native/src/edges/base.rs b/crates/diffctx-native/src/edges/base.rs index df6da2e04..9925f8cbb 100644 --- a/crates/diffctx-native/src/edges/base.rs +++ b/crates/diffctx-native/src/edges/base.rs @@ -409,6 +409,36 @@ pub fn discover_files_by_refs( discovered } +// The discovery shape 16 language builders share: take the changed files this +// builder recognises, union the references their contents name, and hand those +// to `discover_files_by_refs`. Written out per language, it was 13 lines each +// that differed only in the two function names. +pub fn discover_by_extracted_refs( + changed: &[PathBuf], + candidates: &[PathBuf], + repo_root: Option<&Path>, + file_cache: Option<&FxHashMap>, + recognises: P, + extract: E, +) -> Vec +where + P: Fn(&Path) -> bool, + E: Fn(&str) -> I, + I: IntoIterator, +{ + let mine: Vec<&PathBuf> = changed.iter().filter(|f| recognises(f)).collect(); + if mine.is_empty() { + return vec![]; + } + let mut refs = FxHashSet::default(); + for f in &mine { + if let Some(content) = read_file_cached(f, file_cache) { + refs.extend(extract(&content)); + } + } + discover_files_by_refs(&refs, changed, candidates, repo_root) +} + // The first capture group of every match, owned. Written out 97 times across // `edges/`, and rustfmt spreads the chain over three lines each time. pub fn captures1<'a>(re: &'a Regex, content: &'a str) -> impl Iterator + 'a { diff --git a/crates/diffctx-native/src/edges/semantic/clojure.rs b/crates/diffctx-native/src/edges/semantic/clojure.rs index ce886048e..b2c7c62f5 100644 --- a/crates/diffctx-native/src/edges/semantic/clojure.rs +++ b/crates/diffctx-native/src/edges/semantic/clojure.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_clojure_file(path: &Path) -> bool { base::has_ext(path, &[".clj", ".cljs", ".cljc", ".edn"]) @@ -148,16 +148,13 @@ impl EdgeBuilder for ClojureEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let clj_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_clojure_file(f)).collect(); - if clj_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &clj_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_requires(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_clojure_file, + extract_requires, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/css.rs b/crates/diffctx-native/src/edges/semantic/css.rs index 1ad4c848a..c6a72f19b 100644 --- a/crates/diffctx-native/src/edges/semantic/css.rs +++ b/crates/diffctx-native/src/edges/semantic/css.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder}; fn is_css_file(path: &Path) -> bool { base::has_ext(path, &[".css", ".scss", ".less", ".sass"]) @@ -54,16 +54,13 @@ impl EdgeBuilder for CssEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let css_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_css_file(f)).collect(); - if css_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &css_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_css_file, + extract_imports, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/elixir.rs b/crates/diffctx-native/src/edges/semantic/elixir.rs index 81519ae58..6e1ca2aa1 100644 --- a/crates/diffctx-native/src/edges/semantic/elixir.rs +++ b/crates/diffctx-native/src/edges/semantic/elixir.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_elixir_file(path: &Path) -> bool { base::has_ext(path, &[".ex", ".exs"]) @@ -135,16 +135,13 @@ impl EdgeBuilder for ElixirEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let ex_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_elixir_file(f)).collect(); - if ex_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &ex_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_refs(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_elixir_file, + extract_refs, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/erlang.rs b/crates/diffctx-native/src/edges/semantic/erlang.rs index 8ba5480f0..d196a13dd 100644 --- a/crates/diffctx-native/src/edges/semantic/erlang.rs +++ b/crates/diffctx-native/src/edges/semantic/erlang.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_erlang_file(path: &Path) -> bool { base::has_ext(path, &[".erl", ".hrl"]) @@ -124,16 +124,13 @@ impl EdgeBuilder for ErlangEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let erl_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_erlang_file(f)).collect(); - if erl_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &erl_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_refs(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_erlang_file, + extract_refs, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/julia.rs b/crates/diffctx-native/src/edges/semantic/julia.rs index 5c941eb8d..99fc40683 100644 --- a/crates/diffctx-native/src/edges/semantic/julia.rs +++ b/crates/diffctx-native/src/edges/semantic/julia.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_julia_file(path: &Path) -> bool { base::has_ext(path, &[".jl"]) @@ -130,16 +130,13 @@ impl EdgeBuilder for JuliaEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let jl_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_julia_file(f)).collect(); - if jl_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &jl_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_julia_file, + extract_imports, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/latex.rs b/crates/diffctx-native/src/edges/semantic/latex.rs index 53abba3f7..6cc95878c 100644 --- a/crates/diffctx-native/src/edges/semantic/latex.rs +++ b/crates/diffctx-native/src/edges/semantic/latex.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder}; fn is_latex_file(path: &Path) -> bool { base::has_ext(path, &[".tex", ".sty", ".cls", ".bib"]) @@ -100,16 +100,13 @@ impl EdgeBuilder for LatexEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let tex_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_latex_file(f)).collect(); - if tex_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &tex_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_refs(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_latex_file, + extract_refs, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/lua.rs b/crates/diffctx-native/src/edges/semantic/lua.rs index 4cfec9113..af810168d 100644 --- a/crates/diffctx-native/src/edges/semantic/lua.rs +++ b/crates/diffctx-native/src/edges/semantic/lua.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_lua_file(path: &Path) -> bool { base::has_ext(path, &[".lua"]) @@ -111,16 +111,13 @@ impl EdgeBuilder for LuaEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let lua_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_lua_file(f)).collect(); - if lua_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &lua_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_requires(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_lua_file, + extract_requires, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/nim.rs b/crates/diffctx-native/src/edges/semantic/nim.rs index 4357d825a..6c9fad8f8 100644 --- a/crates/diffctx-native/src/edges/semantic/nim.rs +++ b/crates/diffctx-native/src/edges/semantic/nim.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_nim_file(path: &Path) -> bool { base::has_ext(path, &[".nim", ".nims"]) @@ -124,16 +124,13 @@ impl EdgeBuilder for NimEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let nim_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_nim_file(f)).collect(); - if nim_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &nim_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_nim_file, + extract_imports, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/nix.rs b/crates/diffctx-native/src/edges/semantic/nix.rs index 0767e47ea..3e83aeb66 100644 --- a/crates/diffctx-native/src/edges/semantic/nix.rs +++ b/crates/diffctx-native/src/edges/semantic/nix.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder}; fn is_nix_file(path: &Path) -> bool { base::has_ext(path, &[".nix"]) @@ -66,16 +66,13 @@ impl EdgeBuilder for NixEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let nix_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_nix_file(f)).collect(); - if nix_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &nix_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_refs(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_nix_file, + extract_refs, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/perl.rs b/crates/diffctx-native/src/edges/semantic/perl.rs index 2f1f05a45..9b2f44319 100644 --- a/crates/diffctx-native/src/edges/semantic/perl.rs +++ b/crates/diffctx-native/src/edges/semantic/perl.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_perl_file(path: &Path) -> bool { base::has_ext(path, &[".pl", ".pm"]) @@ -166,16 +166,13 @@ impl EdgeBuilder for PerlEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let pl_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_perl_file(f)).collect(); - if pl_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &pl_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_uses(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_perl_file, + extract_uses, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/protobuf.rs b/crates/diffctx-native/src/edges/semantic/protobuf.rs index 21ac63249..594ccf578 100644 --- a/crates/diffctx-native/src/edges/semantic/protobuf.rs +++ b/crates/diffctx-native/src/edges/semantic/protobuf.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_proto_file(path: &Path) -> bool { base::has_ext(path, &[".proto"]) @@ -98,16 +98,13 @@ impl EdgeBuilder for ProtobufEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let proto_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_proto_file(f)).collect(); - if proto_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &proto_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_proto_file, + extract_imports, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/r_lang.rs b/crates/diffctx-native/src/edges/semantic/r_lang.rs index e0250b573..02a924c7c 100644 --- a/crates/diffctx-native/src/edges/semantic/r_lang.rs +++ b/crates/diffctx-native/src/edges/semantic/r_lang.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_r_file(path: &Path) -> bool { base::has_ext(path, &[".r", ".rmd"]) @@ -111,16 +111,13 @@ impl EdgeBuilder for RLangEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let r_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_r_file(f)).collect(); - if r_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &r_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_sources(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_r_file, + extract_sources, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/ruby.rs b/crates/diffctx-native/src/edges/semantic/ruby.rs index 5f3845e9b..26e67719c 100644 --- a/crates/diffctx-native/src/edges/semantic/ruby.rs +++ b/crates/diffctx-native/src/edges/semantic/ruby.rs @@ -9,7 +9,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_ruby_file(path: &Path) -> bool { RUBY_EXTENSIONS.contains(base::file_ext(path).as_str()) @@ -114,16 +114,13 @@ impl EdgeBuilder for RubyEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let rb_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_ruby_file(f)).collect(); - if rb_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &rb_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_requires(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_ruby_file, + extract_requires, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/sql.rs b/crates/diffctx-native/src/edges/semantic/sql.rs index b031375d8..1c807a1a8 100644 --- a/crates/diffctx-native/src/edges/semantic/sql.rs +++ b/crates/diffctx-native/src/edges/semantic/sql.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_sql_file(path: &Path) -> bool { base::has_ext(path, &[".sql"]) @@ -109,16 +109,13 @@ impl EdgeBuilder for SqlEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let sql_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_sql_file(f)).collect(); - if sql_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &sql_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_table_refs(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_sql_file, + extract_table_refs, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/swift.rs b/crates/diffctx-native/src/edges/semantic/swift.rs index 816d08531..cb506c65e 100644 --- a/crates/diffctx-native/src/edges/semantic/swift.rs +++ b/crates/diffctx-native/src/edges/semantic/swift.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_swift_file(path: &Path) -> bool { base::has_ext(path, &[".swift"]) @@ -122,16 +122,13 @@ impl EdgeBuilder for SwiftEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let sw_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_swift_file(f)).collect(); - if sw_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &sw_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_swift_file, + extract_imports, + ) } } diff --git a/crates/diffctx-native/src/edges/semantic/zig.rs b/crates/diffctx-native/src/edges/semantic/zig.rs index 247a8d065..90cfd46c4 100644 --- a/crates/diffctx-native/src/edges/semantic/zig.rs +++ b/crates/diffctx-native/src/edges/semantic/zig.rs @@ -8,7 +8,7 @@ use crate::config::weights::EDGE_WEIGHTS; use crate::types::Fragment; use super::super::EdgeDict; -use super::super::base::{self, EdgeBuilder, add_edges_from_ids, discover_files_by_refs}; +use super::super::base::{self, EdgeBuilder, add_edges_from_ids}; fn is_zig_file(path: &Path) -> bool { base::has_ext(path, &[".zig"]) @@ -105,16 +105,13 @@ impl EdgeBuilder for ZigEdgeBuilder { repo_root: Option<&Path>, file_cache: Option<&FxHashMap>, ) -> Vec { - let zig_changed: Vec<&PathBuf> = changed.iter().filter(|f| is_zig_file(f)).collect(); - if zig_changed.is_empty() { - return vec![]; - } - let mut refs = FxHashSet::default(); - for f in &zig_changed { - if let Some(content) = base::read_file_cached(f, file_cache) { - refs.extend(extract_imports(&content)); - } - } - discover_files_by_refs(&refs, changed, candidates, repo_root) + base::discover_by_extracted_refs( + changed, + candidates, + repo_root, + file_cache, + is_zig_file, + extract_imports, + ) } } From 870ce14cb7bce63c6edd75adfa91bc8e80472ffd Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 01:44:46 +0200 Subject: [PATCH 54/73] refactor: one path-display and one deleted/renamed source in pipeline --- crates/diffctx-native/src/pipeline.rs | 62 +++++++++------------------ 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/crates/diffctx-native/src/pipeline.rs b/crates/diffctx-native/src/pipeline.rs index 7fe500695..e2f0cff33 100644 --- a/crates/diffctx-native/src/pipeline.rs +++ b/crates/diffctx-native/src/pipeline.rs @@ -89,6 +89,20 @@ pub struct HeavyLatencyMs { pub scoring: f64, } +// How this module writes a path into output, in one place instead of five. +// +// The `replace` is unconditional, which `paths.rs` documents as a bug: on POSIX +// a backslash is a legal filename character, so rewriting it names a file that +// does not exist. Routing this at `paths::display_rel` is the fix and it is +// NOT bit-identical, so it belongs in its own labelled commit — this one only +// stops the wrong behaviour from being spelled out five times. +fn rel_display(p: &Path, root: &Path) -> String { + p.strip_prefix(root) + .unwrap_or(p) + .to_string_lossy() + .replace('\\', "/") +} + pub fn build_diff_context( root_dir: &Path, diff_range: Option<&str>, @@ -360,12 +374,7 @@ fn resolve_change_set( // deletion-only commit used to render as a bare two-line skeleton). let mut deleted_display: Vec = deleted_files .iter() - .map(|p| { - p.strip_prefix(root_dir) - .unwrap_or(p) - .to_string_lossy() - .replace('\\', "/") - }) + .map(|p| rel_display(p, root_dir)) .collect(); deleted_display.sort(); let renamed_display = git::get_rename_pairs(root_dir, diff_range).unwrap_or_default(); @@ -821,12 +830,7 @@ pub fn select_with_params( changed_files: state .changed_files .iter() - .map(|p| { - p.strip_prefix(&state.root_dir) - .unwrap_or(p) - .to_string_lossy() - .replace('\\', "/") - }) + .map(|p| rel_display(p, &state.root_dir)) .collect(), deleted_files: state.deleted_files.clone(), renamed_files: state.renamed_files.clone(), @@ -1191,32 +1195,15 @@ fn build_diff_context_full( .find(|l| !l.is_empty()) .map(str::to_string) }); - let mut deleted_display: Vec = git::get_deleted_files(&root_dir, diff_range) - .map(|set| { - set.iter() - .map(|p| { - p.strip_prefix(&root_dir) - .unwrap_or(p) - .to_string_lossy() - .replace('\\', "/") - }) - .collect() - }) - .unwrap_or_default(); - deleted_display.sort(); + let (deleted_display, renamed_display) = deletion_rename_displays(&root_dir, diff_range); let change = render::ChangeSummary { commit_message, changed_files: changed_files .iter() - .map(|p| { - p.strip_prefix(&root_dir) - .unwrap_or(p) - .to_string_lossy() - .replace('\\', "/") - }) + .map(|p| rel_display(p, &root_dir)) .collect(), deleted_files: deleted_display, - renamed_files: git::get_rename_pairs(&root_dir, diff_range).unwrap_or_default(), + renamed_files: renamed_display, // `--full` is the escape hatch that promises every fragment of the // changed files, so it keeps lockfile content instead of diverting it. lockfile_changes: Vec::new(), @@ -1238,16 +1225,7 @@ fn deletion_rename_displays( diff_range: Option<&str>, ) -> (Vec, Vec<(String, String)>) { let mut deleted: Vec = git::get_deleted_files(root_dir, diff_range) - .map(|set| { - set.iter() - .map(|p| { - p.strip_prefix(root_dir) - .unwrap_or(p) - .to_string_lossy() - .replace('\\', "/") - }) - .collect() - }) + .map(|set| set.iter().map(|p| rel_display(p, root_dir)).collect()) .unwrap_or_default(); deleted.sort(); let renamed = git::get_rename_pairs(root_dir, diff_range).unwrap_or_default(); From ca8e7a67b4e287c2ec3e19321cac40fea1d24d12 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 01:52:52 +0200 Subject: [PATCH 55/73] refactor: one token-count formula for pipeline and in-memory harness --- crates/diffctx-native/src/memory_pipeline.rs | 15 +++------------ crates/diffctx-native/src/pipeline.rs | 7 +++++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/crates/diffctx-native/src/memory_pipeline.rs b/crates/diffctx-native/src/memory_pipeline.rs index f37e48734..6badf8296 100644 --- a/crates/diffctx-native/src/memory_pipeline.rs +++ b/crates/diffctx-native/src/memory_pipeline.rs @@ -2,12 +2,10 @@ use std::fmt::Write; use std::path::{Path, PathBuf}; use std::sync::Arc; -use rayon::prelude::*; use rustc_hash::{FxHashMap, FxHashSet}; use similar::{ChangeTag, TextDiff}; use crate::config::budget::BUDGET; -use crate::config::limits::LIMITS; use crate::config::tokenization::TOKENIZATION; use crate::core::{compute_seed_weights, identify_core_fragments}; use crate::edges; @@ -16,7 +14,6 @@ use crate::parsers::fragment_file; use crate::render::{DiffContextOutput, build_diff_context_output}; use crate::scoring::create_scoring_strategy; use crate::signatures::generate_signature_variants; -use crate::tokenizer::count_tokens; use crate::types::{DiffHunk, Fragment, FragmentId}; pub struct MemoryRepo { @@ -83,9 +80,7 @@ pub fn build_diff_context_in_memory( } } - all_fragments.par_iter_mut().for_each(|f| { - f.token_count = count_tokens(&f.content) + LIMITS.overhead_per_fragment; - }); + crate::pipeline::assign_token_counts(&mut all_fragments); let core_ids = identify_core_fragments(&hunks, &all_fragments); @@ -97,14 +92,10 @@ pub fn build_diff_context_in_memory( // something nobody runs. let mut core_excerpts = crate::excerpt::generate_core_excerpts(&all_fragments, &core_ids, &hunks); - core_excerpts.par_iter_mut().for_each(|(_, f)| { - f.token_count = count_tokens(&f.content) + LIMITS.overhead_per_fragment; - }); + crate::pipeline::assign_excerpt_token_counts(&mut core_excerpts); let mut sig_frags = generate_signature_variants(&all_fragments); - sig_frags.par_iter_mut().for_each(|f| { - f.token_count = count_tokens(&f.content) + LIMITS.overhead_per_fragment; - }); + crate::pipeline::assign_token_counts(&mut sig_frags); all_fragments.extend(sig_frags); let effective_budget = budget_tokens.unwrap_or(BUDGET.unlimited); diff --git a/crates/diffctx-native/src/pipeline.rs b/crates/diffctx-native/src/pipeline.rs index e2f0cff33..99550b518 100644 --- a/crates/diffctx-native/src/pipeline.rs +++ b/crates/diffctx-native/src/pipeline.rs @@ -1358,7 +1358,10 @@ fn build_file_cache(candidate_files: &[PathBuf]) -> FxHashMap { cache } -fn assign_token_counts(fragments: &mut [Fragment]) { +// The token-count formula, in one place. The in-memory harness spelled it out +// three more times; #149 is what happens when the harness and the shipped +// pipeline disagree about it — the corpus then measures a system nobody runs. +pub(crate) fn assign_token_counts(fragments: &mut [Fragment]) { fragments.par_iter_mut().for_each(|frag| { if frag.token_count == 0 { frag.token_count = count_tokens(&frag.content) + LIMITS.overhead_per_fragment; @@ -1366,7 +1369,7 @@ fn assign_token_counts(fragments: &mut [Fragment]) { }); } -fn assign_excerpt_token_counts(excerpts: &mut FxHashMap) { +pub(crate) fn assign_excerpt_token_counts(excerpts: &mut FxHashMap) { for frag in excerpts.values_mut() { if frag.token_count == 0 { frag.token_count = count_tokens(&frag.content) + LIMITS.overhead_per_fragment; From 09cad03da8844bd4fb1fc9f472cc650512ec38f3 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 02:01:53 +0200 Subject: [PATCH 56/73] refactor: delete three exact duplicates, one of them a lying name --- crates/diffctx-native/src/analytics.rs | 17 +---------------- crates/diffctx-native/src/locate.rs | 11 ++++------- crates/diffctx-native/src/render.rs | 4 ++-- crates/diffctx-native/src/select.rs | 2 +- crates/diffctx-native/src/utility/objective.rs | 17 +---------------- 5 files changed, 9 insertions(+), 42 deletions(-) diff --git a/crates/diffctx-native/src/analytics.rs b/crates/diffctx-native/src/analytics.rs index af1b31212..ac842bf7d 100644 --- a/crates/diffctx-native/src/analytics.rs +++ b/crates/diffctx-native/src/analytics.rs @@ -536,7 +536,7 @@ pub fn to_mermaid(qg: &QuotientGraph, top_n: usize) -> String { .categories .iter() .max_by_key(|&(_, count)| *count) - .map_or("?", |(c, _)| category_name(*c)); + .map_or("?", |(c, _)| c.as_str()); let weight_str = format_weight(edge.weight); lines.push(format!( " {src_id} -->|\"{top_cat}: {weight_str}\"| {dst_id}" @@ -548,21 +548,6 @@ pub fn to_mermaid(qg: &QuotientGraph, top_n: usize) -> String { out } -fn category_name(c: EdgeCategory) -> &'static str { - match c { - EdgeCategory::Semantic => "semantic", - EdgeCategory::Structural => "structural", - EdgeCategory::Sibling => "sibling", - EdgeCategory::Config => "config", - EdgeCategory::ConfigGeneric => "config_generic", - EdgeCategory::Document => "document", - EdgeCategory::Similarity => "similarity", - EdgeCategory::History => "history", - EdgeCategory::TestEdge => "test_edge", - EdgeCategory::Generic => "generic", - } -} - fn format_weight(w: f64) -> String { if (w - w.round()).abs() < f64::EPSILON { format!("{}", w as i64) diff --git a/crates/diffctx-native/src/locate.rs b/crates/diffctx-native/src/locate.rs index cad9df80d..6182b3bd7 100644 --- a/crates/diffctx-native/src/locate.rs +++ b/crates/diffctx-native/src/locate.rs @@ -211,18 +211,15 @@ fn rel_path(state: &ScoredState, path: &str) -> String { .unwrap_or_else(|| crate::paths::to_posix_display(std::borrow::Cow::Borrowed(path))) } -/// Same predicate on both surfaces (pack render agrees via -/// `render::carries_changed_role`): the fragment is a core, an excerpt -/// stand-in, or a signature stub substituted at a core's location (#209). +/// Same predicate on both surfaces, and now literally the same function: the +/// fragment is a core, an excerpt stand-in, or a signature stub substituted at +/// a core's location (#209). fn carries_change( state: &ScoredState, frag: &Fragment, core_locs: &rustc_hash::FxHashSet<(std::sync::Arc, u32)>, ) -> bool { - state.core_ids.contains(&frag.id) - || frag.kind == crate::types::FragmentKind::Excerpt - || (frag.kind.is_signature() - && core_locs.contains(&(frag.id.path.clone(), frag.id.start_line))) + crate::render::carries_changed_role(frag, &state.core_ids, core_locs) } fn reasons_for( diff --git a/crates/diffctx-native/src/render.rs b/crates/diffctx-native/src/render.rs index 066101511..5b4361751 100644 --- a/crates/diffctx-native/src/render.rs +++ b/crates/diffctx-native/src/render.rs @@ -289,8 +289,8 @@ fn create_fragment_entry(frag: &Fragment, path_str: &str) -> FragmentEntry { /// `core_ids` — it is a synthetic span cut out of the core — so without this the /// downshift would silently strip the change marker from the output, which is /// worse than the over-dump it replaces. `locate.rs` already treats `Excerpt` -/// this way; both surfaces must agree. -fn carries_changed_role( +/// this way, and calls this function so the two cannot drift apart. +pub(crate) fn carries_changed_role( frag: &Fragment, core_ids: &FxHashSet, core_locs: &FxHashSet<(Arc, u32)>, diff --git a/crates/diffctx-native/src/select.rs b/crates/diffctx-native/src/select.rs index ac5568623..a07e45b27 100644 --- a/crates/diffctx-native/src/select.rs +++ b/crates/diffctx-native/src/select.rs @@ -725,7 +725,7 @@ pub fn lazy_greedy_select( }; } - let base_state = state.utility_state.copy(); + let base_state = state.utility_state.clone(); let base_selected = state.selected.clone(); let base_budget = state.remaining_budget; diff --git a/crates/diffctx-native/src/utility/objective.rs b/crates/diffctx-native/src/utility/objective.rs index 17ef09e3c..7c538f603 100644 --- a/crates/diffctx-native/src/utility/objective.rs +++ b/crates/diffctx-native/src/utility/objective.rs @@ -8,6 +8,7 @@ use crate::config::needs::NEEDS; use crate::types::Fragment; use crate::utility::needs::{InformationNeed, match_strength_typed}; +#[derive(Clone)] pub struct UtilityState { pub max_rel: FxHashMap<(String, String), f64>, pub priorities: FxHashMap<(String, String), f64>, @@ -36,22 +37,6 @@ impl Default for UtilityState { } } -impl UtilityState { - pub fn copy(&self) -> Self { - Self { - max_rel: self.max_rel.clone(), - priorities: self.priorities.clone(), - structural_sum: self.structural_sum, - eta: self.eta, - structural_bonus_weight: self.structural_bonus_weight, - r_cap: self.r_cap, - changed_dirs: self.changed_dirs.clone(), - proximity_decay: self.proximity_decay, - file_importance: self.file_importance.clone(), - } - } -} - fn phi(x: f64) -> f64 { if x > 0.0 { x.sqrt() } else { 0.0 } } From a24c07afaf227e37198a57e426bc231c844dbfd7 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Fri, 21 Aug 2026 03:27:25 +0200 Subject: [PATCH 57/73] refactor: constructors for the two repeated struct literals --- crates/diffctx-native/src/select.rs | 24 +++-- .../diffctx-native/src/utility/boltzmann.rs | 9 +- crates/diffctx-native/src/utility/needs.rs | 100 ++++++++---------- 3 files changed, 60 insertions(+), 73 deletions(-) diff --git a/crates/diffctx-native/src/select.rs b/crates/diffctx-native/src/select.rs index a07e45b27..58db26082 100644 --- a/crates/diffctx-native/src/select.rs +++ b/crates/diffctx-native/src/select.rs @@ -49,6 +49,21 @@ pub struct SelectionResult { pub stopping_certificate: f64, } +impl SelectionResult { + /// Nothing selected: no candidates reached the selector at all. Spelled out + /// identically in the greedy and the Boltzmann path before this. + pub fn none() -> Self { + Self { + selected: Vec::new(), + reason: SelectionReason::NoCandidates, + used_tokens: 0, + utility: 0.0, + greedy_iters: 0, + stopping_certificate: 0.0, + } + } +} + struct HeapEntry { neg_density: f64, frag_id: FragmentId, @@ -692,14 +707,7 @@ pub fn lazy_greedy_select( declared_admissible_files: Option<&FxHashSet>>, ) -> SelectionResult { if fragments.is_empty() { - return SelectionResult { - selected: Vec::new(), - reason: SelectionReason::NoCandidates, - used_tokens: 0, - utility: 0.0, - greedy_iters: 0, - stopping_certificate: 0.0, - }; + return SelectionResult::none(); } let (mut state, non_core_fragments, _selected_core, should_return_early) = diff --git a/crates/diffctx-native/src/utility/boltzmann.rs b/crates/diffctx-native/src/utility/boltzmann.rs index 87ccde625..1188a7b0e 100644 --- a/crates/diffctx-native/src/utility/boltzmann.rs +++ b/crates/diffctx-native/src/utility/boltzmann.rs @@ -25,14 +25,7 @@ pub fn boltzmann_select( beta: f64, ) -> SelectionResult { if fragments.is_empty() { - return SelectionResult { - selected: Vec::new(), - reason: SelectionReason::NoCandidates, - used_tokens: 0, - utility: 0.0, - greedy_iters: 0, - stopping_certificate: 0.0, - }; + return SelectionResult::none(); } let mut core: Vec = fragments diff --git a/crates/diffctx-native/src/utility/needs.rs b/crates/diffctx-native/src/utility/needs.rs index 66de1e882..d1210c929 100644 --- a/crates/diffctx-native/src/utility/needs.rs +++ b/crates/diffctx-native/src/utility/needs.rs @@ -185,6 +185,17 @@ pub struct InformationNeed { pub priority: f64, } +impl InformationNeed { + fn new(need_type: &str, symbol: String, scope: Option>, priority: f64) -> Self { + Self { + need_type: need_type.to_string(), + symbol, + scope, + priority, + } + } +} + fn parse_import_names(names_str: &str) -> FxHashSet { let mut result = FxHashSet::default(); for name in names_str.split(',') { @@ -228,11 +239,8 @@ fn add_needs_for_syms( for sym in syms { if sym.len() >= NEEDS.min_symbol_length && !CODE_STOPWORDS.contains(sym) { let key = ("definition".to_string(), sym.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "definition".to_string(), - symbol: sym.clone(), - scope: None, - priority: NEEDS.definition_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("definition", sym.clone(), None, NEEDS.definition_priority) }); } } @@ -398,11 +406,13 @@ fn collect_core_needs( } core_symbol_names.insert(sym.clone()); let key = ("impact".to_string(), sym.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "impact".to_string(), - symbol: sym, - scope: Some(frag.id.path.clone()), - priority: NEEDS.impact_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new( + "impact", + sym, + Some(frag.id.path.clone()), + NEEDS.impact_priority, + ) }); } core_symbol_names @@ -426,11 +436,8 @@ fn process_line_for_needs( continue; } let key = ("definition".to_string(), low.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "definition".to_string(), - symbol: low, - scope: None, - priority: NEEDS.call_definition_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("definition", low, None, NEEDS.call_definition_priority) }); } // `external_syms` names what the diff imports from outside the repository, @@ -459,12 +466,9 @@ fn add_signature_need( return; } let key = ("signature".to_string(), sym.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "signature".to_string(), - symbol: sym, - scope: None, - priority: NEEDS.signature_priority, - }); + needs + .entry(key) + .or_insert_with(|| InformationNeed::new("signature", sym, None, NEEDS.signature_priority)); } fn collect_diff_line_needs( @@ -498,11 +502,8 @@ fn collect_test_needs( || needs.contains_key(&("definition".to_string(), tested.clone())) { let key = ("test".to_string(), tested.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "test".to_string(), - symbol: tested.clone(), - scope: None, - priority: NEEDS.test_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("test", tested.clone(), None, NEEDS.test_priority) }); } } @@ -518,11 +519,8 @@ fn collect_invariant_needs( let sym = m[1].to_lowercase(); if sym.len() >= NEEDS.min_symbol_length && !CODE_STOPWORDS.contains(&sym) { let key = ("invariant".to_string(), sym.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "invariant".to_string(), - symbol: sym, - scope: None, - priority: NEEDS.invariant_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("invariant", sym, None, NEEDS.invariant_priority) }); } } @@ -559,11 +557,13 @@ fn collect_config_context_needs( for ident in &frag.identifiers { if ident.len() >= NEEDS.background_min_ident_length && !covered.contains(ident) { let key = ("background".to_string(), ident.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "background".to_string(), - symbol: ident.clone(), - scope: None, - priority: NEEDS.background_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new( + "background", + ident.clone(), + None, + NEEDS.background_priority, + ) }); } } @@ -579,11 +579,8 @@ fn collect_terraform_needs( let sym = m[1].to_lowercase(); if sym.len() >= NEEDS.min_symbol_length && !CODE_STOPWORDS.contains(&sym) { let key = ("definition".to_string(), sym.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "definition".to_string(), - symbol: sym, - scope: None, - priority: NEEDS.call_definition_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("definition", sym, None, NEEDS.call_definition_priority) }); } } @@ -595,11 +592,8 @@ fn collect_terraform_needs( } let full_ref = format!("{}.{}", ref_type, ref_name); let key = ("definition".to_string(), full_ref.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "definition".to_string(), - symbol: full_ref, - scope: None, - priority: NEEDS.definition_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("definition", full_ref, None, NEEDS.definition_priority) }); } } @@ -658,12 +652,7 @@ pub fn needs_from_diff( let fallback = concepts_from_diff_text(diff_text, Some(&changed_lines)); return fallback .into_iter() - .map(|c| InformationNeed { - need_type: "definition".to_string(), - symbol: c, - scope: None, - priority: NEEDS.fallback_priority, - }) + .map(|c| InformationNeed::new("definition", c, None, NEEDS.fallback_priority)) .collect(); } @@ -671,11 +660,8 @@ pub fn needs_from_diff( for c in concepts_from_diff_text(diff_text, Some(&changed_lines)) { if !covered_symbols.contains(&c) { let key = ("background".to_string(), c.clone()); - needs.entry(key).or_insert_with(|| InformationNeed { - need_type: "background".to_string(), - symbol: c, - scope: None, - priority: NEEDS.concept_background_priority, + needs.entry(key).or_insert_with(|| { + InformationNeed::new("background", c, None, NEEDS.concept_background_priority) }); } } From 1ff4d2d184278734eac2f969baf5163eaa9e5b26 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 25 Aug 2026 22:21:33 +0200 Subject: [PATCH 58/73] ci: uv sync --locked everywhere; uv.lock back under a drift gate --- .github/dependabot.yml | 25 + .github/workflows/ci.yml | 60 +- .github/workflows/sensitivity-check.yml | 7 +- CONTRIBUTING.md | 23 +- uv.lock | 3004 +++++++++++++++++++++++ 5 files changed, 3076 insertions(+), 43 deletions(-) create mode 100644 uv.lock diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5f77da8f6..2d47fd4f5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,30 @@ version: 2 updates: + # uv.lock only. `versioning-strategy: lockfile-only` keeps this entry off + # pyproject.toml's ranges, which the pip entry below owns — without the split + # both ecosystems see the same pyproject and open the same PR twice. + - package-ecosystem: "uv" + directory: "/" + versioning-strategy: "lockfile-only" + schedule: + interval: "weekly" + day: "saturday" + time: "10:00" + timezone: "Europe/Berlin" + cooldown: + default-days: 3 + labels: + - "dependencies" + assignees: + - "nikolay-e" + commit-message: + prefix: "chore(deps)" + include: "scope" + groups: + all-dependencies: + patterns: + - "*" + - package-ecosystem: "pip" directory: "/" schedule: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1cb7368fe..153393078 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,10 +24,11 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Set up Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: '3.12' + enable-cache: true # This job runs the cargo fmt and clippy hooks, so it is the one place # that needs those components; rust-toolchain.toml deliberately does not @@ -48,9 +49,8 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install pre-commit - pip install -e ".[dev]" + uv sync --locked --extra dev + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run pre-commit run: pre-commit run --all-files @@ -171,12 +171,11 @@ jobs: - name: Checkout Code uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Set up Python 3.10 - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: '3.10' - cache: 'pip' - cache-dependency-path: 'pyproject.toml' + enable-cache: true # Same reason as the pre-commit job: installing this package compiles the # native extension, so cargo has to be on PATH at the pinned version. @@ -187,8 +186,8 @@ jobs: - name: Install Linters and Type Checker run: | - python -m pip install --upgrade pip - pip install .[dev] + uv sync --locked --extra dev + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run Linters and Formatters Check run: | @@ -270,12 +269,11 @@ jobs: - name: Checkout Code uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - name: Set up uv with Python ${{ matrix.python-version }} + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: ${{ matrix.python-version }} - cache: 'pip' - cache-dependency-path: 'pyproject.toml' + enable-cache: true - name: Install Rust uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable @@ -293,20 +291,16 @@ jobs: key: cargo-${{ runner.os }}-py${{ matrix.python-version }}-${{ hashFiles('Cargo.lock') }} restore-keys: cargo-${{ runner.os }}-py${{ matrix.python-version }}- - - name: Install build backend - run: | - python -m pip install --upgrade pip - pip install "maturin>=1.10,<1.11" - - name: Build and install diffctx (with Rust _diffctx) and dev deps shell: bash env: PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1" run: | - # PEP 660 editable install — maturin builds the Rust extension and - # pip installs everything (diffctx + [dev,full,mcp] extras). Skip build - # isolation since we just installed maturin in this env. - pip install -e ".[dev,full,mcp]" --no-build-isolation + # Editable install of the project plus every extra the suite needs. + # uv provisions maturin in its own build environment, so the build + # backend is not a separate step and cannot drift from pyproject. + uv sync --locked --extra dev --extra full --extra mcp + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run Tests with Coverage shell: bash @@ -350,10 +344,11 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Set up Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: '3.12' + enable-cache: true # Installing this package compiles the native extension, so cargo must # be on PATH at the pinned version. @@ -364,8 +359,8 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + uv sync --locked --extra dev + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Check cyclomatic complexity run: | @@ -394,10 +389,11 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Set up Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: '3.12' + enable-cache: true # Installing this package compiles the native extension, so cargo must # be on PATH at the pinned version. @@ -408,8 +404,8 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + uv sync --locked --extra dev + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Check import contracts run: lint-imports diff --git a/.github/workflows/sensitivity-check.yml b/.github/workflows/sensitivity-check.yml index f9ef367d2..99498d800 100644 --- a/.github/workflows/sensitivity-check.yml +++ b/.github/workflows/sensitivity-check.yml @@ -32,12 +32,15 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 with: python-version: '3.12' + enable-cache: true - name: Install diffctx with dev extras - run: pip install -e ".[dev,tree-sitter]" + run: | + uv sync --locked --extra dev --extra tree-sitter + echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run sensitivity check env: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aea5055fa..fd352b531 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,18 +6,23 @@ git clone https://github.com/nikolay-e/diffctx.git cd diffctx rustup component add rustfmt clippy -python -m venv .venv && source .venv/bin/activate -pip install "maturin>=1.10,<1.15" -pip install -e ".[dev,full,mcp]" --no-build-isolation +uv sync --locked --extra dev --extra full --extra mcp +source .venv/bin/activate pre-commit install && pre-commit install --hook-type commit-msg ``` -The package builds the Rust extension via maturin, so `maturin` must be -installed first and `--no-build-isolation` is required. `rust-toolchain.toml` -pins the compiler but deliberately not `rustfmt`/`clippy` — pinning components -makes rustup install them before anything can *build* the crate, which breaks -`pip install` from an sdist on a machine that already has them. The -`rustup component add` above is what the pre-commit hooks need. +`uv.lock` is the resolved dependency set every CI job installs, via the same +`uv sync --locked` — `--locked` fails instead of re-resolving, so a pyproject +edit that was not locked cannot reach a green build. Regenerate with +`uv lock` and commit the result in the same change. + +The package builds the Rust extension via maturin; uv provisions the build +backend in its own isolated environment, so nothing has to be installed before +the sync. `rust-toolchain.toml` pins the compiler but deliberately not +`rustfmt`/`clippy` — pinning components makes rustup install them before +anything can *build* the crate, which breaks installing from an sdist on a +machine that already has them. The `rustup component add` above is what the +pre-commit hooks need. ## Development Workflow diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..04ecf4c3f --- /dev/null +++ b/uv.lock @@ -0,0 +1,3004 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.15'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "ast-serialize" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/a9/11851c3e02a3fea2ddc9932d1fdc7d2edaeecc0d2e11bc5f2a7fde2b0934/ast_serialize-0.8.0.tar.gz", hash = "sha256:6c37c43e4004dfb42d321ddedc569dc17ff4259296f3af577c9ea46a809bc010", size = 845638, upload-time = "2026-08-07T11:29:02.152Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/16/6e520b57cd8c75914b38c670ad4593d13c22911e4306cc7165dab8b0789b/ast_serialize-0.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:3d822605fa7bb326ef868d25fafced7fc660fa46d9b90c02ea86d5e2f5d325f7", size = 863924, upload-time = "2026-08-07T11:27:34.579Z" }, + { url = "https://files.pythonhosted.org/packages/03/e1/48802de9b22a2bcad42ec80601a17e3f69172fe4f590e6311bcc2b323aeb/ast_serialize-0.8.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:2efa40b068197d5efb62655b43baadb842ed71c4958cccd3e8b86a35726f0119", size = 1177662, upload-time = "2026-08-07T11:27:36.196Z" }, + { url = "https://files.pythonhosted.org/packages/38/d4/323438db76bded3a1f3523a3167b8325916b2ddceb2107a330c6ec9fcf4d/ast_serialize-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:db1b957291bca08c7e72f43a12357b2948e20775d970e3fc3dac0aa3160ab725", size = 1167072, upload-time = "2026-08-07T11:27:37.646Z" }, + { url = "https://files.pythonhosted.org/packages/77/82/53c5400b54144b56de8ed7f957fd1ccd97e42482009292ab46121d15f8dd/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdc0d5b18ff8fb364e87923e47c0a91d0d69dbcaeaa274591f7fd26892cc3a3a", size = 1225497, upload-time = "2026-08-07T11:27:39.225Z" }, + { url = "https://files.pythonhosted.org/packages/44/5f/36c07327a8b91303fbf1382c7c3e8a2902072dbe1b9546138a5288e75ff0/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9da7330f3e235bf7da89b8d39205c6350fc0c08a85379743f2df9fff87d6d980", size = 1227101, upload-time = "2026-08-07T11:27:40.799Z" }, + { url = "https://files.pythonhosted.org/packages/9d/48/5adf5c67addc7ddb328122208c6d375a84cf154984f412b4087330a157bd/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3186969ee66a9863b00acc6523ace44c56974eecb348a7ea4b228d9f0b80e19", size = 1424001, upload-time = "2026-08-07T11:27:42.708Z" }, + { url = "https://files.pythonhosted.org/packages/38/a1/70074dd3869d2b0e934f91891d8d6b734361cd3b80f85ca7ece2e668ecdd/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40a57b73731be45da4fa41430c4d5dc94a24b3a4faba7b9e069978c0402064ea", size = 1245545, upload-time = "2026-08-07T11:27:44.4Z" }, + { url = "https://files.pythonhosted.org/packages/e3/be/53b9c0a8a6399950c2e3546bdfab96d2b299d5b114b47eb94fd3c49c4054/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5075b9da3ef807eda752502446dfecea3b381c4900b7e27a5d5f4f899eb39951", size = 1248961, upload-time = "2026-08-07T11:27:45.781Z" }, + { url = "https://files.pythonhosted.org/packages/eb/13/3651d3812548a2bda15e26e5dd51aadb48cf682d0865370255fcf0e367dd/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:293cc1c5bfa741f8e3fbe8175b9c07beee487c9a6fdbb25a5acad9f1df2d30a9", size = 1243877, upload-time = "2026-08-07T11:27:47.325Z" }, + { url = "https://files.pythonhosted.org/packages/21/a0/521f0bf000f675e9312a4aae2c8ba7a992405d072a85c485e08fd59433b9/ast_serialize-0.8.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0910c3442a75216dde0f102d854ba2aaa71d2482e0ee213630b9bf29584fba3", size = 1293903, upload-time = "2026-08-07T11:27:49.264Z" }, + { url = "https://files.pythonhosted.org/packages/b1/7e/402fc902568aa2ee65865a3e151f000db0153da8ce6b1be4c9c349025f8d/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:43dd6d596879bb1cb8a12cc9dae7bb10090a39a35883026c24f82488a195619a", size = 1401070, upload-time = "2026-08-07T11:27:50.947Z" }, + { url = "https://files.pythonhosted.org/packages/ff/7c/97d4b66c057f1706fc8be6dd532cc77c988794357c8f4ffdb6adabb39562/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8c9d537f59e936392cfd3597789d1390304dd659efc3c486ce7f40fb6b8a9f53", size = 1502602, upload-time = "2026-08-07T11:27:52.364Z" }, + { url = "https://files.pythonhosted.org/packages/89/6f/72cc3b71562001bba46e898ccfbf1844f7939b3e28912736206102f2e5a8/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:f0190a33d7f97c65e9069f7a7f40499eea6b5cbe260c558378109caf20ce934b", size = 1495848, upload-time = "2026-08-07T11:27:53.803Z" }, + { url = "https://files.pythonhosted.org/packages/a0/53/d6f629d1e49308b2f363dae028baa213ec222c9106fa1f7f0d1f7b41499a/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:77308ae6c5cf5264cc0f01a7c556ec77a9e68eb1f61b093534d698139fdc3b14", size = 1556556, upload-time = "2026-08-07T11:27:55.342Z" }, + { url = "https://files.pythonhosted.org/packages/ee/22/340f35dd8dfc6d412d53dc20699ca014b8d228db923e8ed4759c512b162c/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8d53a23f27e1ed3a36b2d26fd2a1a6228c8e85a1ed62ff7cdb44bd610769f20a", size = 1417822, upload-time = "2026-08-07T11:27:56.712Z" }, + { url = "https://files.pythonhosted.org/packages/11/29/6dde5c13fbebc051d3a6df4ec0a6fd1d5359333cc1193f7f609f3410b4d8/ast_serialize-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ffa5e7cb08f96fed9121f77b224151e41caf88feab9d652bb46c78202b6fbeda", size = 1445153, upload-time = "2026-08-07T11:27:58.275Z" }, + { url = "https://files.pythonhosted.org/packages/62/c5/f473a8ed030f7a0ca24b9849cca184677a50c053867a7b808c2e1289bbd3/ast_serialize-0.8.0-cp314-cp314t-win32.whl", hash = "sha256:fa70ed4dea0bb18b30a1789c77baa701d0ef30c474f2ccabdea61e25623a8827", size = 1063711, upload-time = "2026-08-07T11:27:59.793Z" }, + { url = "https://files.pythonhosted.org/packages/23/63/39e171fcd38ca057c2e1979d5ee81ac7a3502784abe3d83df7454f7a0978/ast_serialize-0.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d8b3c8eee4c1baef9d4e84d2a59a805501617127be42615cb48970b15b0892b6", size = 1103740, upload-time = "2026-08-07T11:28:01.405Z" }, + { url = "https://files.pythonhosted.org/packages/21/1c/d00762b399e7726d68d0a088cc946e3a4c60f1c6176f557608f672f627f3/ast_serialize-0.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:ac4f0a83c55a9b782f79ad55a5247b7db123c1db405959791c2ef886e9710c9f", size = 1076021, upload-time = "2026-08-07T11:28:02.947Z" }, + { url = "https://files.pythonhosted.org/packages/4c/11/911210c3c78923273a9211a2b6cfc4c8aa723b30dab3e1c8d19afb983b40/ast_serialize-0.8.0-cp315-abi3.abi3t-macosx_10_12_x86_64.whl", hash = "sha256:86b8a1e6d90467345356098b040150e82fbc26d24a7a202224b13dc1f6264ca0", size = 1177715, upload-time = "2026-08-07T11:28:04.654Z" }, + { url = "https://files.pythonhosted.org/packages/77/89/6282881c8587606638db153cbe21e1e0c4d1f3970dee1aa0610a1c62a026/ast_serialize-0.8.0-cp315-abi3.abi3t-macosx_11_0_arm64.whl", hash = "sha256:39e92ff8e8cb45947fe9007174b2950e1fb098e6abd00266a13cd3bcf6675068", size = 1169347, upload-time = "2026-08-07T11:28:06.1Z" }, + { url = "https://files.pythonhosted.org/packages/97/78/a9f846a03a340ff3728c915f23338ca742742f3292700559cdb3ad999b1e/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85d8d18db5b2dfcb3b7e38a4d600ca35504c0ed8a6f75cd1c811e4ffe248a15", size = 1225916, upload-time = "2026-08-07T11:28:07.654Z" }, + { url = "https://files.pythonhosted.org/packages/c0/15/aba6ef8a988a6eceb6f0359589aac509e29ae2dba67fd9bfd5af0c3f13e7/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9830ff7e764f74d9eefb01170c61a9f0fd2c027dac5fcb72e064decd57d56371", size = 1227135, upload-time = "2026-08-07T11:28:09.504Z" }, + { url = "https://files.pythonhosted.org/packages/94/29/3f63d696ea7c5b8abadcecc3505be51bd900daaccc522ed8322fa5b05a93/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6479d9722a4cd21b578f5478074c41e6169f04811996ec881655560f703a5bba", size = 1425040, upload-time = "2026-08-07T11:28:11.044Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5d/0aac338604ff59df5774d4304307898982252f325ff7cafe31d52fedcb65/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a63bed264e818cd83eec11feed0f50aa162542b91132ef58afebc857182763a5", size = 1246278, upload-time = "2026-08-07T11:28:12.519Z" }, + { url = "https://files.pythonhosted.org/packages/23/ca/9f1ef795bb724719532bd86dbec11e5b66857d3fbe9b6772baec0191a6ed/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d187197d234aa45d6cfa2b096be5f666e8cc2e7eb3722d0ab8926293cf5720c", size = 1250029, upload-time = "2026-08-07T11:28:13.896Z" }, + { url = "https://files.pythonhosted.org/packages/dc/25/5e061372d2ed953b9ba3b9c4f73de3b8e9234cda3f6c088db4686801d0e1/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_31_riscv64.whl", hash = "sha256:2d39a56282cfcc0d8eeea37267c754be59c98d48505c23b1dae5c6011f3813dd", size = 1243575, upload-time = "2026-08-07T11:28:15.37Z" }, + { url = "https://files.pythonhosted.org/packages/a8/c1/ae7da218053120635a4ca802366c69f707203641af95372eeb83f70dfd52/ast_serialize-0.8.0-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f7cc5f10386994c0f4844f1e6d6a97127e9b478660eb6dec2b257644f0acab64", size = 1294396, upload-time = "2026-08-07T11:28:16.813Z" }, + { url = "https://files.pythonhosted.org/packages/2e/89/271d1f49c5269fcddcc789ea3f25be401f6723fc1138aeda539f4d05516d/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl", hash = "sha256:6102f2f985c2e542be85cd857678ec9356fefa792b93cadfadd31139f5696f27", size = 1401987, upload-time = "2026-08-07T11:28:18.333Z" }, + { url = "https://files.pythonhosted.org/packages/55/be/4e7d77fcf571ac7cb5cf7115a20c36642bd7d29473b45dfaaefeb9618f90/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl", hash = "sha256:3a8660fe66667b76a6e9dccd1d33e66b229fde3b308db991c041609226c005b6", size = 1502904, upload-time = "2026-08-07T11:28:20.039Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ae/ed1de2db7e019d4236fbc164ffa5ef9a6022a300a342bbf142d21b7c141e/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_i686.whl", hash = "sha256:e7266307e5fba39836edb79def8608887af48820508bff3c5f2941e1e04d1534", size = 1496967, upload-time = "2026-08-07T11:28:21.734Z" }, + { url = "https://files.pythonhosted.org/packages/92/89/5fea507fae5c5f18b7dc7f95e5c00956574b8c717b8fd2049c504fab0b18/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca7e6fd1ad845d1cc649dc2ecd499db2f8f46af5bf8da7b70dd858774cc038b", size = 1559041, upload-time = "2026-08-07T11:28:23.194Z" }, + { url = "https://files.pythonhosted.org/packages/42/71/478d69df21b64e064554a68134c94be304270316ca676a94e63c389a636a/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_riscv64.whl", hash = "sha256:2880350b13d3eae69a0d70bc1fb6c9bfaca4dbd0e20ba8cd1aa483080b56ff06", size = 1417367, upload-time = "2026-08-07T11:28:24.601Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2d/8962dc8d5b3a9dc27b36f9db199afa25264c741505469d9ec10ffbfd2ba7/ast_serialize-0.8.0-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl", hash = "sha256:ab0f9a59f7d63d0d441b56b9a818b273705264352d5115cfee12e940e816d958", size = 1446178, upload-time = "2026-08-07T11:28:26.152Z" }, + { url = "https://files.pythonhosted.org/packages/4f/22/14d2ad4fd1d1bcd0dc687ca268e0630069f45162496260c0efb70ee0ea72/ast_serialize-0.8.0-cp315-abi3.abi3t-win32.whl", hash = "sha256:0485a25ef519c62e749ee3c1ad8070e591b380d67226349eb5a70b228dc1ac4a", size = 1063811, upload-time = "2026-08-07T11:28:27.864Z" }, + { url = "https://files.pythonhosted.org/packages/18/1d/84a327c0202a41aa5fdba3ade33904d6d8f3b9e6806fa83568d835395850/ast_serialize-0.8.0-cp315-abi3.abi3t-win_amd64.whl", hash = "sha256:bd84d60bca7079e741be4ac5dbe237751a59d7f6f9f0126b11880d63822cbe16", size = 1105518, upload-time = "2026-08-07T11:28:29.691Z" }, + { url = "https://files.pythonhosted.org/packages/8c/92/74556dec52fde85a2ad84ed159991b916241043788609c15d8b77e14570b/ast_serialize-0.8.0-cp315-abi3.abi3t-win_arm64.whl", hash = "sha256:057769b5921336eb2d9124f2a731b42ed05ffdac559b840dbdf6f3937cf153dc", size = 1076319, upload-time = "2026-08-07T11:28:31.282Z" }, + { url = "https://files.pythonhosted.org/packages/d1/5d/c650b1f2cc1e75193358da95a080261422e8cd10b66d7370b1688c9915c5/ast_serialize-0.8.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:a02cbed7d8bfdcdee88edaac12bd50d53d9953aaa2e1852ef078625be5f1c0b5", size = 852914, upload-time = "2026-08-07T11:28:32.929Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e3/6142e920fec6ef7bccabd8c24ed8ed99f8bdc6cb8b065e1df7c6a3b2d667/ast_serialize-0.8.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e1bd223df0f6c96b396975fa604cb33bce53d9b4a0185490be4c4a289f7c9c87", size = 1184007, upload-time = "2026-08-07T11:28:34.654Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e9/6e8be8df02b35d85e2b8809f7f1cfa290bdf5882b55127a539d049482db0/ast_serialize-0.8.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ddd3b61f45c132da66c5476b281891e08c1fd87fbdabe8a6973e1622efc85f06", size = 1177588, upload-time = "2026-08-07T11:28:36.318Z" }, + { url = "https://files.pythonhosted.org/packages/8c/80/7e0fd2e2e2aba257820db4a8657c4c356844d36b914b20a4af294bcfb902/ast_serialize-0.8.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f9caa63fad8241257ae401b5ff0a64026c6adb36b8e86cbe8782d9ea505daf6", size = 1234575, upload-time = "2026-08-07T11:28:37.772Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/3bae0af06f9b1bae3001c44d64215f5b567877e7aae9ffd45db11c3a7647/ast_serialize-0.8.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3926fa117b5e65019853a2969966d11c7175af377a3425991f3fe73784412405", size = 1236015, upload-time = "2026-08-07T11:28:39.14Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c4/ce2d41a1bc22508e82618901f7e10f2a5e2f9556553fea90624daf9875e2/ast_serialize-0.8.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:485f1113af805e9e170b95ef993ca3fbd4f89c04bab25c58b4fc632d854801ab", size = 1432808, upload-time = "2026-08-07T11:28:40.664Z" }, + { url = "https://files.pythonhosted.org/packages/1a/90/f5058f209756dd70e958b7538aaa82d25d24944baf9ec8ae6f27b06fcacc/ast_serialize-0.8.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccebbed24f1281062d5852353c72c47502955926cfcb8345ffb3a44d87ff3d3", size = 1256251, upload-time = "2026-08-07T11:28:42.223Z" }, + { url = "https://files.pythonhosted.org/packages/bf/32/7f77ea87fa0836daab706ed5cb7f903bb25fa26a77439011aee626af11d8/ast_serialize-0.8.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:252f883290d1cdb728eb7fe1d9a7221b88af5a329aae0bc91ddee4dafb820331", size = 1258574, upload-time = "2026-08-07T11:28:43.751Z" }, + { url = "https://files.pythonhosted.org/packages/eb/5a/75b82ad2725b5e8e8c742732f9e76c6738a292d0709e1f60d10a973730b4/ast_serialize-0.8.0-cp39-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:96abc072ad29db8d02194afd47d68987322622787daceae82398d7b69f3ba2e6", size = 1254075, upload-time = "2026-08-07T11:28:45.28Z" }, + { url = "https://files.pythonhosted.org/packages/4e/54/8c20ed4eea805516a3fd23dd4a721ce28c64f50f0e4b359969f60a8c97a6/ast_serialize-0.8.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9118ad3e369727060b2696fc4078f250ecffca4248ba87f537f55cea9f9dce06", size = 1301018, upload-time = "2026-08-07T11:28:46.851Z" }, + { url = "https://files.pythonhosted.org/packages/cb/5b/9f14430f12fe830b656fb38f8e2e05ee13b02a88967660bef46af0ab22a8/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f359df4bd921918af8bebd142a376c77511d7151cc8ba852760b587b5a4a54f3", size = 1409951, upload-time = "2026-08-07T11:28:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3d/084882eca93c842bd4262591a071ec7f825340644035e51501208cc5a8d4/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e94f9121d13fa36cbf21314783c77d05ae3a0868decd18cf5233fdcc6de49ac8", size = 1509544, upload-time = "2026-08-07T11:28:49.847Z" }, + { url = "https://files.pythonhosted.org/packages/ce/73/ea84852096c2036c61cc0b2f97b90242207419f534dc671060ee1c8e05cb/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:54f95b486018d262bcb387a9afd96f0da74508b442762b80c769454a6fbb3ee3", size = 1505671, upload-time = "2026-08-07T11:28:51.239Z" }, + { url = "https://files.pythonhosted.org/packages/cb/88/287b9a5300c1f2f651d259f670931b63110adc265b7613c885b44c5bc53d/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c38b915511e32bc718c49dbce98ff9af36bac0ad6a604f58000cd5e3aecdba7", size = 1563685, upload-time = "2026-08-07T11:28:53.112Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f3/1bc3a79afcf0c2a8d2c37182d0d659d1545a9d7f7f6dc9cf3e63d6c17135/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:9a2ef9cf12f2de4f1028c42c1dd7d775255e0fb3e5bb48896c97e35ef52366fe", size = 1427977, upload-time = "2026-08-07T11:28:54.418Z" }, + { url = "https://files.pythonhosted.org/packages/5c/cd/440c798957e14e31776bfeb024d8fafe0bb1d5b89c51c2f067e69938f7b0/ast_serialize-0.8.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f18048fe9f6dd266bd577cdec48bdcecb74faaa01fe941324435483b013ed2a", size = 1454335, upload-time = "2026-08-07T11:28:55.968Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4a/587eb36dcc240a54c8660f599464516b469ecad96f0dbdb6bccbedb50745/ast_serialize-0.8.0-cp39-abi3-win32.whl", hash = "sha256:31883542dd6c94d178f5db3d32fbd69c5eb88b3a7c018e7ac8cc0c45195ddbed", size = 1068858, upload-time = "2026-08-07T11:28:57.541Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a4/3e887bbd92164e183cb6e412c6a3e9198ddd446d7fe405958293ef5ef49c/ast_serialize-0.8.0-cp39-abi3-win_amd64.whl", hash = "sha256:861794565b06337005c1447ef23103a3d5a627d08bdc827870d00d0b28ef5f51", size = 1111839, upload-time = "2026-08-07T11:28:59Z" }, + { url = "https://files.pythonhosted.org/packages/25/6c/b400476d3ceba681ab929787edc9554f6d88fcc69435eb681b00fc0457a5/ast_serialize-0.8.0-cp39-abi3-win_arm64.whl", hash = "sha256:b2a5978662fd4db463dfb4b974d2b10ac6430b98f5333aabc7051909df3561d0", size = 1083655, upload-time = "2026-08-07T11:29:00.349Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, +] + +[[package]] +name = "black" +version = "26.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/84/b3f55026206a9e8820a91503308075ca48eadc515e436731ca01dbe043b3/black-26.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9942db8888e06943c5dde66ca0037dcff82a2a4ec1ad0ada9e0d2ee9d9823893", size = 1987719, upload-time = "2026-05-18T17:05:02.757Z" }, + { url = "https://files.pythonhosted.org/packages/c6/34/7db312c5e5783d6e76cffd9d5ac8972a32badae4c6e3288dac0eed8d3bed/black-26.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c93167a74d3a75dfaa38a5c7cca015537d5820dd7f17d63267d674a61cae90", size = 1810083, upload-time = "2026-05-18T17:05:04.302Z" }, + { url = "https://files.pythonhosted.org/packages/33/e2/e0101e73c2c8727634e2efcb35e2b34bd23ad70dfa673789f5773a591b21/black-26.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f2cd76d069cc54c71f10360744ba8983fbb616903b4304a85b734915c8e1b4", size = 1860633, upload-time = "2026-05-18T17:05:06.391Z" }, + { url = "https://files.pythonhosted.org/packages/b0/4c/e15c0c5b23cf3651035fe5addcce90e283af3548a3f91bb03d81b83106ab/black-26.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:87ed5c6f450580a2f6790bc7cbfb016dfc73bc750249762268a3695361315eef", size = 1477886, upload-time = "2026-05-18T17:05:07.96Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3f/59d43ade98d2ce5c8dc34a4e46cbecd177e6d55d7d4092969c6003ccc655/black-26.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:58b4bd92cf88aacf83d88479c8f9caee044b1ec55f2451a337354a7ea2590a22", size = 1277111, upload-time = "2026-05-18T17:05:09.473Z" }, + { url = "https://files.pythonhosted.org/packages/4b/96/3c3e09f09f44a37aac36b178a279cd19aa7001bd796187a7b162a294c81f/black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c", size = 1970639, upload-time = "2026-05-18T17:05:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/83/ea/5ad117b9ee3ecd933c712bcbae610006e5b7cc9f41c526cd7ed3b6c4124c/black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7", size = 1792130, upload-time = "2026-05-18T17:05:12.983Z" }, + { url = "https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59", size = 1846134, upload-time = "2026-05-18T17:05:14.506Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5b/0b39b3a5917f0657ac014ad2edb58c139553a478adfe7f817abf1622ff6e/black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3", size = 1478883, upload-time = "2026-05-18T17:05:16.542Z" }, + { url = "https://files.pythonhosted.org/packages/4c/48/dc222692e0f95030db1bbfb6c857e76858bad09058221ea7aae815255327/black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe", size = 1277776, upload-time = "2026-05-18T17:05:18.029Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/7744b906703228264ef73bdd534df88ec1ef3de45c4e78f6d31b9e32d0c9/black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8", size = 2012518, upload-time = "2026-05-18T17:05:20.108Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c0/c5a3b1636dfd09c42534f2b3cf33506814f6d3e066fb0879ffa16c1ae860/black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217", size = 1816016, upload-time = "2026-05-18T17:05:21.84Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d", size = 1884150, upload-time = "2026-05-18T17:05:23.546Z" }, + { url = "https://files.pythonhosted.org/packages/b3/33/dafc5808c2af43672912111d7c3354af1615f7e2be3bed7a878461abbe4d/black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264", size = 1486825, upload-time = "2026-05-18T17:05:25.004Z" }, + { url = "https://files.pythonhosted.org/packages/82/14/b965ee6ad2a311f28bdbf692def3ee9848d2ae289dab28b27657fcee3e78/black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418", size = 1288646, upload-time = "2026-05-18T17:05:26.477Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5c/c384363980e11e25ca6b93205949bb331fbf35f4e0dbec376dfa6326cec8/black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3", size = 2009020, upload-time = "2026-05-18T17:05:28.132Z" }, + { url = "https://files.pythonhosted.org/packages/0b/df/9f31c5e0babbfed77d505fc5d120beb98b21b33feaeded3924ea941fe360/black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0", size = 1813335, upload-time = "2026-05-18T17:05:31.266Z" }, + { url = "https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294", size = 1881614, upload-time = "2026-05-18T17:05:32.718Z" }, + { url = "https://files.pythonhosted.org/packages/49/ad/b4e0d9365ba8ac34f6bbab62a4b1b2dd5d618fac3fa1b8db968c844201b5/black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a", size = 1488925, upload-time = "2026-05-18T17:05:34.259Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4b/652b859bf5df88a751c30451b09338f7fd26a77d1271c666992f836b7711/black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52", size = 1289883, upload-time = "2026-05-18T17:05:36.019Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/a8da8eb208c51c7f4ce74609a45d0dcc6d8a2141e45e81ee5289d1bb0d59/black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168", size = 2004800, upload-time = "2026-05-18T17:05:38.182Z" }, + { url = "https://files.pythonhosted.org/packages/11/8a/a479296a19e383b70a725882a6cf3d786540601ff03cabbaaf1cce864c5a/black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3", size = 1815576, upload-time = "2026-05-18T17:05:40.309Z" }, + { url = "https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18", size = 1877927, upload-time = "2026-05-18T17:05:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/66/76/302e313964bcff7e28df329d39f84f5270095730d85ff0acc260610a0d82/black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50", size = 1511860, upload-time = "2026-05-18T17:05:43.943Z" }, + { url = "https://files.pythonhosted.org/packages/27/4e/a3827e35e0e567f9f9ee59e2a0ab979267dca98718f25547ca8c6733afd4/black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae", size = 1316632, upload-time = "2026-05-18T17:05:45.521Z" }, + { url = "https://files.pythonhosted.org/packages/94/51/f975cae76d44274cc2868dc9040ac5d58d464784610234455b4e7b19c6ef/black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2", size = 213693, upload-time = "2026-05-18T16:53:33.964Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/d2/2cde336b375f55c76ca670f0be3978cc048e31e24f3b4d7ce8473150a388/cffi-2.1.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be", size = 183779, upload-time = "2026-08-03T21:19:15.602Z" }, + { url = "https://files.pythonhosted.org/packages/94/1a/4b2f7c92293ba05cbd4a9a1b28faaf0326272d9488e6354657571c48a7aa/cffi-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b", size = 184178, upload-time = "2026-08-03T21:19:16.67Z" }, + { url = "https://files.pythonhosted.org/packages/17/0b/ba385d8ccedf926c3cd06e8e2f327027da5afe5f0eb30f1f7bc43ac55125/cffi-2.1.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004", size = 211037, upload-time = "2026-08-03T21:19:17.705Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b9/0f2e58b2cefa33255bff36935d42b13180fe559bba82596540eb404bde7d/cffi-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9", size = 218652, upload-time = "2026-08-03T21:19:18.735Z" }, + { url = "https://files.pythonhosted.org/packages/37/15/180e0dab27b9312c7479003d14c9e547634b7dcb934e2cc4650e1b131a7a/cffi-2.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98", size = 205422, upload-time = "2026-08-03T21:19:19.96Z" }, + { url = "https://files.pythonhosted.org/packages/18/d4/03026f0c850cbbaa9030750490225b4a7f4d524ea4df72c3cc740a90f4ef/cffi-2.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9", size = 205444, upload-time = "2026-08-03T21:19:21.246Z" }, + { url = "https://files.pythonhosted.org/packages/75/77/60bebf6f818bec84210ac5b6979ce4eeadce6fbbaabc9c7ab23e506d1ce5/cffi-2.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6", size = 218742, upload-time = "2026-08-03T21:19:22.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ae/679bf47e73fd77b352171727f07de559a003f14de5d02b904a6ec1fa73ca/cffi-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf", size = 221054, upload-time = "2026-08-03T21:19:23.694Z" }, + { url = "https://files.pythonhosted.org/packages/09/b8/eefc0e06913b70aa153bf74c946094a18f58fd4aff11b7f372bfdfdca050/cffi-2.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659", size = 213489, upload-time = "2026-08-03T21:19:24.922Z" }, + { url = "https://files.pythonhosted.org/packages/6f/13/4e56852824a03cdf68523a35686f1c28eacd4bd30a7b0a78e682e6e6e1d3/cffi-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9", size = 220241, upload-time = "2026-08-03T21:19:26.214Z" }, + { url = "https://files.pythonhosted.org/packages/99/7f/040f9e163e4acac3ee3d85b02d00b2576e7ca980d8785f0a3a5f1a9bf7f5/cffi-2.1.1-cp310-cp310-win32.whl", hash = "sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41", size = 174578, upload-time = "2026-08-03T21:19:27.338Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0b/644a2ec1a4eaba49c2939410bb1eb1d25b09d6d0582f5d2f95c537043725/cffi-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1", size = 185082, upload-time = "2026-08-03T21:19:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/aa/554e2614f38fc34c58ff1d0911ae8535ad2516440d5482d76fe59f1088b0/charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa", size = 369072, upload-time = "2026-08-15T08:16:22.964Z" }, + { url = "https://files.pythonhosted.org/packages/03/6d/439231dfc3ccfa6f8c06477b7da2219cbd41a2de3d49084df8ec7b5100f2/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda", size = 251142, upload-time = "2026-08-15T08:16:24.81Z" }, + { url = "https://files.pythonhosted.org/packages/55/53/7d819bd23a00ef45039146fa2cce1daa2f0771e758c5653ee1f6edac91ed/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45", size = 240714, upload-time = "2026-08-15T08:16:26.392Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2c/45847198c16f4b38090cc7423b2b6a9008e438704d8ab413211832498d31/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab", size = 279637, upload-time = "2026-08-15T08:16:27.961Z" }, + { url = "https://files.pythonhosted.org/packages/69/2b/d8be3523ddf9f0b0f3e56d1359034aa10653a4d11564c697f802b4775766/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a", size = 276543, upload-time = "2026-08-15T08:16:29.399Z" }, + { url = "https://files.pythonhosted.org/packages/32/cd/4f564b8f132de25db594efc706897069f016790cea63a5669c9df2675f64/charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3", size = 261644, upload-time = "2026-08-15T08:16:30.722Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e3/38b975422534a608f98c360e79c2f07c763d66dd4272300d45fb1fee54b0/charset_normalizer-3.5.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb", size = 259609, upload-time = "2026-08-15T08:16:32.248Z" }, + { url = "https://files.pythonhosted.org/packages/87/bd/fbc24d825c66f1c74f6ccdea3742c3d8354a4888e86d1315a197fee69061/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f", size = 252457, upload-time = "2026-08-15T08:16:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2d/918d0e98a0e679469ed05bb2d90c2088b4d315bb612969d8499f76fb5210/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea", size = 242240, upload-time = "2026-08-15T08:16:35.396Z" }, + { url = "https://files.pythonhosted.org/packages/20/c8/c36f6e0b2dfec351bd38cbc05362697e58bcd073d7dbd95154290c9714ce/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f", size = 280308, upload-time = "2026-08-15T08:16:36.825Z" }, + { url = "https://files.pythonhosted.org/packages/ca/7b/311b3e02e8c4092400c449c850a760d8c45d900983c83a70cc07208c551d/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182", size = 258679, upload-time = "2026-08-15T08:16:38.22Z" }, + { url = "https://files.pythonhosted.org/packages/b9/90/082cc45599c392f28c036a497f49e0634041a785fc3849c80ccf396d096f/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa", size = 277221, upload-time = "2026-08-15T08:16:39.62Z" }, + { url = "https://files.pythonhosted.org/packages/58/ad/b9aecf38d805cbcf84fa94f14c5d972a16561e20296a11dc799a5dcf3763/charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818", size = 263799, upload-time = "2026-08-15T08:16:40.885Z" }, + { url = "https://files.pythonhosted.org/packages/b7/23/b38a20598d5a825f85d9d7636860e56ff0db1479f86497a6e485aa9326f7/charset_normalizer-3.5.1-cp310-cp310-win32.whl", hash = "sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20", size = 182037, upload-time = "2026-08-15T08:16:42.198Z" }, + { url = "https://files.pythonhosted.org/packages/d2/21/83fffb77864408b8bf0fe1ca603926401d6f8775a8e150b39aacc9958f8a/charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d", size = 206030, upload-time = "2026-08-15T08:16:43.787Z" }, + { url = "https://files.pythonhosted.org/packages/86/2e/b93135b5034b1157fb29554b0d06d4844ce62282f0e0a14036f93d7ee2e7/charset_normalizer-3.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5", size = 185092, upload-time = "2026-08-15T08:16:45.177Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30", size = 363585, upload-time = "2026-08-15T08:16:46.646Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fa/6a7e2a7c4b5451912b8c417732df79574354443592a88d616de03da66ae5/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488", size = 251189, upload-time = "2026-08-15T08:16:48.287Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c8/ab42b07cfd82e919f427fcfaa7c41abae8242833ad1aad66d42bae40b669/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22", size = 239724, upload-time = "2026-08-15T08:16:49.67Z" }, + { url = "https://files.pythonhosted.org/packages/e7/80/b9348b5d3041209f98b4cdad7655766369233f1d533f4f4f7558e9717bec/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731", size = 280078, upload-time = "2026-08-15T08:16:51.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/38/083a24028304bc85bb9e376fed801178423dcbb67495f73b6ea0624e1894/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c", size = 276650, upload-time = "2026-08-15T08:16:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/0d/35/731ac04aa0a097fc1c97f0994c375bdb230c6c96619db794208fe664e9ce/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8", size = 262325, upload-time = "2026-08-15T08:16:54.085Z" }, + { url = "https://files.pythonhosted.org/packages/f5/28/c2028e7021fb89c6e56868ed0e387b8e9aa811abdd2ab3208d6578d2c930/charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486", size = 261140, upload-time = "2026-08-15T08:16:55.604Z" }, + { url = "https://files.pythonhosted.org/packages/28/f0/0c0ceec6d98b7daa62e361e418135d59685811d79ba11529aad5cdf15e84/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f", size = 252791, upload-time = "2026-08-15T08:16:57.103Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3e/48f4cd187b1c33189d86039e9cbe4f92c05454175504b44ff81806d4d1bf/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c", size = 240730, upload-time = "2026-08-15T08:16:58.418Z" }, + { url = "https://files.pythonhosted.org/packages/42/85/f9e22af69af67c54cce42be9455d9c81294f918b4ccc454db01f66efcac2/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18", size = 280791, upload-time = "2026-08-15T08:16:59.918Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4c/9044135f42127630b6fa742feb51256353f6ab87a78f2fdd1de3de955a7f/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5", size = 259598, upload-time = "2026-08-15T08:17:01.421Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ed/1dd7cfebb4e75812934c49ca3b79757d11948053f7937ab7070c151f3c55/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b", size = 278217, upload-time = "2026-08-15T08:17:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/bf/eb/239c84503cc9e3ba6eb34686a24bc66e84f3924efdd7e38e751a19f6bc10/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6", size = 263417, upload-time = "2026-08-15T08:17:04.216Z" }, + { url = "https://files.pythonhosted.org/packages/37/ab/4e4510e1e288478e2c8333131d1c1382382ba8cd2165053c79e39d1da961/charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b", size = 181774, upload-time = "2026-08-15T08:17:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/32f0ccea59e8612057c61d6fd22ef2cb63cca93c9fe594094919696ac170/charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9", size = 206653, upload-time = "2026-08-15T08:17:07.075Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/b65c433fc521e58b5f54293982a5e51c05cb5f2dd3f1c7a6acb65b75324e/charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10", size = 185630, upload-time = "2026-08-15T08:17:08.502Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, + { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, + { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, + { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, + { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, + { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, + { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, + { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, + { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, + { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, + { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, + { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, + { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, + { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, + { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.15.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/c3/4f2195f512fb172aa425a8803a874b2baa9ba7f80ff7b6080998761fc701/coverage-7.15.4.tar.gz", hash = "sha256:0548198fff07ccf4faf469520bce1c2eceb1ce3e62891921138dec10907f9d00", size = 936952, upload-time = "2026-08-06T13:50:24.442Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/70/b052a519a584663a7bd052841a2debe11c8309ec49a7786340003f9c0a02/coverage-7.15.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0be6daac4cce6b8c8dc65886bae1b082ddbca4da8e5cbb5e15166acf253e264", size = 222245, upload-time = "2026-08-06T13:46:55.253Z" }, + { url = "https://files.pythonhosted.org/packages/67/39/892fa511aba3d1c3c8f49509a0ff5c71eab9f9f88d08e1a38da395821660/coverage-7.15.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b24e078eabcd6a9caa8b0713f9bc1eeb310bcc960a29d45a3b4fcd4b16d5b11d", size = 222762, upload-time = "2026-08-06T13:46:57.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/95/b2c724ce1e64bc23cb5b1d7eeffa9548dc3d811f7a6297b2d01607f4e062/coverage-7.15.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cfe20cc8cf8821d4fe54f89106cbf06aa27f37b5bbe3535568065a81539b4150", size = 249498, upload-time = "2026-08-06T13:46:59.012Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4f/b1973f67a1382af65b572a31ed692f8e490a6ad707191eab59148376832a/coverage-7.15.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83cf06cdd687677742caff1a9134833b7a8b75f111519d2cb0e0ba1b9a851e15", size = 251328, upload-time = "2026-08-06T13:47:00.764Z" }, + { url = "https://files.pythonhosted.org/packages/a2/09/03efa6722a132abcac91b32a60b64b240dd707c189c64eee697e48992c96/coverage-7.15.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fa4de68e2a752468ff14b4e15db7def689a71be759e826a31ccecbef69c5fd0", size = 253194, upload-time = "2026-08-06T13:47:01.976Z" }, + { url = "https://files.pythonhosted.org/packages/45/63/8299201d9c80fb65551ce99c966cab83d706ec4066ac999bef08201346de/coverage-7.15.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4dff9daa47d83120c3ec38ce921214242944a832aa04e903e50b5b7ebac8972d", size = 255106, upload-time = "2026-08-06T13:47:03.281Z" }, + { url = "https://files.pythonhosted.org/packages/ee/16/26fd8a691eb8d9a230128685f6d23309d7402cb030aa553001788c8c50fc/coverage-7.15.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a093fd37229918976f602aa07aa59e0973cde82186f220c8e197f721f5be0ce4", size = 250177, upload-time = "2026-08-06T13:47:04.713Z" }, + { url = "https://files.pythonhosted.org/packages/ad/ef/3c7556f33783a0a566e01443ca62bd8eb2cdfe22d271efdc02e08beb5654/coverage-7.15.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:317db01a2cb02552fd67e2b1cca77a4b528a2a277176c5e0bf2cecbb639d3f54", size = 251234, upload-time = "2026-08-06T13:47:06.104Z" }, + { url = "https://files.pythonhosted.org/packages/29/49/640a34043edac950738f36a3567832db5731d4cb2ed84b59cdb89c6bccbf/coverage-7.15.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8ee3838dcb656602c3b51e16aed9bfb0822f8d8d6d1c5966d32ec8c104be8e20", size = 249237, upload-time = "2026-08-06T13:47:07.467Z" }, + { url = "https://files.pythonhosted.org/packages/48/f5/e80f212669dd1be954ff844f883ef11a437ef4fd0089c6e0effc7b66b15d/coverage-7.15.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:425920379052ff1fe465268f3361d35804a241bbdd5a1b592c8cb60df4c52325", size = 253050, upload-time = "2026-08-06T13:47:08.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/e9/e5da0fe39f7fde1bca9edc09c60921bb5fdba4cec7db5bbad41ddfd8c230/coverage-7.15.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:69bb2400abef928e365ea7d4d9925169ada78ed2295546780002d4b65de3df88", size = 249508, upload-time = "2026-08-06T13:47:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/7d/38/41bf25774a0c8bba6b467f917cb1c9a0a2605e02dc93aad489fc7050ed59/coverage-7.15.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:81661f82d302484e3119e7c80c519c02fa9bcc2a6b339baf67d67bc89c580f04", size = 250110, upload-time = "2026-08-06T13:47:11.35Z" }, + { url = "https://files.pythonhosted.org/packages/89/6e/26f2e54b79acc29d179ee4272922625aedb69198c4eb61f7ff4f098f3c78/coverage-7.15.4-cp310-cp310-win32.whl", hash = "sha256:cb476b2e828ecb71cb6b6a928d23fd20a7ddb501188022dae1c37499149cc338", size = 224294, upload-time = "2026-08-06T13:47:12.753Z" }, + { url = "https://files.pythonhosted.org/packages/7b/06/9a318fc3ae040d4d6cb2d86101c6aa963fab20899a5c58666adf52cde0ca/coverage-7.15.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fc2130bf37df31852a8384f12601563a45a0024bccc6624f38355cba7a8d360", size = 224919, upload-time = "2026-08-06T13:47:14.17Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/edcec7d7a0b524aa8923e22925fde6fe50ce005a113dca13ae1581455c4c/coverage-7.15.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbac5abad70df71019988f83f26ac7092ff2642975def4429e98dc7585ef3490", size = 222367, upload-time = "2026-08-06T13:47:15.578Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c6/ab8de429e2e8548faf58ec7e1674a4ce00414b4113942d3fe87109cf0f68/coverage-7.15.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:357a173465c7ce028d07a95cc2b63b5bf59f50ecdd5ad75c5cbb78ada984048e", size = 222874, upload-time = "2026-08-06T13:47:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/3b7b49587e8a6b9af79b3eb468d443d6042b6d65b47aa26586846a0d6566/coverage-7.15.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21b803935e2efc3acebe9697197a294fccf5dc4e5382bd6369542ff7a7d2a1d7", size = 253287, upload-time = "2026-08-06T13:47:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/fb/65/ec03b743a2a229c72cc1eff3e57be9d3564e9c6b4d5aba2d70744a3fc0d8/coverage-7.15.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7a2b580774a4786c1053157c0165e04476e03ff293993d7c148eee784a94bae6", size = 255199, upload-time = "2026-08-06T13:47:19.765Z" }, + { url = "https://files.pythonhosted.org/packages/41/4b/5163729e4b6582d61975cfd3ccab45b4ec53e21cf156d9941cb025188468/coverage-7.15.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9464451c4efffe8d47ace5a540b10b0dc10e879066290f8600872b7f54a419d", size = 257308, upload-time = "2026-08-06T13:47:21.206Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/2167a0f08fb87d702fa423a48578a32865464b7c9e1db3911ad7812ab414/coverage-7.15.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de602f34123c2f4af1c1869c6dbbbd60da6d5983bf01937367295d135cccbfce", size = 259268, upload-time = "2026-08-06T13:47:22.503Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e5/68eebae3053dbd48508edea559c21b23fbdf3460784f91370c83a86a6acd/coverage-7.15.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6879ded16a27f3eeca19b900c147e81616e7054db451471a611b2755ee5249f7", size = 253392, upload-time = "2026-08-06T13:47:23.88Z" }, + { url = "https://files.pythonhosted.org/packages/1a/46/fd4ced40a2b691c774e515c9b69500bfa64c7960b67fcee4b2f6fad97fc3/coverage-7.15.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:986be58c3ab54aae8d3496a6225eea74f760fdbe739b38bd442c7e8d133aa53b", size = 255001, upload-time = "2026-08-06T13:47:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/ae2e5fa710bb6957a9aadeb9e3598d3b3e4af6587ce857ad42e8639a3f30/coverage-7.15.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6103639613fe6c1e989082948419bc77a2d26b6c825c99d7fad25f7d3d87afc", size = 253061, upload-time = "2026-08-06T13:47:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/d7/31/67ddc0365db2c6e93ac8580bc4bbc50f65273262f973f63ebcdbc15c0495/coverage-7.15.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3af93dddb5659276c63bc16ac6466ac2033a70ca816097bbc06345b8ccdf571", size = 256831, upload-time = "2026-08-06T13:47:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/82b8fd18f57fb13f12d98fe874995bb2c4f9f17be8aff762c426323fdb96/coverage-7.15.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b10075e5421d04265766a6d1dac809bbeb8a946fbb23c8f82c227409b2190719", size = 252781, upload-time = "2026-08-06T13:47:29.712Z" }, + { url = "https://files.pythonhosted.org/packages/0a/eb/6c74ef4dd12b252e573c49bdef9e2ac265bf3dbb79b8d7feb3266e084e9e/coverage-7.15.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a67a9f78b2942d87ba8ce3059c642164d2aedd65337377fb52fe9803656bc5c7", size = 253692, upload-time = "2026-08-06T13:47:31.192Z" }, + { url = "https://files.pythonhosted.org/packages/5a/66/eb9aed1c3fd2d36ee00eb173f434b14fa607fc056739c9a89ff4244010ea/coverage-7.15.4-cp311-cp311-win32.whl", hash = "sha256:69484d1aca26e322e1c3ce03f09341e84524ababad2d7202161738d83cc9f82e", size = 224461, upload-time = "2026-08-06T13:47:32.572Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6d/81fa4161dfb3ed9d74e40d58647eff83a56b7612e78352581280fce2f477/coverage-7.15.4-cp311-cp311-win_amd64.whl", hash = "sha256:63fd6fcd1dd6e158f7eb78606e72933b3f6d01e7b747f99c6c12d764307a0fdc", size = 224937, upload-time = "2026-08-06T13:47:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c1/d8dacf683c6cad3cf85ce68fd3774a6774ec402128822fdfaed920f11e6a/coverage-7.15.4-cp311-cp311-win_arm64.whl", hash = "sha256:ea82116c9893fa89e929b7f197ee5a1950a76e91cc5c85ba503fc02379d04890", size = 224479, upload-time = "2026-08-06T13:47:36.118Z" }, + { url = "https://files.pythonhosted.org/packages/1d/48/bc8d4ba7b37551a767bd863f15b3f80182b271c2f55975356f5f7dbe94c2/coverage-7.15.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4fedd1f7f428f9fe83b1ead5e7cc87a43427be31aadafbac3ac0636dc7abb22", size = 222543, upload-time = "2026-08-06T13:47:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/20/dd/88d6f83f1fffc974a3691a34a97951c5b12df7512a6782c5963883cbc058/coverage-7.15.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37e2f0cdf58e2e1fed4e4d5a8f8786ae2f7eb80b478016876667dc4a01d60a97", size = 222905, upload-time = "2026-08-06T13:47:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/bd/5c/54ee0d4748585bb0acab9891cd8d92f2d3593165b4e59fc9de113bfb3140/coverage-7.15.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb55d0e70bb15f2e81477613627286581414693d74ac7963c93a790dd453ca9d", size = 254407, upload-time = "2026-08-06T13:47:40.488Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/f0642a372f494bd0d7dad3b497083b910194a5f1c88be2c94fef707c3b59/coverage-7.15.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:899b9da30f3c6c336566e3707495bb23e8302d39d862f01fa78c48b99b9437e2", size = 257145, upload-time = "2026-08-06T13:47:41.931Z" }, + { url = "https://files.pythonhosted.org/packages/71/17/8b46d0ed68251016002ec972c8fc0119961a765d0984cafb8bf317c43758/coverage-7.15.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d15715e8c46552827e5e4f30a35575a2dbcad14454cf3284c54483946bd16931", size = 258257, upload-time = "2026-08-06T13:47:43.527Z" }, + { url = "https://files.pythonhosted.org/packages/30/b8/8498a0e72d0adbe15477dd07463d2b3bb2c9f6a4815e8589e50939e2c3ae/coverage-7.15.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:002a438859f7b430bc99afeaf01a6d187dad1d0dc907b64cdeffc632a5db8fd8", size = 260517, upload-time = "2026-08-06T13:47:45.121Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/7dce19c3bdb1e3dd63e769508216500edad81bd5f69a26d724e32aceaf78/coverage-7.15.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4193a04b518f7968f3099755f5509ee7cccc6dc2b92a6b14841934d22e222c9", size = 254785, upload-time = "2026-08-06T13:47:46.541Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b1/e1494703c675a2561723cd9b89f45c9168782c31280c611b1f767851e57c/coverage-7.15.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e98dcc55d572b38e69d117da7e8e8efb8500f1f5eaf81ecd460a63220790b839", size = 256176, upload-time = "2026-08-06T13:47:48.155Z" }, + { url = "https://files.pythonhosted.org/packages/73/76/a5629d270fb638a43a4b10466f51e2f49d532c1aa4da2913cbbb150bbe0a/coverage-7.15.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:af6c538498ce66c10d3fd541c2a8d5b03da5850355add34e6cba564210cb9e72", size = 254321, upload-time = "2026-08-06T13:47:49.757Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/9c44447218435d5766b911534f9d798144a5560f85e9a54ebe5f3f5d19f9/coverage-7.15.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d10025d96ea89fc2f73714dbc4cbd433fe012c1ac9e23f895d7728b238b6e52", size = 258390, upload-time = "2026-08-06T13:47:51.248Z" }, + { url = "https://files.pythonhosted.org/packages/de/36/c1e127616fb3fa18a9ff71e76c417f2fd7424332a4870015ac224ef4c039/coverage-7.15.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d802e1947603162ded419bff83ac7489820355d2b856dfb09206574e3a37ac0c", size = 253894, upload-time = "2026-08-06T13:47:52.816Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b9/fdb92c8ae7a8bb9b850cc253b7b3b9c8526f68130002048b5671cd510d09/coverage-7.15.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c2de40895718f91951b86712b4c5b694acaf9a0a49be13874896f599a1eed3f4", size = 255763, upload-time = "2026-08-06T13:47:54.296Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/a7d51b2587c7bdb76e71b0896d2565bf7d60436b5122fc83e511adb1f7cd/coverage-7.15.4-cp312-cp312-win32.whl", hash = "sha256:5c3431b2161279b7db5c2a1aa58ae02e5cb8c3c42d93a5094be3f5537bd5b11b", size = 224597, upload-time = "2026-08-06T13:47:56.074Z" }, + { url = "https://files.pythonhosted.org/packages/49/b9/5c5f80cc55f5acaaca6dee677626bfcec8c87204a7809b438b08e84f4571/coverage-7.15.4-cp312-cp312-win_amd64.whl", hash = "sha256:6befeab5fb2b51c958ca4ac6c5d141a1e8240f4f76e46350f1911963deda49cd", size = 225135, upload-time = "2026-08-06T13:47:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/47/e4/2a4561f89ff6bf7c925c287d0f2cce8bdf139c3a33735c87e3203401cf94/coverage-7.15.4-cp312-cp312-win_arm64.whl", hash = "sha256:67bc345491ab55b837277d76f5775d057e8c7f1ac44d890d8c2c82adde258c6f", size = 224515, upload-time = "2026-08-06T13:47:58.977Z" }, + { url = "https://files.pythonhosted.org/packages/f1/84/651a9310859673aaa3b3203f1aa1641ca60fcf2494683e1c9474c7172780/coverage-7.15.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c705b28feb2775dc82a25f1d473a370bc37ff93f5177f4e29ce2425f560f6921", size = 222565, upload-time = "2026-08-06T13:48:00.796Z" }, + { url = "https://files.pythonhosted.org/packages/82/f9/4dcf700137e8af550670f4d74d1b63828ce93e1e2b05e5f10710eb2ea987/coverage-7.15.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ff205ab5e3ecc670f6a4dd19d9cbf12ede53dd41cfc1e15716ec961ea6d314e", size = 222936, upload-time = "2026-08-06T13:48:02.391Z" }, + { url = "https://files.pythonhosted.org/packages/07/4a/612ff1e780b3fbfd637486f542f84adc5503873d8b5d279dec1ffeef9414/coverage-7.15.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5172326e861a38b48b48befca15e0f477a26b283337a33a739c8fed229934e36", size = 253926, upload-time = "2026-08-06T13:48:04.382Z" }, + { url = "https://files.pythonhosted.org/packages/b0/04/d1cff1c2ead4708a6a79c01d3736b6a25bd38a36678398f72a8dd33dfad9/coverage-7.15.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:12b59c90084e3234fb11184886bf4a40f4f16a8c8f867be2e087b81f8e8868d4", size = 256523, upload-time = "2026-08-06T13:48:05.996Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/d34e13fb4b293cbdb9665838cf5522077b8ad14ef947550631a4bced36a5/coverage-7.15.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349062d66f00b40fa2c1c222438bad25fabf755631b5d82937fe985c8008615c", size = 257759, upload-time = "2026-08-06T13:48:08.036Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/2c5fe7636fdb0732fe0f09f308a5b066864078b7fc61f6678e8478554f2e/coverage-7.15.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4256ced708e598e05209bc1a8ab4074e04a51dba4c62fb45926a229af675ace7", size = 259890, upload-time = "2026-08-06T13:48:09.834Z" }, + { url = "https://files.pythonhosted.org/packages/92/28/9689f0858dfff59c2ea688938ab9fa2925631235df67126a42b6c5c70ae1/coverage-7.15.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d80f974b20782d9612c8b4c9beeca867074c7cf4079d1419843fa25a26428b25", size = 254121, upload-time = "2026-08-06T13:48:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/785077c230c157243eb5aa9a26c3be260ecd02001bead54a3cada3df8e03/coverage-7.15.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e179f19bfe1d31f8eeeaa12990194d761c4f62f0759661000bca6cd8729f40b", size = 255891, upload-time = "2026-08-06T13:48:13.209Z" }, + { url = "https://files.pythonhosted.org/packages/d4/90/e20371b17b40f912f21305c2db2f30efa3de306f7320fc916804872c85a4/coverage-7.15.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8bc16bb47b7679670eceff71d78bfb7d6e5b143f6c2cd117487ec7c75e0d4b78", size = 253859, upload-time = "2026-08-06T13:48:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/05/49/25371987ee459a5f67c0427fb75c74f9358e65f2c71fe75bf41c1b6c5fcb/coverage-7.15.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1cd685005cd2c4200adfc14cf39a603b9320efab3f18a8f7f156d20c9cc3345f", size = 258011, upload-time = "2026-08-06T13:48:16.464Z" }, + { url = "https://files.pythonhosted.org/packages/30/6e/32e67467f6154bf4f1c4f63b05acc5097cba4237d45bbeeea446b52e8ac1/coverage-7.15.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:337399ad2c93b3acd2a937627dae8b3e86b66707cd3d3e856347999aadf1ef8d", size = 253676, upload-time = "2026-08-06T13:48:18.493Z" }, + { url = "https://files.pythonhosted.org/packages/03/c1/8b24192e89286399765155251f99ee9f070a9d637109018ac23d99b99f6f/coverage-7.15.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:96e257121228ec5cd2bb919276e94ac11074471bc37d68dbae0e8308cce15fff", size = 255453, upload-time = "2026-08-06T13:48:20.057Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/8b41ebdf67c87854e17c035336a90f1cfbad0c14c2a584301be6ff148718/coverage-7.15.4-cp313-cp313-win32.whl", hash = "sha256:c65a9e0dfc6143491879da4e13b5e30f8be192055de508d737fb14601edbd22c", size = 224605, upload-time = "2026-08-06T13:48:21.655Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e2/2946c7f0b42b152ecb21ff1bdad72e3d301e790c0c487e4a86e8c9f69347/coverage-7.15.4-cp313-cp313-win_amd64.whl", hash = "sha256:2ff8f5e9b8f7a94f0c11c45631eee103dbcb7d63274edd12c56efe1be690b3b4", size = 225148, upload-time = "2026-08-06T13:48:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/9e/83/3f4a69957f48ae7a0aba76c34743f88963d607b19e03f3f8e66f91cae0f9/coverage-7.15.4-cp313-cp313-win_arm64.whl", hash = "sha256:6e0a8a5083b096487d6cfced94cdd514d8f5db6f113610fb36c0620edb1028cf", size = 224536, upload-time = "2026-08-06T13:48:25.117Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ac/748cf29eeb2d6be34a3176ce26a4f49e38085ee08e8935f05f6f26ed7e0f/coverage-7.15.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:770e9325ab5ea6d56f77e59b29ecfe0ac20b57a82a601876f90494a4dda0386f", size = 222608, upload-time = "2026-08-06T13:48:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/0b/02/1abbf5c984677b0aa439cdacaccbf38d248939d8ef8fe1cc7a50d73edb77/coverage-7.15.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d12b33a3a50a1676b7784dc8d00a0c6d66a9f2add4b85a041c19b6a7e53ef23c", size = 222940, upload-time = "2026-08-06T13:48:28.432Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/ff8f9f53d9fcf586125b55d0b1f04ec1c14955fee41e83d5814bee141bb5/coverage-7.15.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5669c8378ebde86f5def7a25d29586631b58acc27ffde04399f678f3dfc6e082", size = 253985, upload-time = "2026-08-06T13:48:29.995Z" }, + { url = "https://files.pythonhosted.org/packages/a1/26/595759762e514e81be1d7d01ed03444303bcd152226a6529998d253f9201/coverage-7.15.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff97a14362eef486483ed44042ca2027ea257df6ff768e62358ee0c9776925ac", size = 256492, upload-time = "2026-08-06T13:48:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/b79aabac54d482be23b5fcdd4f4662bff24a78edc4ee29201726929936d5/coverage-7.15.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a325e815318638aed1655d9c06e6d7c2d3d46c09231ce988070428a8762d734", size = 257837, upload-time = "2026-08-06T13:48:33.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/0f/bf7f297885a5bf6fd71e5782404e0ff059ca09e8711ceb3a08544abde45a/coverage-7.15.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:474223409d88eb20d2d6a0d37ea60e8647a65a90cc008dc1f0410af5f64f1e0d", size = 260152, upload-time = "2026-08-06T13:48:34.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/f1/296744e854ff8368542343457414380465e9ceefb9192342feb9d3bc461d/coverage-7.15.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f2f62ae3cd189dd2e13aece758c57b3eecbd27be070dbd4cbd10936049e5dbf", size = 253978, upload-time = "2026-08-06T13:48:36.434Z" }, + { url = "https://files.pythonhosted.org/packages/55/b0/bbdb2e9057493e66220a2e149ca2d301ba0e3a58a83bd6b90de9826d16f3/coverage-7.15.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39ece820e29e0a2ba34b3ecb3be83c27e997eed8926f2ba6fe7ce7a0bda5843b", size = 255846, upload-time = "2026-08-06T13:48:38.317Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/38015b2b6d21258713bd17e76b59d033b191efb5703589cffd037dfbca20/coverage-7.15.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f21b56dcace11dfe013014201f577dcd592b2a9b72182d930361b47cf6f73f25", size = 253808, upload-time = "2026-08-06T13:48:39.993Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/0d515c1e60ee6fbfd1a0e79c07cd87d388a233b7adc37758735677203808/coverage-7.15.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:93a3a0b662abcc10c73a47cbc72cd60f63618d6989fb2d1286e50eacd974f303", size = 258081, upload-time = "2026-08-06T13:48:41.971Z" }, + { url = "https://files.pythonhosted.org/packages/91/71/04d9e7a3642146c6351338aef4ef85ab11dbbb54744c13245caba1aad1c0/coverage-7.15.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:141fae2cabf5569b782c10afc4c850ce10f618c13f8db54765cba99cc839da1f", size = 253624, upload-time = "2026-08-06T13:48:43.731Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a7/6c28b74c81ebff66987b0e2522ba5cffa3e90b0c33cb6a2eb264d4ee8cf1/coverage-7.15.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:81294c7e6ab30c5f74c0353b11b2fd6320e72d9bee6ac73b357caa8b916323a5", size = 255280, upload-time = "2026-08-06T13:48:45.58Z" }, + { url = "https://files.pythonhosted.org/packages/52/af/bc19996a7014b98d7bbb0f0939453c67074af65784a3aa16a789a07381fa/coverage-7.15.4-cp314-cp314-win32.whl", hash = "sha256:7bbd7d6418e0dab31a206af5203bd43ae36edb8e7fba1940b055d3e9249290d7", size = 224768, upload-time = "2026-08-06T13:48:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/219484e476d6e101ba0a444852579e05f5b75c37c611a42ed1190f73ef62/coverage-7.15.4-cp314-cp314-win_amd64.whl", hash = "sha256:f0204ed122758782970526057093f448051a39db9d810d4e344bb87a3546f425", size = 225259, upload-time = "2026-08-06T13:48:49.513Z" }, + { url = "https://files.pythonhosted.org/packages/b7/66/fa77daf4e383e5f776dac62c2409b6af81910ae6fe326bd5170dba74cc63/coverage-7.15.4-cp314-cp314-win_arm64.whl", hash = "sha256:9e71e7bc71c686a123347ae47a0de33a175e797a85bb57b791492adf4eec8ed8", size = 224684, upload-time = "2026-08-06T13:48:51.235Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/f03bf0ce362bbf3f785fa5219620d00778d4ac6fc9e407734828e9c672f6/coverage-7.15.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7c922735321eef3f87c280a3d39afff6b646723a2880b862cda4ac7a093b8aa8", size = 223338, upload-time = "2026-08-06T13:48:52.896Z" }, + { url = "https://files.pythonhosted.org/packages/0f/76/e77d0ae22501831cc9f92193e8a957a5caa1dd177f90a6d1d9b106242d92/coverage-7.15.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f41c17c4668a655ce96d090d8d5ffdc24ef64b5a02f9753884d08483e8a4a41a", size = 223609, upload-time = "2026-08-06T13:48:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/b1f089da8d38ac612fa2dd6dc7f4a1a7657d12f3e261d2996edd3a838d0b/coverage-7.15.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46822e9b6ff1c6a72b518c162c44a8f45a61a1d609c51084bf5b16c023c5037b", size = 264970, upload-time = "2026-08-06T13:48:56.403Z" }, + { url = "https://files.pythonhosted.org/packages/bf/31/e66d98d6e9c7fcc88470f1e234eaf6b1950dc0dfbf797f7282c1c861da24/coverage-7.15.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6f4955b73b5445271379a59e3792b0d978f42d4a01e0cf7a67d9c33a3bb0a5", size = 267088, upload-time = "2026-08-06T13:48:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/ae94eb2c541add426378408379f233591e069040b1e2cdb33df9498a0682/coverage-7.15.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3fc9e047706fb4a9abb54f719d3aa643e80e5bb3818182c40aee01ac0f0247ba", size = 269508, upload-time = "2026-08-06T13:49:00.42Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c7/88a10694a1c6a213569766aba9f25847b28155d4ac731b13226db216356d/coverage-7.15.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05e491d4f3165d62d4f5c8fd48dfeabf2ae8f42cbbd484319af33ea851b78982", size = 270629, upload-time = "2026-08-06T13:49:02.234Z" }, + { url = "https://files.pythonhosted.org/packages/b3/34/d8b8232e5e55169933b59aabcef2fedfa4b9d8897361bb80fcbda146505f/coverage-7.15.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:226c66e80ec0598d3b9b4874123df167ccca342aca8714f77cac6829688ee09c", size = 264043, upload-time = "2026-08-06T13:49:04.102Z" }, + { url = "https://files.pythonhosted.org/packages/7e/35/58b009dbf8c471c7224716478b9fed4a7e1af15320e1ed41660978504663/coverage-7.15.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac41cc14bebda0dbfb0628036b7f75706935c95bcc07fefe9a0f93614aa60a57", size = 266963, upload-time = "2026-08-06T13:49:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/57fbda1b42c892968273c56b6ee9dc0f1310850859230a507bc7873b1f65/coverage-7.15.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8af623e5cd92080acddd02b38f2f406a2c3a0893c38950b211890361448fbf26", size = 264569, upload-time = "2026-08-06T13:49:07.706Z" }, + { url = "https://files.pythonhosted.org/packages/98/8a/360e6e7f24d477b7e889703af0afa878d15b6d4d8d2a822b2835c169a879/coverage-7.15.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07545711d4f0f32852a18f18ad11f76f0109909d09e78b9008b4cfc67e829429", size = 268299, upload-time = "2026-08-06T13:49:09.587Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/6f701261aee21b6b5fa8f7872229406dc917e125069448292223bf213606/coverage-7.15.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a0865421cfdc53654b342d515e5a233187590882d20b95752150e53f65460017", size = 263413, upload-time = "2026-08-06T13:49:11.604Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/6f04036edc260ed425af83e834f627fad48941ce97b50bfe6edd8b6fa623/coverage-7.15.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:460115e32ee40566476db5048f9bec1e842c127ad8e6f8be745aad3ac9cbc839", size = 265725, upload-time = "2026-08-06T13:49:13.38Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ce/d19b5d4d5c49a7bfb925fd74310fee7d28bc99520ac3367ccbc54e662518/coverage-7.15.4-cp314-cp314t-win32.whl", hash = "sha256:cbde877ef9dd7baf272b9bfef2b8a25edd45d9170fc326951dd20eb480335e85", size = 225079, upload-time = "2026-08-06T13:49:15.265Z" }, + { url = "https://files.pythonhosted.org/packages/26/bb/7aa1b3b173faee0679037ca950bbbe1247273656697994d8d13f80f8d4b4/coverage-7.15.4-cp314-cp314t-win_amd64.whl", hash = "sha256:3da9e92d1c551fd7563833e9ade686efb0c4b7363ab7681a94283958c950bf5e", size = 225911, upload-time = "2026-08-06T13:49:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/81/1c/4ea9e47426d80038d9222db3c4534cb6021a74b237d3ff97ffd33b6600dd/coverage-7.15.4-cp314-cp314t-win_arm64.whl", hash = "sha256:3a54f5a0d85050c73a38f6793090ee83974531e67fe5e57a1da9bee11398aa5e", size = 225219, upload-time = "2026-08-06T13:49:19.293Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c4/dc5d2ac8f9142e7ec7de66e7bf0591db29d78955a040bd915870d9c0e657/coverage-7.15.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:2c9872e4d9dc5d3cf616bf4b382f5a00359305a5be666a3dd0b5cdb4e49597f9", size = 222604, upload-time = "2026-08-06T13:49:21.279Z" }, + { url = "https://files.pythonhosted.org/packages/70/39/33e63df81fe2ee100897451841c821467635923e58e37c6bd4b46dd8106c/coverage-7.15.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:e101dbb4b9b72f0cddd8cdc8c9c5b47f456766f5e0ac82dbfb75e5c55409b78a", size = 222944, upload-time = "2026-08-06T13:49:23.187Z" }, + { url = "https://files.pythonhosted.org/packages/99/1f/ef3ffb5557febc75a0d97aa459d0266d7d741110265121cc6d8539343d44/coverage-7.15.4-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7d1abebdb047729e852b9c77a00497dfbeb11eb3a117e037d7dbc3ac8e5f5c54", size = 254050, upload-time = "2026-08-06T13:49:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/6f/f5/1f0f6f77698c3601ca0ae7431e34b24c62ca2f06fecb23b73ed1f651d2be/coverage-7.15.4-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d28a4a899354d0ea6214cc59b4fa19eefbce1b9ff1688ab579acf49e894bd3fb", size = 256967, upload-time = "2026-08-06T13:49:26.896Z" }, + { url = "https://files.pythonhosted.org/packages/03/7a/2ed9bed79925f4367c83c77f66a89e5ca7229c288d2d19ad5f36d1ca0070/coverage-7.15.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffb3c2aacea411cc7e1d27712490c11108e2de1d39019ae32915493a59a8b9ed", size = 258587, upload-time = "2026-08-06T13:49:28.692Z" }, + { url = "https://files.pythonhosted.org/packages/45/8c/fa34044f71b7cc4ecb6da9c2408770959b0591fa9b5fb6fb6bca38f94298/coverage-7.15.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9447978a92f405d301123cfd39ff49895490efb769a758fe2734c7f631bf8ce", size = 260785, upload-time = "2026-08-06T13:49:30.472Z" }, + { url = "https://files.pythonhosted.org/packages/4f/54/d5727ce36b4524a7394ab9f5f1df378e1f23affcdab01037dc8655185cc7/coverage-7.15.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:050467a7983b8e2fe7dd41a78bb30c3e7f8c0b8cafda14b1c46f8b5e3cf2dd3c", size = 254545, upload-time = "2026-08-06T13:49:32.271Z" }, + { url = "https://files.pythonhosted.org/packages/dc/e6/6e3783e576719590194bdffb6dd6d85490801785b7c331e35a245d8cb8b5/coverage-7.15.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d003b7a5708ddad5c206c79607a6b92abb6fc13c57d99d8a4468cc03a2941ced", size = 256682, upload-time = "2026-08-06T13:49:34.089Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f2/bacdbde18b69ed2de424fcf64d9fb0a4913753d4f0eca8bae9daad69f4bd/coverage-7.15.4-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c38efe30fd74e5c19e9433f11fb1f5dc9c6522770971b7c6145bbaa413dc8800", size = 254560, upload-time = "2026-08-06T13:49:36.052Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a3/1fb927196e3477c1b48831169ab58ba08f451ba87ae311ff1de68b26a616/coverage-7.15.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:1f4f826d70f772ab8b0c052329580d7fe8b8abd191e4ce0c8f81aec6614665d3", size = 258792, upload-time = "2026-08-06T13:49:38.01Z" }, + { url = "https://files.pythonhosted.org/packages/41/58/30d4c149c69053de0edfe325614c1d28d508f62b1783e0e4a234d2e49136/coverage-7.15.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4a4bf917c9953f57c957be31c1cd504e3bd2f34d4a352b9d391a3025336f6768", size = 253968, upload-time = "2026-08-06T13:49:39.934Z" }, + { url = "https://files.pythonhosted.org/packages/89/e4/77f639371b918aad30dda4051f95404b43578f7f2e2f87ba73e02ed1ff37/coverage-7.15.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:1c9bf40ebef178a45192c75c4964760bb261b0e6ad725da5fc4c93f674f19753", size = 255893, upload-time = "2026-08-06T13:49:41.825Z" }, + { url = "https://files.pythonhosted.org/packages/5c/62/13be29b3ddab35f14c87967a4820a05106d2a3eccb4fa4ff550bf30b75e0/coverage-7.15.4-cp315-cp315-win32.whl", hash = "sha256:43619d04c3671792d2c4706ae8bf45e265dc87bbd4078189ef8b847ea1e74be2", size = 224768, upload-time = "2026-08-06T13:49:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/70/af0c6be0f964af6954f6b74bc109b0dbca02824696d2520fb17fe1ab06e3/coverage-7.15.4-cp315-cp315-win_amd64.whl", hash = "sha256:be619439dbcd31a2eab10b32de9fff62c26ed4bab69dc32b8363fdaaa0882809", size = 225242, upload-time = "2026-08-06T13:49:45.899Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2d/f3bd3aab899fc9efc18b53133ee68f5f98574ef480649b23e12962226387/coverage-7.15.4-cp315-cp315-win_arm64.whl", hash = "sha256:def597967dafc2e8d97c9097ea453c464e0bb8ed38f193a43070f10dc623bb6d", size = 224674, upload-time = "2026-08-06T13:49:48.322Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ca/f69251cd63eabc6438321aea22148754cce758a26bde07dd490e3fe7cfc5/coverage-7.15.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c7dbc748ac8a1e3e59a2b28bea47675e6e778081dbbf081bde0d75def2fcbe1d", size = 223333, upload-time = "2026-08-06T13:49:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/a7/a7/037b53b2885b0d8447064432491a4d5a1014cd9f97a594d53acd0c04541a/coverage-7.15.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:2413074a5ecbb61a01a7888fc72db0ca324d13588c5b38bc0dd8564cdcdfea26", size = 223630, upload-time = "2026-08-06T13:49:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/152b8a4779ae90da11bb24f7467df8a59f0be48a5c52acb856325ca48289/coverage-7.15.4-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4e6f6f632b7b2f714bf7a1346e8f97b650ee71f3c298aaad42a2ab60f0f07645", size = 264489, upload-time = "2026-08-06T13:49:54.52Z" }, + { url = "https://files.pythonhosted.org/packages/10/2d/84b4b9e0e1dd6528a51920ff7031f35b789382e467a28ec6a5a578cb8812/coverage-7.15.4-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8df457da2249d3c75ca2e5e835d59c725abfe92d27fdff6cd99eed85b51d5e9a", size = 267567, upload-time = "2026-08-06T13:49:56.721Z" }, + { url = "https://files.pythonhosted.org/packages/53/fc/ba01cc25299f9f8a2c8b02d3b28c53f3543d9fbfbe4e74fa2760b48f163e/coverage-7.15.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:050f66a08805acb5b8a23c6d4a517b1ecf82c08e81ed0e4bd727df065e5c6624", size = 270123, upload-time = "2026-08-06T13:49:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d0/db2647cbf40b14f8c308f94ff7bf89c06d564e59f396906edf50086ec788/coverage-7.15.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1587fb771d1ccceef708fdde1e5af8c7ed24b486b61d13a321acb7d8145390aa", size = 271107, upload-time = "2026-08-06T13:50:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4d2d17924552c458bb4f77dd631f0e3bc92fbbdf2d2d916cd4b33bbfd5b1/coverage-7.15.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b4f1c3a69ca580f3fbd6b2046915f536d7f586874f25c1bb23add2a3c88d50f", size = 264955, upload-time = "2026-08-06T13:50:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/ee/de/dc010c7a3691f396d93bbc26bfcafa1c2a3a351cd520470f15faf5795bd5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:ffb58d7eff5b7f6ecc6fa21d6288ab7f968a212cb67d682c269c09b9eba3b66f", size = 267949, upload-time = "2026-08-06T13:50:05.557Z" }, + { url = "https://files.pythonhosted.org/packages/78/ea/dc96a11375e83c045c2f7c61fb6918277cfe9401db7c0f7b1d111a84b2e5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d9df165544774574ee004b953023d1bebada1894a80b1052a43d798b0f676e67", size = 264421, upload-time = "2026-08-06T13:50:07.612Z" }, + { url = "https://files.pythonhosted.org/packages/c8/86/b77131a0f9503ce461cd577076147d7a9040f0c5dda772686f729e2cc9cb/coverage-7.15.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:f9de0a24a4079b53e523b5c5e2c5945ec251ab486652659955187cf255a259bc", size = 269121, upload-time = "2026-08-06T13:50:09.58Z" }, + { url = "https://files.pythonhosted.org/packages/24/24/944bc35007862955e7ebf05754e645419dcf5d7526c52735cfa2715e8ebf/coverage-7.15.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:150089274bdc9f940628552cb92844e0223c987f1902ab8efe9f45a2ec758d88", size = 264565, upload-time = "2026-08-06T13:50:11.722Z" }, + { url = "https://files.pythonhosted.org/packages/c7/cc/a3bb9f93e7e740659163e2ea584f8196ddcd2c456a5dbe15f6c50105fec1/coverage-7.15.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:a58a94fed5da6997d258e8f7668c1e195fbd04a691d781b7558f1e468f9e68bc", size = 266522, upload-time = "2026-08-06T13:50:13.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/e0e40f3560d878d888c580698ff5ad1179f5e1c3ac949684ef66b41a3817/coverage-7.15.4-cp315-cp315t-win32.whl", hash = "sha256:ebd5a6d8466ff30836572f3ba2cae8a5e8f85029b1c6d5e2ed338dc472a5166a", size = 225068, upload-time = "2026-08-06T13:50:15.825Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7e/37732ea80eebc30e976e4cdab15c190bc42d96959a42e38ddf6f8c60468f/coverage-7.15.4-cp315-cp315t-win_amd64.whl", hash = "sha256:288bde2a2d7ab6b6c2d7252fcde8b524387f2d970bdba9658fc6f8bbcaef0f9b", size = 225895, upload-time = "2026-08-06T13:50:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/c6/08/1e00f7923eaaba45fb3d51dd794125fc766304b1df264f3a9c6557bfb30e/coverage-7.15.4-cp315-cp315t-win_arm64.whl", hash = "sha256:68be5e1de60ff13c9095bbec0e5a7fa45b33b101752215b91345ea1f61c4a278", size = 225213, upload-time = "2026-08-06T13:50:19.981Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d9/e70c286c979378f061d8266e279b686ab0b0b688e1fe0af864684f23a77d/coverage-7.15.4-py3-none-any.whl", hash = "sha256:964730a1e9de9c0cf11be6a1a3c79ce419c34882842abd256086ba4698705e84", size = 214332, upload-time = "2026-08-06T13:50:22.192Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "cryptography" +version = "50.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/ad/5d6702db60b1e40b41ef513b6967ff5848f307d50f8449baf1634f5908f1/cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20", size = 880381, upload-time = "2026-08-25T19:45:45.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/19/797e2aaac9df6a66f1550f49979dc1b1e39ecd2077501c30efa81e8d5d67/cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986", size = 4010153, upload-time = "2026-08-25T19:44:03.155Z" }, + { url = "https://files.pythonhosted.org/packages/90/34/9ce9a62ed9dc82ca9fd6a34445b6904af56e5f38b3eae2ed32e49c36053d/cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f", size = 4723133, upload-time = "2026-08-25T19:44:05.461Z" }, + { url = "https://files.pythonhosted.org/packages/57/26/e6d4fc8512a51a5f9ee7bfdbfb853bce1197087df40c9ad993ad370b846f/cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef", size = 4712478, upload-time = "2026-08-25T19:44:07.375Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/d3cdc2815697aae84126cbd6a030ca7b6b452e28a88b501b836bd3aa7a86/cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8", size = 4730726, upload-time = "2026-08-25T19:44:09.294Z" }, + { url = "https://files.pythonhosted.org/packages/55/32/38c0d344b98c06d34b5df8946565a9c0d6dbf32c8e0730a7f05f0a3c6cab/cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45", size = 5353524, upload-time = "2026-08-25T19:44:11.96Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1b/82f0f0d8858d4432be1af790477edf62aef90324041aa07c57e57bef1af7/cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad", size = 4746720, upload-time = "2026-08-25T19:44:14.051Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/042ca458b8c64348c768284b5d23e69b92ed53d057ab779fee628564676d/cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49", size = 4361866, upload-time = "2026-08-25T19:44:16.167Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/e96c1ef71edef71057c7e3c3d982ce8fda554e0c52d0cc19c18845cde3eb/cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f", size = 4730028, upload-time = "2026-08-25T19:44:18.085Z" }, + { url = "https://files.pythonhosted.org/packages/e3/38/45abd72ef63f2e7d0754a6cacf97bd8b69512ace7f6130d24c39ece65da2/cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527", size = 5308405, upload-time = "2026-08-25T19:44:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/85/66/6ccca4722987ddedaa7fc9c3f4708af7431f5535666c174350830888c6b7/cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a", size = 4746230, upload-time = "2026-08-25T19:44:22.376Z" }, + { url = "https://files.pythonhosted.org/packages/13/0e/b1f92e013228111413f2e6743948b80bc24dfd3c1b87ba98ceea16f5df89/cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959", size = 4862596, upload-time = "2026-08-25T19:44:24.472Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/c3654cccc856e9d682817b04ac3ee79731cb09ca6f95996a95c904de2883/cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b", size = 5014082, upload-time = "2026-08-25T19:44:26.709Z" }, + { url = "https://files.pythonhosted.org/packages/42/8b/cb12b1b60c91b074ca6bf0fdd59aa8f10d8bc5f73af8faece86ef0421b37/cryptography-50.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648", size = 3842826, upload-time = "2026-08-25T19:44:28.784Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f0/424cb557d99aa86ac55da5e2add02e2882e44047b6264f93ade1b975a993/cryptography-50.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f", size = 3973525, upload-time = "2026-08-25T19:44:30.7Z" }, + { url = "https://files.pythonhosted.org/packages/4d/72/3a2711d967977ab5fc80b782837c7e8d1ac7445e764c20c381a265c57ef3/cryptography-50.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a", size = 4708817, upload-time = "2026-08-25T19:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f2/bb1f56e10815b789df0b409a69fa4992ff3d3fef9c72747f4a6b26fed38e/cryptography-50.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367", size = 4697300, upload-time = "2026-08-25T19:44:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/08/bd/ed5396be499ffcf8807a585bfe38b71a1fbdd1c342b4f9b6d0ef5162a946/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5", size = 4716039, upload-time = "2026-08-25T19:44:37.192Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6e/1cf405c5c8e8df7545378048e954792f00b7f2367af8863ce8b8f3e10607/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9", size = 5332388, upload-time = "2026-08-25T19:44:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/47/92/b4317e8c32c4f47b062f5398bd79106b220a124546f42be83bf32b761e2a/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0", size = 4730293, upload-time = "2026-08-25T19:44:41.298Z" }, + { url = "https://files.pythonhosted.org/packages/39/0d/a1e7633e2c744d0f2983320a27e924ef2264c79c56e1a58d5fb0a1cfd413/cryptography-50.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc", size = 4346031, upload-time = "2026-08-25T19:44:43.245Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/b215616f9bab3fc18510c78a4e5c9f362d77838503c363dc747c7d4f5c6f/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17", size = 4715344, upload-time = "2026-08-25T19:44:45.291Z" }, + { url = "https://files.pythonhosted.org/packages/b1/1b/ec3ebd31741d0e963612c4fe43caa39341b9b1e031e469820e42e4c83918/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6", size = 5287201, upload-time = "2026-08-25T19:44:47.297Z" }, + { url = "https://files.pythonhosted.org/packages/1a/01/0127d11a762b31a9ee0221894f540318761783f3fdc4bc5d057698caebd5/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3", size = 4730023, upload-time = "2026-08-25T19:44:49.435Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b9/e7425ebfb599241a0c1d7000f1b466c3062da66c19d9525031315dff7213/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6", size = 4847362, upload-time = "2026-08-25T19:44:51.94Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/60d0ddf4defa12e482c9d5e0f554384d6e8ab25341fd15f060028fd92e6a/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149", size = 4999247, upload-time = "2026-08-25T19:44:53.876Z" }, + { url = "https://files.pythonhosted.org/packages/4d/56/bc4f2b209e766c93372cfcd59b781a0b2b59700f62a969580415b699c2b2/cryptography-50.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf", size = 3825806, upload-time = "2026-08-25T19:44:56.209Z" }, + { url = "https://files.pythonhosted.org/packages/84/a9/ee16a903f13755e914d1eecc482fe64d1f10761c3960e5d8fa6837377aff/cryptography-50.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0", size = 4035307, upload-time = "2026-08-25T19:44:58.305Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a5/9ec7e81e8526c0d7a387d73386b2daed3f39e10d81a85930bd1b6bfba65c/cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23", size = 4751900, upload-time = "2026-08-25T19:45:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3c/0e77bd5ffcf078e9dd27d3074aad6c030d9b10d0bf69329d573c927a188c/cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733", size = 4738357, upload-time = "2026-08-25T19:45:02.786Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/3c5f80daa4dcd47323c7af8a2fcb90de27a33564d4fcac69846c0972691a/cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88", size = 4758474, upload-time = "2026-08-25T19:45:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2b/214cf0cf93db9628c3c20c896b229f327f6fb1b20e4b3743d8ad3f00af8b/cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054", size = 5375862, upload-time = "2026-08-25T19:45:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/d6/51/3f9701867a46b6c1740c9b52fc4d3bed6cbdcfedcc9b6e64305c07f39cff/cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5", size = 4772942, upload-time = "2026-08-25T19:45:09.396Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/13ea642e08e2544d0f5396122055f4820cfacb3203562197b5967125ea97/cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361", size = 4383347, upload-time = "2026-08-25T19:45:11.659Z" }, + { url = "https://files.pythonhosted.org/packages/84/d5/7d1fe1cb93f91c428093ff234e128c89ba8ea61a6f26aab406081f9b996e/cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71", size = 4758050, upload-time = "2026-08-25T19:45:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/dd/04/557fc5ead96a829e0bc812a3b9dc4a52a2f27e4f7f5950da7ff27653a805/cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80", size = 5332955, upload-time = "2026-08-25T19:45:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/eb/5d7124083e8d8cda8f5b348f544b71ad6f707ad63193758ef4d8e569da02/cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239", size = 4772694, upload-time = "2026-08-25T19:45:18.315Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/f1f955e0921dd2b6d22eae7e8d24a4c4b638d10735ffbf6a71f99eb0fcb8/cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558", size = 4888413, upload-time = "2026-08-25T19:45:20.4Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ab/89e2b798d2c3925f82e2bb72d5979f3d2f6da2dd22ef4a8cd8b70d920039/cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e", size = 5044355, upload-time = "2026-08-25T19:45:22.353Z" }, + { url = "https://files.pythonhosted.org/packages/99/89/87ef49ffe383ef4e147d27b7bf2088fb0b54ea409dd87b5a89442e5828a5/cryptography-50.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2", size = 3875429, upload-time = "2026-08-25T19:45:24.418Z" }, + { url = "https://files.pythonhosted.org/packages/c7/27/8d207af749c453ee17ea087340b3f2b4adef75aadd1d277b1b129bdda84e/cryptography-50.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94", size = 3974350, upload-time = "2026-08-25T19:45:26.551Z" }, + { url = "https://files.pythonhosted.org/packages/14/9a/6d3a4d7852e22d657438b7bf51f66102c7d71c0e1fafeec652281d0403e5/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f", size = 4698675, upload-time = "2026-08-25T19:45:28.658Z" }, + { url = "https://files.pythonhosted.org/packages/73/35/5c3717edf9e68a0550ce04e28eab493fe545eccd81742af03f6a75fe260b/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671", size = 4707410, upload-time = "2026-08-25T19:45:30.816Z" }, + { url = "https://files.pythonhosted.org/packages/1d/e0/e786934472e3ac4ecdecc7b129a0ca1a2a40dffdafcf2c3ea9d4397f8def/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e", size = 4698378, upload-time = "2026-08-25T19:45:33.043Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/5b3f53a0b74d122f023476ede40ba5d3e70d5cf475f73b899740d26a4fb2/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6", size = 4706889, upload-time = "2026-08-25T19:45:35.086Z" }, + { url = "https://files.pythonhosted.org/packages/71/44/711e61f7d014be825ef79b285b047292d1bf893732ac1bc030a351fb517f/cryptography-50.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b", size = 3824006, upload-time = "2026-08-25T19:45:37.281Z" }, +] + +[[package]] +name = "diffctx" +version = "1.15.0" +source = { editable = "." } +dependencies = [ + { name = "pathspec" }, +] + +[package.optional-dependencies] +dev = [ + { name = "black" }, + { name = "charset-normalizer" }, + { name = "coverage" }, + { name = "hypothesis" }, + { name = "import-linter" }, + { name = "mypy" }, + { name = "pre-commit" }, + { name = "pygit2", version = "1.18.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pygit2", version = "1.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "pytest-timeout" }, + { name = "pytest-xdist" }, + { name = "pyyaml" }, + { name = "radon" }, + { name = "ruff" }, + { name = "tiktoken" }, + { name = "tree-sitter" }, + { name = "tree-sitter-c" }, + { name = "tree-sitter-c-sharp" }, + { name = "tree-sitter-cpp" }, + { name = "tree-sitter-elixir" }, + { name = "tree-sitter-go" }, + { name = "tree-sitter-html" }, + { name = "tree-sitter-java" }, + { name = "tree-sitter-javascript" }, + { name = "tree-sitter-lua" }, + { name = "tree-sitter-php" }, + { name = "tree-sitter-python" }, + { name = "tree-sitter-ruby" }, + { name = "tree-sitter-rust" }, + { name = "tree-sitter-scala" }, + { name = "tree-sitter-swift" }, + { name = "tree-sitter-typescript" }, + { name = "types-pyyaml" }, +] +full = [ + { name = "charset-normalizer" }, + { name = "tree-sitter" }, + { name = "tree-sitter-c" }, + { name = "tree-sitter-c-sharp" }, + { name = "tree-sitter-cpp" }, + { name = "tree-sitter-elixir" }, + { name = "tree-sitter-go" }, + { name = "tree-sitter-html" }, + { name = "tree-sitter-java" }, + { name = "tree-sitter-javascript" }, + { name = "tree-sitter-lua" }, + { name = "tree-sitter-php" }, + { name = "tree-sitter-python" }, + { name = "tree-sitter-ruby" }, + { name = "tree-sitter-rust" }, + { name = "tree-sitter-scala" }, + { name = "tree-sitter-swift" }, + { name = "tree-sitter-typescript" }, +] +mcp = [ + { name = "anyio" }, + { name = "mcp" }, +] +tree-sitter = [ + { name = "tree-sitter" }, + { name = "tree-sitter-c" }, + { name = "tree-sitter-c-sharp" }, + { name = "tree-sitter-cpp" }, + { name = "tree-sitter-elixir" }, + { name = "tree-sitter-go" }, + { name = "tree-sitter-html" }, + { name = "tree-sitter-java" }, + { name = "tree-sitter-javascript" }, + { name = "tree-sitter-lua" }, + { name = "tree-sitter-php" }, + { name = "tree-sitter-python" }, + { name = "tree-sitter-ruby" }, + { name = "tree-sitter-rust" }, + { name = "tree-sitter-scala" }, + { name = "tree-sitter-swift" }, + { name = "tree-sitter-typescript" }, +] + +[package.metadata] +requires-dist = [ + { name = "anyio", marker = "extra == 'mcp'", specifier = ">=4.5,<5.0" }, + { name = "black", marker = "extra == 'dev'", specifier = ">=23.0.0,<27.0" }, + { name = "charset-normalizer", marker = "extra == 'dev'", specifier = ">=3.0,<4.0" }, + { name = "charset-normalizer", marker = "extra == 'full'", specifier = ">=3.0,<4.0" }, + { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.0,<8.0" }, + { name = "diffctx", extras = ["tree-sitter"], marker = "extra == 'dev'" }, + { name = "diffctx", extras = ["tree-sitter"], marker = "extra == 'full'" }, + { name = "hypothesis", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, + { name = "import-linter", marker = "extra == 'dev'", specifier = ">=2.0,<3.0" }, + { name = "mcp", marker = "extra == 'mcp'", specifier = ">=1.27,<2.0" }, + { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.0,<3.0" }, + { name = "pathspec", specifier = ">=0.11,<2.0" }, + { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=3.0,<5.0" }, + { name = "pygit2", marker = "extra == 'dev'", specifier = ">=1.12,<2.0" }, + { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0,<10.0" }, + { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.23,<2.0" }, + { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=3.0,<8.0" }, + { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.1,<3.0" }, + { name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.0,<4.0" }, + { name = "pyyaml", marker = "extra == 'dev'", specifier = ">=6.0.2,<8.0" }, + { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, + { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.4,<1.0" }, + { name = "tiktoken", marker = "extra == 'dev'", specifier = ">=0.9,<1.0" }, + { name = "tree-sitter", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-c", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-c-sharp", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-cpp", marker = "extra == 'tree-sitter'", specifier = ">=0.22,<1.0" }, + { name = "tree-sitter-elixir", marker = "extra == 'tree-sitter'", specifier = ">=0.3,<1.0" }, + { name = "tree-sitter-go", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-html", marker = "extra == 'tree-sitter'", specifier = ">=0.23,<1.0" }, + { name = "tree-sitter-java", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-javascript", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-lua", marker = "extra == 'tree-sitter'", specifier = ">=0.5,<1.0" }, + { name = "tree-sitter-php", marker = "extra == 'tree-sitter'", specifier = ">=0.24,<1.0" }, + { name = "tree-sitter-python", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-ruby", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-rust", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "tree-sitter-scala", marker = "extra == 'tree-sitter'", specifier = ">=0.24,<1.0" }, + { name = "tree-sitter-swift", marker = "extra == 'tree-sitter'", specifier = ">=0.0.1,<1.0" }, + { name = "tree-sitter-typescript", marker = "extra == 'tree-sitter'", specifier = ">=0.21,<1.0" }, + { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0,<7.0" }, +] +provides-extras = ["dev", "full", "mcp", "tree-sitter"] + +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "execnet" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/30/03b03951873a1a0ffc7e8ca0e10c15597b59e8d0e39260704cd2ea087bc4/filelock-3.32.4.tar.gz", hash = "sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30", size = 222126, upload-time = "2026-08-23T17:37:55.363Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/a4/9b63d595d748e3aff8812b65eacc1a2c4bd90b7c2012e08e72373b4835eb/filelock-3.32.4-py3-none-any.whl", hash = "sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd", size = 99864, upload-time = "2026-08-23T17:37:53.913Z" }, +] + +[[package]] +name = "grimp" +version = "3.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/73/ce58881177b003def779c87b5e10f396deef068933c97d6d206bd46d4cb7/grimp-3.15.tar.gz", hash = "sha256:91b57d4d801dc107ebfb5a7040d4777a152c579b5dc202426e1185e50931fe1e", size = 831734, upload-time = "2026-07-03T12:09:36.244Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/25/98a2c934f1cd57183379c742538c82c5b12be5019d347b7312c1858d24fe/grimp-3.15-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:daa46ccb1c6bb158bf1060f314a535136ae6f735a40014f9a42d9bd1a5d9dccb", size = 2141874, upload-time = "2026-07-03T12:08:46.926Z" }, + { url = "https://files.pythonhosted.org/packages/0a/40/a63edd7506e55d131274e70ac17ee39f367ceb30311ca5a11853bd23faaf/grimp-3.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f0ef0b5f44bdd1e859c3019e325dc5fb5360e922b69fd2d29fc0b1ff98867fd", size = 2098011, upload-time = "2026-07-03T12:08:40.25Z" }, + { url = "https://files.pythonhosted.org/packages/e9/92/33adfc894474384c3ce8c2e4d2829f3c854a8fb5ffd70b9e899c17cd4694/grimp-3.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57bc558882a643811442b7cb88976af497a2b24096d251f2000d1d5caffd4eec", size = 2262954, upload-time = "2026-07-03T12:07:31.57Z" }, + { url = "https://files.pythonhosted.org/packages/ce/1a/20191dece2ca62f0b57d623b43af745041df9bb52a7f541e4b68627c34c1/grimp-3.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4f4db552d3b4e62da6c223fb9b66eac7776db1369dd9b6795713dcb629ed26d", size = 2196652, upload-time = "2026-07-03T12:07:42.139Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fd/559f205a057aa9a997576d6431d6ac33a4ccc8c09c097e9b9ddb1cf4ba84/grimp-3.15-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ad1a9d1244aa4b6d60015d9f655dc91c113c5bedf3b454ee4aad51de3eae416", size = 2350845, upload-time = "2026-07-03T12:08:14.148Z" }, + { url = "https://files.pythonhosted.org/packages/7d/eb/c0824cea19d9d7890f62c28ce1589e5b7f1728e9e279771d61aefe80f280/grimp-3.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c0fa41d0bcb3f762f323d3d0ce2569c69f83053cd56be1270f3691feb8b3ba9", size = 2610304, upload-time = "2026-07-03T12:07:52.343Z" }, + { url = "https://files.pythonhosted.org/packages/01/ae/96d4ccfa7964af6662a6f90e3dd7d1fe5ee003699a292cbee03dabb4f64e/grimp-3.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2ca52d0505d6d7b59655e76f1dd4cc32b516ad7a388a1a2dcb0c583d0d8b6ff", size = 2331251, upload-time = "2026-07-03T12:08:03.246Z" }, + { url = "https://files.pythonhosted.org/packages/53/8a/4a948cf4e8781851f9a3d4de6e3bd00f82a5eb928a2144c89b3d9d449868/grimp-3.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bba4bac2fdf6cd30967fdf7c71f200736c0340d8b3636f0aec1e2c4ae813805", size = 2278246, upload-time = "2026-07-03T12:08:27.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/6e/f9674ca5dc379a564ab880796f11259b821e5322a82e5c66082838e631b1/grimp-3.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1661b1b4ad695c3126964635443699ed4cd994f240ea0758a5f3fc67a21b8111", size = 2440493, upload-time = "2026-07-03T12:08:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/79/77/4394d93f7b8068e26976bcc065d4c8271e507bee0b27406b7ba4d43850aa/grimp-3.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e66609ee48af343a909084838168f535f31fbe8cd23cc10518da4600139dfd3f", size = 2471830, upload-time = "2026-07-03T12:09:05.113Z" }, + { url = "https://files.pythonhosted.org/packages/a9/0d/f207c2aa33a1401113db4b8e5824cbaf318046354ca5890643484ef7c50f/grimp-3.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:659962cc29f90ec23d42313c5aac15928242e7ed3113ac130ee4b7fc0624cbb2", size = 2511431, upload-time = "2026-07-03T12:09:15.034Z" }, + { url = "https://files.pythonhosted.org/packages/78/d6/d6697cb2a49cb3e2a6be58b4fe5e0bc645cafc7c4818d66ce0e77d75495f/grimp-3.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a462896e003e5b4f71ef171901c0f6285137a8bbea7f5e01b887a8976acaf0d", size = 2520347, upload-time = "2026-07-03T12:09:25.574Z" }, + { url = "https://files.pythonhosted.org/packages/71/85/5dc1948b6f1f1750c0299282c3292580e92e56c6676360fc00e2bff5bfc5/grimp-3.15-cp310-cp310-win32.whl", hash = "sha256:a209cc5618cb7657fa9659eb45c23b6f47e9c8b4da682369069892c534e9e0b6", size = 1856818, upload-time = "2026-07-03T12:09:45.185Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7a/be9cae20a270c25d1dc23a08e178bc66ab0a0a70a830bdda068170e26894/grimp-3.15-cp310-cp310-win_amd64.whl", hash = "sha256:9e3af741f8136452a7c29373c717ca8877e492b8efdf3da232391e9dbbb5dbe3", size = 1988060, upload-time = "2026-07-03T12:09:37.491Z" }, + { url = "https://files.pythonhosted.org/packages/d4/06/dd37dd3e282e90856215ea406415ba0c18cb77cf3150ffa47bd1137c8daf/grimp-3.15-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cc467bdf890b26545989994c5f91d99fb2b911bbc09d48cebf906082fb2c01d1", size = 2140928, upload-time = "2026-07-03T12:08:48.764Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b0/9329b8df4916cd60a1b358e527fcb9239604a1eca88483deb68ab95d9d5a/grimp-3.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:571d62c2f2e264ed83a9b283b0c1e322902ea3af8a9ad20d9f7cc5be3049be25", size = 2097876, upload-time = "2026-07-03T12:08:41.571Z" }, + { url = "https://files.pythonhosted.org/packages/91/ff/4352eb0a6549faefeaae1514f2994f6d9148b12db10e49d94935109cd4cd/grimp-3.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c36369902389e080f708560621f29e2b64957a6bfa5afb06c13b74105039d6", size = 2262242, upload-time = "2026-07-03T12:07:33Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3a/a7ddecd677891070277f92e71bc41c10c423a3317eb412f9636b4cbb32e3/grimp-3.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44a3a576bb0c5d0754108f0b6cedbeaee66a123112c71a8f4796656c9e52c5cd", size = 2196892, upload-time = "2026-07-03T12:07:43.574Z" }, + { url = "https://files.pythonhosted.org/packages/27/e2/8a7502011e324902853df7daecc3d6d651464920aad93a1a7ad9bd833105/grimp-3.15-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b833af82a197371c0b0b69ec600413d9b50109fec2f8e1e1317b1c226a3e07", size = 2348919, upload-time = "2026-07-03T12:08:16.589Z" }, + { url = "https://files.pythonhosted.org/packages/93/55/0570ff9ea16c8280de2e84b52006dd588b208716e73794cb332c43d1eb72/grimp-3.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6167c3d6e30ac8ff0a32260edf51fad5c22ec77b04e85a8a0042c1ba78bf6846", size = 2609501, upload-time = "2026-07-03T12:07:53.841Z" }, + { url = "https://files.pythonhosted.org/packages/33/14/34482976316834848df5eb68ec2283c13f84bfab12b21b8c11e4f3442e77/grimp-3.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6c18582eb87e148da11ad6549ec006186460ed29959afb15e093c34696d0134", size = 2329567, upload-time = "2026-07-03T12:08:04.663Z" }, + { url = "https://files.pythonhosted.org/packages/78/1b/2803b1234cf5e663c00b9fb2318a93b8db3831942ff053276234fa6731ab/grimp-3.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c941ed53672f9d136f898bf41557062dc4ed4c4fd10c88e47499e7db1c436ec", size = 2277972, upload-time = "2026-07-03T12:08:29.175Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd25b4a61851db6ca82d4007e1981d9832dff7c34c7b02a975e0bf3da89f/grimp-3.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4d46417bd6fffa56814b1cf8ffe756fe761d8e5eb691f1d7aaa8a0aba37af05a", size = 2440215, upload-time = "2026-07-03T12:08:56.046Z" }, + { url = "https://files.pythonhosted.org/packages/7c/44/d065613d4cbdc108c33db5978351303cfcedfa2f6d55dcff432c722b3568/grimp-3.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1f39ca69733dc9cc2f4e7c6647ebbb9a85e1b615b6b808187b0fc6dc6f3a9354", size = 2471902, upload-time = "2026-07-03T12:09:06.502Z" }, + { url = "https://files.pythonhosted.org/packages/1c/01/1eb96d3b2f61d04a5bfe0502216e248cfa0dfe34697cf56ab74e762983d7/grimp-3.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dcbea03a4502291b6014530267a6447365557a7870524202034a9ceac4f26fdd", size = 2509411, upload-time = "2026-07-03T12:09:16.434Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/89a69f121848b2324403ace3e3487c0074bf1257507b743fbebd281d270f/grimp-3.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c88386fac08a96933387d4058ef246b191872f7bd75a01c8655b70c8d1a0433a", size = 2519817, upload-time = "2026-07-03T12:09:26.999Z" }, + { url = "https://files.pythonhosted.org/packages/6a/18/9916c71ad9039e74148d9d3b8da4b6cf87900290edc0e7be1a891c840b66/grimp-3.15-cp311-cp311-win32.whl", hash = "sha256:788e1f019052fd6b4dc24ed9892de4f0f24e8e845bd01d146ee549515f70a9bc", size = 1856929, upload-time = "2026-07-03T12:09:46.611Z" }, + { url = "https://files.pythonhosted.org/packages/71/9f/6b349a4aee939b52a244c87e49f584ecad7ca4db67aea70d2d49c7709c26/grimp-3.15-cp311-cp311-win_amd64.whl", hash = "sha256:bfe2d28a94eb97db739382c4d377c8c014020eb6cc1599bcf950c9a2a60fce9d", size = 1988289, upload-time = "2026-07-03T12:09:38.9Z" }, + { url = "https://files.pythonhosted.org/packages/44/66/621abde26d8ece0d34ba611ca94bc62bf8c9c4389760d8909b0d96964878/grimp-3.15-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:915ea140cf55107fd6825c3e9eae2c4fda18aa19b87e8eee05d510b4d44ab928", size = 2143914, upload-time = "2026-07-03T12:08:50.423Z" }, + { url = "https://files.pythonhosted.org/packages/c8/76/a27fff8de84dbf46db9d6da937fe772f04a0e21e057a4863fd30e6fcaa55/grimp-3.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ae2d4d958d871792a9686ad51845e9e1e0886e9db13ecc47a9475899f4b27db", size = 2089296, upload-time = "2026-07-03T12:08:42.802Z" }, + { url = "https://files.pythonhosted.org/packages/e1/3d/fe38a0881ce7e00ef8590745853bccff5d337a943dc0d1d0735b0eb605f9/grimp-3.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19a1039d50ed6a9b221f44b32c7b07cb43dda70971e892fe8149995c0e9c1840", size = 2254829, upload-time = "2026-07-03T12:07:34.365Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a2/ef18989048e8f0c92171eabb15dffe9cd72de6404b86e3a37553f7d16dd6/grimp-3.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b7b649f2a34278897237670b6650073c9ab0fc1abf56821301bda28cb5c4256", size = 2193553, upload-time = "2026-07-03T12:07:45.06Z" }, + { url = "https://files.pythonhosted.org/packages/85/22/82303539d21068021cc28c526be5e1b1cc0b7a61704c1663909497dd9b8a/grimp-3.15-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:020a8875c0cb67f407eb019b7be65b574d49071653f155c243f801aa87a1fd4d", size = 2345941, upload-time = "2026-07-03T12:08:18.082Z" }, + { url = "https://files.pythonhosted.org/packages/bd/20/3c66e7c814ba2b6b0cd230ca2445825c605f28242f4f3a658e5bb9adda73/grimp-3.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f0a0705cf9a10648c4aea71edde8fe3dfbf1cf05bd434ef38c813ad7c544886", size = 2604369, upload-time = "2026-07-03T12:07:55.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/2f642969950e096a67a43909ba66f33cb4750974e30c2c771e293aeb787c/grimp-3.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c36373cd0a2d4c9b53fabefbaa9edcc4c511ad2d335fb1296484f6ca550e4f82", size = 2326619, upload-time = "2026-07-03T12:08:05.931Z" }, + { url = "https://files.pythonhosted.org/packages/a1/99/98d39545e54e239a52a54d8e96752780778b11b5ebc78096dfa090f9d2ac/grimp-3.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:477ac0abcd12c697a0bd01b40875605f7f0db97332df6148e4d4057ee3ad199d", size = 2272955, upload-time = "2026-07-03T12:08:30.488Z" }, + { url = "https://files.pythonhosted.org/packages/d6/02/fabd5ae2b12276530f4bae038ffcf3a556ac2c9b9fa271f83fbeb4036a08/grimp-3.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:017e493fee9962d50db6f7a8b5d49ad2ae508484a06078d700adbef30f1ff1f0", size = 2431271, upload-time = "2026-07-03T12:08:57.606Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c8/fa3ec84df9c3ccc2b08177be41a48b76178e9e5773f4471f1caff4fc5c46/grimp-3.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e77982dd5b0977945034fa328f65cfb62ff589cb0da97a0f6042de78525c5c73", size = 2466937, upload-time = "2026-07-03T12:09:07.857Z" }, + { url = "https://files.pythonhosted.org/packages/0a/7e/52d3acd2bbd6cebdf2ee6546c334f50f6358c25ae58624ae63d2ec3ad30b/grimp-3.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d129a8c57b7a19a44e8da94caf38a02753f1c9953aaba8c1a4633747f097164f", size = 2504734, upload-time = "2026-07-03T12:09:17.998Z" }, + { url = "https://files.pythonhosted.org/packages/33/53/ad27750eb8b4a0c3ecb5ca7d78c7230f0f5e814515ed6f8986be527117ff/grimp-3.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba25002e92b1792f13391295a1f805d2e09781b846d92ec1a791ff9ed89298b6", size = 2514448, upload-time = "2026-07-03T12:09:28.401Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c0/8cc474a24198c1c2936269c5854be92af41787bd76d3190af584a9cebca7/grimp-3.15-cp312-cp312-win32.whl", hash = "sha256:232bf7a4c7536f62a99478eeb01de63c455261add35ee00c6ec9f04f280f853e", size = 1855806, upload-time = "2026-07-03T12:09:48.396Z" }, + { url = "https://files.pythonhosted.org/packages/91/11/e46139fd43dd5714fae93f09f1c858fb2dc83a575d5f8cb1daf8a15a261b/grimp-3.15-cp312-cp312-win_amd64.whl", hash = "sha256:13be2285e358a7687c0f3b798ac9d4819f275976ad8d651297966e5a75bfafb9", size = 1985556, upload-time = "2026-07-03T12:09:40.786Z" }, + { url = "https://files.pythonhosted.org/packages/1e/6a/3e0a0760cc509cd09764d128de78a1f329740306c74e42dba82c58a99118/grimp-3.15-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f19b957053d1c736aaa0015eed2d4855bb2511637c5360d32b3c5ea045904e7a", size = 2143197, upload-time = "2026-07-03T12:08:51.685Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2e/127cbce04a5603d382c6a2bbc1a19b6889be49d60b88864bcdb174c8926d/grimp-3.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6480472c2d1f7f6a903906c92e9897d4e3dee5d69ce3881f04368d4ec6d2dde", size = 2088342, upload-time = "2026-07-03T12:08:44.227Z" }, + { url = "https://files.pythonhosted.org/packages/b0/36/af9df683bf6c8711e0e9136876ca130f9971102d945ff3a36d0c45dae2ec/grimp-3.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c14b64dbf2e4397df2e35fa8aa7028533621ecf1f8ea7ec24bc296a9c695ea4", size = 2254509, upload-time = "2026-07-03T12:07:35.809Z" }, + { url = "https://files.pythonhosted.org/packages/02/f5/e712633b68ea14d04e7de84ede4f8ddbba763d5f2d29ae8d6af721f84870/grimp-3.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26364c2c9f7db88243365299b4d1c4d948b74304ff03c8a6e4f028147fed3b22", size = 2193831, upload-time = "2026-07-03T12:07:46.309Z" }, + { url = "https://files.pythonhosted.org/packages/13/74/151bdd73d6a60bd77d4b956f36d03dd558dd46a9b5ec8f5ad15921b503d7/grimp-3.15-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69331e1be693415596c6084342059b9ba3ecf1cfe2e3b1c761598dd2fe14d522", size = 2345289, upload-time = "2026-07-03T12:08:19.458Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b8/3fc950fa73b757cbc35f77542bd662f431b9a8f360e63196ded640771a33/grimp-3.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe397991c269868c2fb08114099b2aa4f1bc803d03fadaaf97e006019f9e5da2", size = 2604407, upload-time = "2026-07-03T12:07:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d8/98916b9dc0b89a3e89e0d714ce0872be859fff40ceee3e2cb6886b106eb4/grimp-3.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d556bd62664ee044c47cff64d737be132408064d4ba68ca9f756cb29b41cc2d", size = 2326769, upload-time = "2026-07-03T12:08:08.773Z" }, + { url = "https://files.pythonhosted.org/packages/63/51/39595c5857f609e976e0bba1f19c1f45182ee4d8d2ea5cdfab72841eafbc/grimp-3.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9061c5b6f01130ff8639c49c80176d29d921acc36741b2ae0b763a7668106082", size = 2272498, upload-time = "2026-07-03T12:08:32.03Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d8/a44cc9db500ae80c45425238ee44d9556796aa88b8c0649cfa613fb88d14/grimp-3.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a9d04c195f0c6da4476361560d3d206a6a784b9eb0da7156fc6974511337e2e3", size = 2431075, upload-time = "2026-07-03T12:08:58.935Z" }, + { url = "https://files.pythonhosted.org/packages/a9/41/544f197ddb44990789683c25740ffa72474a57f0b16bc6b4a544edf9a2a9/grimp-3.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:01fd68c74cfd08b110bfd338d77efaa470670530f7179e6977764f44cd74d5cc", size = 2467361, upload-time = "2026-07-03T12:09:09.275Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/8261018b9f1ab47fffbb7739d7af3f04c8b529555b7fb2ae8b742d42d3db/grimp-3.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bd1ddd428a124d6730bed49ea60fb2ca6c8e0640c8f5abe1d0f6fc27a92fd8bc", size = 2503500, upload-time = "2026-07-03T12:09:19.585Z" }, + { url = "https://files.pythonhosted.org/packages/db/d6/99a2421c4c0de9f203a7e246030b13b676766e62e48504883863942646fb/grimp-3.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:07e645e9d45ed43bb8ea8da5982c19eacf13ee685d8440e3dc280064c005599c", size = 2513834, upload-time = "2026-07-03T12:09:29.758Z" }, + { url = "https://files.pythonhosted.org/packages/62/a5/263729e23d64541cd99d36dbb592e29c1ecea803deb3bb5c0c463b43c2ec/grimp-3.15-cp313-cp313-win32.whl", hash = "sha256:473646e0a74a554b4ab071d7fcbf5f442eb8cf87561770dae269818636b8edf2", size = 1855743, upload-time = "2026-07-03T12:09:49.789Z" }, + { url = "https://files.pythonhosted.org/packages/1c/8c/a072bbea2e2e94da38f90bd8794037c90fb4eba389b49d01cdd2bb85e13c/grimp-3.15-cp313-cp313-win_amd64.whl", hash = "sha256:dbc2c15a1fbca2ff358f86cc90067176096dd73bec27d002515521b3125ba507", size = 1984546, upload-time = "2026-07-03T12:09:42.543Z" }, + { url = "https://files.pythonhosted.org/packages/d2/4f/311bd40c02d61eee0182cb8c9b6ded37d42bed9a334e5ba4dacbe1c4c997/grimp-3.15-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6db0b30683612be4571b6b6208e1b39b77faa54566c5ca4f086d64cc783e4864", size = 2144799, upload-time = "2026-07-03T12:08:53.215Z" }, + { url = "https://files.pythonhosted.org/packages/42/ce/86e941cc26bd3419b5e2abb8b48fa35b850e5508f14e033f3ce28bfce608/grimp-3.15-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e731a1f8a192a802e04d4018d6cce9f4a12ce48b6b73f43014bd4e0a5d04a8e9", size = 2090802, upload-time = "2026-07-03T12:08:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/6c/09/bcb4e380596e533ef9ebb3f164ad3cc113fde62318ca5af71a27886b1612/grimp-3.15-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb607ee3e16440fc59ec2b49eef1b6dbbe701af9e99990b6491e6f120bd60b5", size = 2255870, upload-time = "2026-07-03T12:07:37.207Z" }, + { url = "https://files.pythonhosted.org/packages/c3/84/361cebbd7b14ce15d93bfb65e2b0ff30287252ffa6ab0b7fe08e029eae6c/grimp-3.15-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0492b9f1120176146d81e51aa0691aa6c004cdf5192ab309a221f9b223dedfc", size = 2193359, upload-time = "2026-07-03T12:07:47.548Z" }, + { url = "https://files.pythonhosted.org/packages/5e/d6/c4dd785e149c3c66494822c8b46f0a36cbdf5a5400eeb2172e0a8b029d0f/grimp-3.15-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bb3dbb0471179e732400fdf31c8c8d0299c88d13dd3a3bbe77ce54fb3f1b545", size = 2346350, upload-time = "2026-07-03T12:08:20.653Z" }, + { url = "https://files.pythonhosted.org/packages/97/4b/470922cb9d0a4b0436bb298801f770c98c6953374ff84e545dd7a196aa66/grimp-3.15-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b578512dbaee7eba2900d8078eaf1f7f78aa7616c609b0849b8403012ffddda", size = 2604959, upload-time = "2026-07-03T12:07:58.924Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e1/061dd80f5f0abb3ac53b29ade25ffac3e464e6853e8ce31dc6c6a33a06a9/grimp-3.15-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a550a14cd2f8123fb06814b705f3af093fa1728b244f21ebcccc8d0da0f851", size = 2327185, upload-time = "2026-07-03T12:08:10.142Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a3/32281e7b5fcd5622f4666b36003b9931ca0e112f2955f09458f198a30f65/grimp-3.15-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db5ebb94ec356eaa5242145c993bc84c4b52d0d2c6980dfcd12b22d51c5b2c46", size = 2273241, upload-time = "2026-07-03T12:08:33.247Z" }, + { url = "https://files.pythonhosted.org/packages/15/4b/b4f6ae15484541decbe4f12cf39a4a769352cb06332e428cc8e64aed4a32/grimp-3.15-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e03331418d7fee746e2447ecf5296986e6f094ef15fd25125efad2328844edf7", size = 2433114, upload-time = "2026-07-03T12:09:00.351Z" }, + { url = "https://files.pythonhosted.org/packages/93/a2/7bdc628435a1e908aa53b351ce031a6134efd18245c4a5a4c28e1e6d19aa/grimp-3.15-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4cc91cb69e73e7899feb6ce73747f4dc092c2bfe2653f6cba69a398cd1dfc6ea", size = 2467235, upload-time = "2026-07-03T12:09:10.677Z" }, + { url = "https://files.pythonhosted.org/packages/5d/18/77853f5693d607d5f49c7e3cd58e482ef8362ea9cf86d0fcb108e4168195/grimp-3.15-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a848d5b4b656c1e3a28cce0d399f2790ecbeb2eeb78bb49896018614c87219f3", size = 2506552, upload-time = "2026-07-03T12:09:20.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bd/a094d7dd7115e8764e8069d5d3a44045c333b41d98a5746e99ec712b4b18/grimp-3.15-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:208ef56397cabfab52864b3d8a461fb5015a056fede1be4587e4453b13aa8c2f", size = 2514255, upload-time = "2026-07-03T12:09:31.383Z" }, + { url = "https://files.pythonhosted.org/packages/85/68/013c640df50968b5d25802a5f01b157514d4e0ccd48c37c63947610a0e05/grimp-3.15-cp314-cp314-win32.whl", hash = "sha256:74d32fae3d222888f6b61579998043579dd810ed948785896e552906cbfdfcb7", size = 1856182, upload-time = "2026-07-03T12:09:51.178Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0b/648a1d77dfc5c2fd24fbdca0a45ee1c24669d981d12652424f5c34e3352c/grimp-3.15-cp314-cp314-win_amd64.whl", hash = "sha256:6b36e179d485c797e7fa234803620af752039fa27a8c7e3182333d7c96041f70", size = 1985451, upload-time = "2026-07-03T12:09:43.731Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c6/fd88ea799d181c22ab47c6cb328e7be3e196c8395444af89fd8da401cf6b/grimp-3.15-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9107d1037ee6e250ab7a15e1b758e0af76c841c19838b3cc688885a0b3817b5", size = 2253182, upload-time = "2026-07-03T12:07:39.351Z" }, + { url = "https://files.pythonhosted.org/packages/da/d9/25377ba259772edfa97e35e265d89eb89b966a82652967c8479902741067/grimp-3.15-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b88975b2882edc55e8946640f7b36dfb83cce1303cff5f8528c3f4819d7fbb07", size = 2191822, upload-time = "2026-07-03T12:07:48.721Z" }, + { url = "https://files.pythonhosted.org/packages/23/64/cae8ca43e05aa5217ca2e17ffbda77e86cb215c1a9a03592c110c0162f27/grimp-3.15-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fe01a5393e415e3d99b22c7dc6c6a9cc1b633714707d1c6b56ecbaccc2132f5", size = 2344413, upload-time = "2026-07-03T12:08:21.976Z" }, + { url = "https://files.pythonhosted.org/packages/39/32/feea8fec71e62394013865314854ccb3d7bb54f226564fd267e6662f509a/grimp-3.15-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd4d70a0de010a9b452b59326a00574f7488dd1333d003df624114e5e00e877e", size = 2602856, upload-time = "2026-07-03T12:08:00.263Z" }, + { url = "https://files.pythonhosted.org/packages/63/ab/46ccdeb698398264d774273a9b8d9b013c8d23127d05371489b22dcf3ea5/grimp-3.15-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:204beed673ff43ab4ebe52ff4efd29b80025ec777136a62109afb69792d7fae0", size = 2326095, upload-time = "2026-07-03T12:08:11.432Z" }, + { url = "https://files.pythonhosted.org/packages/69/ae/f98c2c964a850ab80341d02576ef8681e75178f893ba2c73dc03e6563925/grimp-3.15-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1602be339f8a4d368d71758814e5505200cf665818eb0f9a2cc74d71ecc8cf1c", size = 2274375, upload-time = "2026-07-03T12:08:34.598Z" }, + { url = "https://files.pythonhosted.org/packages/bb/38/9355cdb28fab458fb8defca6406de303d78af617aa0d8c9ae5253b4e5a8b/grimp-3.15-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:077c27a1e6ff3baf23a8caaa1d74cbbac27024b069956dd6ca5fc3acd43ddb4b", size = 2430307, upload-time = "2026-07-03T12:09:02.447Z" }, + { url = "https://files.pythonhosted.org/packages/7f/06/edfa7f8064c1a3502fe4aba56c07bd122e94e329188939d52c02bd7e85b6/grimp-3.15-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:5516fc38899f4396eff68e6b1997310b4de2d0155e3fad9f545e666c993985b3", size = 2464014, upload-time = "2026-07-03T12:09:12.185Z" }, + { url = "https://files.pythonhosted.org/packages/ec/c2/153b5cc3106814504b4195c7d4c178d85732d35b8895185a02112b8f9a03/grimp-3.15-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:dbe8e14cc61af4eea8e7ed6f2108828101f57fe86273d5b61cff044b69e6c6b5", size = 2502010, upload-time = "2026-07-03T12:09:22.431Z" }, + { url = "https://files.pythonhosted.org/packages/e8/3f/ae4ba51cf484030e3d15b3304eb7ab9039fe91fb35ff5e90d60fde135bff/grimp-3.15-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1763b7b48ed6c9e6de838d0d64f19510a392235266cf2240c9be9cc25ca7c54b", size = 2514787, upload-time = "2026-07-03T12:09:33Z" }, + { url = "https://files.pythonhosted.org/packages/0f/5f/0fb2d2bc9fe6bce899947802c94531c24e581c715db19216b941c1b2422f/grimp-3.15-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:116c3a6dba61bd302919b82cb5d603f5977e321d80d7de3c7a1265357ab9dd66", size = 2345635, upload-time = "2026-07-03T12:08:23.406Z" }, + { url = "https://files.pythonhosted.org/packages/00/ac/05d859a62ed9282f43a0f0962da230c46a2eb3d3ecb5b39117b3b4888405/grimp-3.15-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcc2e5065d35047729e41a55c9c3eb99810cf322fe3b3e89fa126f306ce6b3b5", size = 2273647, upload-time = "2026-07-03T12:08:36.139Z" }, + { url = "https://files.pythonhosted.org/packages/6d/dd/f726316f54e29da4f24d545d6299e1ea0accfbbf52729077fd4a619de055/grimp-3.15-cp315-cp315t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b38327673df49203cff0ebcbbf078999a80f0b11bb654760059f6f00f56f64d6", size = 2344080, upload-time = "2026-07-03T12:08:25.044Z" }, + { url = "https://files.pythonhosted.org/packages/c1/56/523a8f969f0a0b0a8ce43fbe8bc7a04e90f52724efc85f3305f1e07ae626/grimp-3.15-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965b37dad2f73164a103381c9fd1255bb3b2f6021ca2f38ffe70dd00fdc0fc55", size = 2275041, upload-time = "2026-07-03T12:08:37.582Z" }, + { url = "https://files.pythonhosted.org/packages/8c/46/562e56ba1abecc40169aa40fbf62ba5dcda0f56d953b53eeeb5e43535fb2/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:391bca4c4f1c4dc58f10fadd8e4bba1ca1dbf848a5adb4e66907258135aa0b26", size = 2263708, upload-time = "2026-07-03T12:07:40.836Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6a/2fe608f847630675b06a4e635024771b897f4ea9d1c0d3063f83ed1b7fc8/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08f7e663a465b524c5c0e121e6dd759f282ce35f406bc95bd68deda63a604361", size = 2198790, upload-time = "2026-07-03T12:07:50.314Z" }, + { url = "https://files.pythonhosted.org/packages/31/49/8365239abbe735d8e103dc19f485e57383f8a435a0ae3b2ba7576e2d8bb7/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5625a037e9fc04c6371effb213efb827d225f5a64e04bff5f448adf180193da9", size = 2352309, upload-time = "2026-07-03T12:08:26.377Z" }, + { url = "https://files.pythonhosted.org/packages/5b/76/c1679a9eb0ac4ac2fc943fdcf47c1d59a200fd8daac3db6bd72c63e45cf9/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4651d29d4ee69bd5a1d9aa963ac73e420da1386f0a2263b8acbc0ae495fda12c", size = 2611854, upload-time = "2026-07-03T12:08:01.912Z" }, + { url = "https://files.pythonhosted.org/packages/8e/cf/56e47ded5188088ad0b9455cd74182c536a2f6fed29f1d4c0d7b20617b5d/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f73dcb7fb94b3a450dea3a95d63e179a715f315e2e0ff5b78aedf8b3dad8707c", size = 2331437, upload-time = "2026-07-03T12:08:12.758Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c8/47cb1dcf0819506915bb5a20dff70bddd518199808c67e1aba730a2fedbc/grimp-3.15-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:228e044bc458ee840ab20e1839efbecdecdd151d22ae3902a0f03aa94de772df", size = 2279755, upload-time = "2026-07-03T12:08:38.982Z" }, + { url = "https://files.pythonhosted.org/packages/38/90/6202e5fa8ffd3648b2fbcd1d6028c6224a278f557073cc3f8094f0a01cd5/grimp-3.15-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bbaa9053652d29733ff88277b554e716e5acc40b37d12841c972779196d2c0ef", size = 2441806, upload-time = "2026-07-03T12:09:03.85Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b6/2d82c6b6161169b0cb87ccb746e3a590c5a9fb54cb7c59d6c657ed731394/grimp-3.15-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:12fd9e675e6fcf633a5d14f6cbeee4b667a3d3307c91653ccc1a5aef03f53ec6", size = 2472941, upload-time = "2026-07-03T12:09:13.481Z" }, + { url = "https://files.pythonhosted.org/packages/b7/36/fb2906ed60288b236867829f9b3ced558a2725225ec0ed2354a7124a0474/grimp-3.15-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:0012653561d80b4e4972ac246deb569051a1fbf3880d620a9475e7159722bbab", size = 2513392, upload-time = "2026-07-03T12:09:24.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/d2/ec5f501d9623fe8eb2d517ab7528708b672dba51322a931515b58b659f6f/grimp-3.15-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e438ae00dfd554c6262e92c945ec233c5e311cc99fdb0d602c6063b4f5fc3d9c", size = 2522530, upload-time = "2026-07-03T12:09:34.518Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "hypothesis" +version = "6.165.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "sortedcontainers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/e2/0fad246d2b6330e1f78479bfc566b5c22be82aee8a865cde9a08f648487d/hypothesis-6.165.10.tar.gz", hash = "sha256:68b45e09834cd80523cb1eb274463073c7a9af4e4ef7cff34d9615f355572d32", size = 503703, upload-time = "2026-08-16T22:56:15.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/c1/9a9538e6d185baf5cc7f15bc3b76e08efbb3de4b3c782f234356449c0dd7/hypothesis-6.165.10-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f839d29d0cc12048cf073d88ca4fdf94d420bc2b8afd69641ff6d496422ccd4f", size = 783243, upload-time = "2026-08-16T22:55:44.058Z" }, + { url = "https://files.pythonhosted.org/packages/a1/30/b70d9d79e871a75cbdeccd9067f20ecdb9eb2a1dfa03c630be3ad13b8b30/hypothesis-6.165.10-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e10858f57ed0e74baa04393845f469fe8ad502c16ece4499bef7700c575611bd", size = 778815, upload-time = "2026-08-16T22:55:46.948Z" }, + { url = "https://files.pythonhosted.org/packages/db/52/6f0a9b7aab24b0635e2238f3fbddea5b54b17879ac813df42a3cc3384c5c/hypothesis-6.165.10-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76a7be86d986223b9f1bdb7e7cbcdb048649901fdb956c598ef73bdab1786cd5", size = 1108009, upload-time = "2026-08-16T22:54:53.082Z" }, + { url = "https://files.pythonhosted.org/packages/f6/06/8d0d4e11ff02350d09ec9f9e90af354158e59e16a8907ba5199a4ff2d7e8/hypothesis-6.165.10-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:717aea574e0e5edba2868aa66b1caae335d8f1ad3fb29f01dd6502953fa823a1", size = 1136596, upload-time = "2026-08-16T22:54:54.443Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/01a1e440f2e38dc1ccf5d597af5b8a0bee5f21b674c99c123b5554de9690/hypothesis-6.165.10-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4334058033e0214475f019e15492a50f3854fe8728cf51fe25c6191a2c3f8e52", size = 1135234, upload-time = "2026-08-16T22:55:08.911Z" }, + { url = "https://files.pythonhosted.org/packages/7d/18/8a26c24d3d9db20265f39df341ab265858c094e209571e3179cf237935f4/hypothesis-6.165.10-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2abb50cf1cf77d721de0a24c3f99d9c4ffdeb2cbd1e12aebb5a7a93e2b6b6d1f", size = 1157528, upload-time = "2026-08-16T22:56:02.159Z" }, + { url = "https://files.pythonhosted.org/packages/ea/8e/ce3c829b1937402d7944420ca26a05a0c8563e894dcff03d34ffa279d306/hypothesis-6.165.10-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:3de69aa8b924b400291a3cc42aaf78e6ab65c905a3e7e1a5dc39d95ef1b428cb", size = 1112870, upload-time = "2026-08-16T22:54:55.919Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1b/4c4926d6c9a2b5d7cc090cc1e91219d6796102aa2a2c4b8f961c939e60b5/hypothesis-6.165.10-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5841331c504e02d7c334591681cb8587cdd59dee7e149db6d3db8e3f9e9f02eb", size = 1149683, upload-time = "2026-08-16T22:55:30.567Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f9/df24eb28412f82465e2b7707f0ff1ec274d580bce389d4d9156617dc7bba/hypothesis-6.165.10-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2d0e0f8263d34dd8fa3b39eaa9a50bba56a8470b3dd9ebf6672d10840abe063e", size = 1283402, upload-time = "2026-08-16T22:54:18.054Z" }, + { url = "https://files.pythonhosted.org/packages/4d/07/c2b2a761300cf60b90ccebba4328175331e67d34f4fbd39429a7ddcdce49/hypothesis-6.165.10-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:0c4e6869817c3cfdf5a2b4d348497b95159bdecb3365be732c9b8570e36a4eef", size = 1409948, upload-time = "2026-08-16T22:54:22.343Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ec/1c2bf1acdd0e273d81f833f85caf0ae5423db68a783554992fca36e6c541/hypothesis-6.165.10-cp310-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:9f07ae36c3b093e13687a894e79fe69e98a94c0b67fef656c575247682218143", size = 1265023, upload-time = "2026-08-16T22:54:41.402Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a8/7f984908b7391160c7801b84e51ca8e4ba88c89e8d8811aa1aa7c03de73c/hypothesis-6.165.10-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:aff1f584c9538e8979cd180b1d70bf99bc16be19d4666414f49e5942b21a4f2c", size = 1282698, upload-time = "2026-08-16T22:56:06.998Z" }, + { url = "https://files.pythonhosted.org/packages/48/78/3a5d91c2d0250521736c42dfa2402b75049bc5fe2fb716c10bc84bb91ed1/hypothesis-6.165.10-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1f2c4db25fb8ec1a16a8dba580666337b8ffb1887c4cf1750cc954313897cef7", size = 1324816, upload-time = "2026-08-16T22:54:46.675Z" }, + { url = "https://files.pythonhosted.org/packages/6f/99/27450763853a034bca1574d3e0a315164b33ff49c3862df6872dda45e25e/hypothesis-6.165.10-cp310-abi3-win32.whl", hash = "sha256:b33dc30170a7402e03c180f2c5ef69dc077152f35b91621e9cebcde9c7d71746", size = 669039, upload-time = "2026-08-16T22:55:11.962Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fc/ff2988b72b5705ad9ca500444bf3f43e3c2f41edfa034bbfeb23b215791a/hypothesis-6.165.10-cp310-abi3-win_amd64.whl", hash = "sha256:e9f924aa610c0618445e1e8738c822c3190ce2a2699a0cb48ec3a351a96761f2", size = 675213, upload-time = "2026-08-16T22:55:01.697Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8b/821810d36f78d9d9421cd2c5d9d36983b45bb3575c3086276cc5c76f9f73/hypothesis-6.165.10-cp310-abi3-win_arm64.whl", hash = "sha256:1d305448e9bd8e2f4f3cea0eafd809efdaab4e998a0019bc615650c8463e42f1", size = 673537, upload-time = "2026-08-16T22:54:47.898Z" }, + { url = "https://files.pythonhosted.org/packages/26/61/5e89268ce03317fb9f82449a1b3efd9e599dee090288fd0cf7586c532fb1/hypothesis-6.165.10-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:73e6df02a6a62f8045b511c272f894d08e56d174504c793c9effcbc6778051a8", size = 783959, upload-time = "2026-08-16T22:55:29.078Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e9/f4e0832e81bb53b70cf1712e28c867db64245b32595b594217452e7dbd8d/hypothesis-6.165.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b20f44773a9ab84400465e318712d8c2ca16418d35b9f80aa27fdf2d690ad10", size = 779684, upload-time = "2026-08-16T22:54:57.698Z" }, + { url = "https://files.pythonhosted.org/packages/77/de/ea072d3359d5678771bed407f80439e8ac7ca905d1031b0372f61bf5746e/hypothesis-6.165.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb8c7d05ea27a093a92b250904095d71d924b6b44e5795a415c1b20c265f0c65", size = 1108540, upload-time = "2026-08-16T22:55:03.282Z" }, + { url = "https://files.pythonhosted.org/packages/28/56/e7c395cdaa3d6c28b944c1c3c516dee50d2b7b3aeafa31874b57009ca51f/hypothesis-6.165.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4dafd6d6ababfa3b14dd6e5f0378cb7c7d291895a31a40abcbb7cc74f396131", size = 1158089, upload-time = "2026-08-16T22:54:36.205Z" }, + { url = "https://files.pythonhosted.org/packages/b1/49/1c6d2c465b9c5fc3213f1be89be95ba53819ca0130248c484129ccfefb71/hypothesis-6.165.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa74636a49fc8077413ce8db3e85f1c4aff880788bb55bda56253118e036fe5b", size = 1284125, upload-time = "2026-08-16T22:54:37.727Z" }, + { url = "https://files.pythonhosted.org/packages/7d/bc/7caf5ac3d0173bd57bd2a5ab854ca49a3664a4309257be1452f81025cc24/hypothesis-6.165.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2b112768cfb67f2b683e53e58c1a33d27811aacf60c942b8eb74635e469a73f6", size = 1325082, upload-time = "2026-08-16T22:54:38.952Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/9d844330f570d6a4f127a683eab1e78c8263e6e72b16189f3534fa6bf6de/hypothesis-6.165.10-cp310-cp310-win_amd64.whl", hash = "sha256:56cb8c9055e50545fe6e3e5a560ec25a724673b2e4051f3c24d44e3ebc35dd72", size = 675082, upload-time = "2026-08-16T22:54:29.872Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c2/b9546ace11f241c9c02d389f258cb80c14447a8c885771c9f1f0bc1d85ca/hypothesis-6.165.10-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:592107a0faf6c9c3a63a8dbf13dfb1cbda1cf599b0bc11c953221b00204b9ce1", size = 783716, upload-time = "2026-08-16T22:55:36.624Z" }, + { url = "https://files.pythonhosted.org/packages/37/10/27c2fdd574fd798caf5e91eb51f7834b098f5d840ce733efb3fba79ef86e/hypothesis-6.165.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9180c362bde06fd05380298ded4e234fbc0d6ede0a864835bfd91c1e24283d5", size = 779507, upload-time = "2026-08-16T22:55:07.633Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/70bc23695f3783c4b0486b6cad47b08a20f791db4a3c1b25250add9659fa/hypothesis-6.165.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d623801ae3dcd97b77b983400ef3d48bf976648e4efff19929175322eaae074d", size = 1108406, upload-time = "2026-08-16T22:55:39.653Z" }, + { url = "https://files.pythonhosted.org/packages/71/4c/32e200bd7a352af4b7f4e3729aaa4cd002cb5fe8c4c6aef5599d0019f152/hypothesis-6.165.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f6236cfb90b7817bb1a6a087589ca4aa46d73170f0dd62963952ed5dadc589", size = 1157850, upload-time = "2026-08-16T22:55:24.394Z" }, + { url = "https://files.pythonhosted.org/packages/03/a5/8efc2a9a484822efc0d0da466f50094e0f2c068187faaf33831fc905873e/hypothesis-6.165.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad0764730e8e3421601c2cc7e1f054a9206c60ea0917165d8d9193dc453f34f1", size = 1283704, upload-time = "2026-08-16T22:54:27.279Z" }, + { url = "https://files.pythonhosted.org/packages/46/2a/90cc8d7463929c04786f29600de45f3227c12fa9bed1d5b7ce319b05e1c9/hypothesis-6.165.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:10d9a650a4666b0914831f769703d36140ed8039fd19bf9b71f615b8541eccf2", size = 1325077, upload-time = "2026-08-16T22:55:16.561Z" }, + { url = "https://files.pythonhosted.org/packages/82/ac/bc16faba4b42883e3d290bfaceff51e258b63fbbdf789bf9fe88df1ce537/hypothesis-6.165.10-cp311-cp311-win_amd64.whl", hash = "sha256:5671d2b2bf83bd4b6f02e55b32d432506eff5358c82f39b460a849ce19a2666e", size = 674920, upload-time = "2026-08-16T22:55:42.613Z" }, + { url = "https://files.pythonhosted.org/packages/e9/45/cde4f78afe2b9e29caecf38319eedc1deb76aebcacbdd128e03cbb2511c3/hypothesis-6.165.10-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:637445c1593a2a9d1024fda50082f07bb56baedda78d90a25f64b8111727ef94", size = 784835, upload-time = "2026-08-16T22:54:45.429Z" }, + { url = "https://files.pythonhosted.org/packages/7f/81/847f30b81cbfd07607296b3ce43067cf4f80799bd9244167f587de9c8081/hypothesis-6.165.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:713f4ce4e82c26b53031f139de959bc9e8b54d3995aa824b89bbdf8229df2a45", size = 776419, upload-time = "2026-08-16T22:55:33.633Z" }, + { url = "https://files.pythonhosted.org/packages/04/66/4c71c5be7a49d84b8c3a9278c1807c4c81181ab5474beb27df9d4c40dc0e/hypothesis-6.165.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9ff356e97e3ab09db07c8b675efa67340103874a0bae7465acb83dad7a35f7f", size = 1106830, upload-time = "2026-08-16T22:55:10.389Z" }, + { url = "https://files.pythonhosted.org/packages/e3/c4/e2cbd2810e79f7a452a8ea9f6c6438ee718ce938d8cc12252cf0b36a81d3/hypothesis-6.165.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a380bc99aa3b035e6a95a2201bf792d4082a04ca75babcc21849c2d0914bb28", size = 1156952, upload-time = "2026-08-16T22:55:53.35Z" }, + { url = "https://files.pythonhosted.org/packages/a8/8b/794ced36864825492ac3712d5acab5a257b4601e6a9dc2ccdd3937198f87/hypothesis-6.165.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9acb2c4d9cb532c3fedea74159f7b923c8c036328c9239b4049e7aa073bdd81", size = 1280780, upload-time = "2026-08-16T22:54:34.983Z" }, + { url = "https://files.pythonhosted.org/packages/5d/2d/550525442cdbcc2daf1f9bdd8ba35bcbde63db7c7a22f2ef137fbb49df2f/hypothesis-6.165.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8660572b2d424bf5369ea8990985225f70bd1615b76ecd9c25588a3b9307009f", size = 1324130, upload-time = "2026-08-16T22:55:48.659Z" }, + { url = "https://files.pythonhosted.org/packages/74/59/6caf69dd5fe03499ada94c9cec016bffcc164511c6b93fe680f01209b9ff/hypothesis-6.165.10-cp312-cp312-win_amd64.whl", hash = "sha256:3376f2594763aef14faa519b0fb27cae7ce9eeaab4c69efa07777499110306c9", size = 672337, upload-time = "2026-08-16T22:54:49.11Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fb/c82c5bd92864ffcf319772fedc8c9bf2dbe4ca14baa0fee6e49e67b5ba1c/hypothesis-6.165.10-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9d77c3be7b429875036ad0f0597c6e5cc6bb17894a4da005e3807de64d2673ad", size = 784726, upload-time = "2026-08-16T22:54:32.371Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b9/3d7acd08506da85557e65147b7f3fca8c47684e33be90bee0acb523920db/hypothesis-6.165.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:490c56b830772b0eca3b4b2cecb3741a1ed26b1d7206a279e1525dbf0aa95ee4", size = 776375, upload-time = "2026-08-16T22:55:13.303Z" }, + { url = "https://files.pythonhosted.org/packages/38/6b/922e8b3f9a706dd89d440b9545d2c6231c65e74da1c1fee3ff36c251b9c4/hypothesis-6.165.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed68e27b8a61e57a3ccdc7c5a14499e00b54dfe223087204d5d40b3b5ef58b6d", size = 1106763, upload-time = "2026-08-16T22:55:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/01/39/f5b9a5d390d4edd1ad472334493ac442963ebeb4daaa74ff4bdac6ef292f/hypothesis-6.165.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6caadcd1afb62630ff5c5ff353626eaa616553a5971295ad6dc2b19ca8a39620", size = 1156778, upload-time = "2026-08-16T22:54:33.824Z" }, + { url = "https://files.pythonhosted.org/packages/b5/5f/5fbe1be4326337fd6acefe2d18ed44007ee1dc1f98fe5b3c0eb22942364d/hypothesis-6.165.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9145fe43ebb22e66672967c3fab411793b226ed776e4fe282271bca6ad3c0bb", size = 1280756, upload-time = "2026-08-16T22:55:54.834Z" }, + { url = "https://files.pythonhosted.org/packages/25/c0/cf6f9e1ef632a1a75694eed0db3a02e6fc75c367a363e94acee52f043c64/hypothesis-6.165.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79900a9920a0b1d3a626c03a90ac6bf7042e78d46906a565b86a0dbe926f1d96", size = 1323889, upload-time = "2026-08-16T22:55:56.567Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cc/662b94880f260b0a88de1fdcf60fc9984f6e2a796da549542adc10a7bc83/hypothesis-6.165.10-cp313-cp313-win_amd64.whl", hash = "sha256:c01dd04044c472e47193b54f68e84e08d6ebf4f29551885aa959b015f7cd9747", size = 672346, upload-time = "2026-08-16T22:56:03.792Z" }, + { url = "https://files.pythonhosted.org/packages/3f/77/55e020c9c576532ff7d20bf8b1dfa052ecbd5ada1949b02f76c44c966f7e/hypothesis-6.165.10-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9ccac776b2ca93b324806facd526ccb45da0fd035001c899a35b02c44431e209", size = 784833, upload-time = "2026-08-16T22:55:21.255Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f2/01da2adf829cf549eaddcabb8e8072077fb3d26da4275f4c1e89b2c0af74/hypothesis-6.165.10-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e5f95f7b622e4171096d92175dda0a560f0955ade9b8a3a07bdcf151f7359611", size = 776545, upload-time = "2026-08-16T22:56:10.159Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/58d4f842895220b793c53fc94a6489705b3665bb4d0ae4d338ce03fdf9fb/hypothesis-6.165.10-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f76d1562643693b8a40066f1f96af795b93fd9bcfc9690a1af2ff4c5867ee29e", size = 1107271, upload-time = "2026-08-16T22:54:50.266Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b8/206468912d2153306bb8a41afdfc59e45b7a73a0495bbe4b9cb4f0e79c1d/hypothesis-6.165.10-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60cab3ab4ea468d31a33739ffd7e94ec3e37dea891d65a6582ecc8a477175191", size = 1156915, upload-time = "2026-08-16T22:54:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d3/bf5a22929b70a4cfd3edf69c5642b029b27ddb5cfda48fa295d384b01abb/hypothesis-6.165.10-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:22cf19388f0ff6ced8eb3e49c903d14938e4ed909d93bf28383eef451511e424", size = 1281205, upload-time = "2026-08-16T22:54:44.083Z" }, + { url = "https://files.pythonhosted.org/packages/07/a2/d7b2ba444d36fc84d4779f4431e74dd9b023dc63bcf282199f6e48ad39f4/hypothesis-6.165.10-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:057d0232f1224dcd0b7698902551a4341a7399f90670b036db6c4376715fe889", size = 1324243, upload-time = "2026-08-16T22:55:41.123Z" }, + { url = "https://files.pythonhosted.org/packages/d1/95/afe6b531fd01928c6f63d394ee413fa2338d088b2b44efcc23596b54477e/hypothesis-6.165.10-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:ab0f2e9d7d7d4db257f7cf53de3706c2baf124269571f20ffc2bcd6781f03063", size = 616382, upload-time = "2026-08-16T22:55:18.449Z" }, + { url = "https://files.pythonhosted.org/packages/48/86/9b4fb75f520a028edec50ffc904a94d724180395d71feb6d7a0ce7bb6f00/hypothesis-6.165.10-cp314-cp314-win_amd64.whl", hash = "sha256:d1ea02fa8ab3d33eb1125eade81f7136341eb429152c6dbe2ae6f8bc33b3fbdd", size = 672145, upload-time = "2026-08-16T22:54:24.831Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ba/f7bbaae0c789bab7ddb764d2056ee1a463cc95a8acbccc90d4184e48b242/hypothesis-6.165.10-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ed1a5891e59472884a03cb9875483e8fc131c80a275c60967f8afc5458a0c8ff", size = 783287, upload-time = "2026-08-16T22:54:23.751Z" }, + { url = "https://files.pythonhosted.org/packages/3a/83/01ef80772b4abd335c49405576dc503cede94fb5da30ba2643a119013aea/hypothesis-6.165.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:09772e328a26e50486ac572be34f9887f9aa185efe7ebb16bde4e8f6038db1f4", size = 774991, upload-time = "2026-08-16T22:55:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0b/f47506241f9d5a5a2efe4c65b6bf4830e9d9576e5d3779007a260699e608/hypothesis-6.165.10-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf3b612542ba174c9da4000b59a4f4c81e8d66f87509be85d3a1b71b5c36413", size = 1105499, upload-time = "2026-08-16T22:54:51.864Z" }, + { url = "https://files.pythonhosted.org/packages/84/fe/abb3909b7089835112fbe75bf00d817d733b3a8032759783db0a24ff1e56/hypothesis-6.165.10-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69ec5be85ef508e206153bed8eafd03f7995dc464356c8bbb279a1e2b7d56f3", size = 1155685, upload-time = "2026-08-16T22:54:30.94Z" }, + { url = "https://files.pythonhosted.org/packages/73/2f/1964738921640184067121ae77414522fc3f0463fc26c6e25a4f3b8e42ca/hypothesis-6.165.10-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dd207497bb985918409a1bb5db85d1875f74e1269487332113b73d1ee7c77647", size = 1279177, upload-time = "2026-08-16T22:54:40.179Z" }, + { url = "https://files.pythonhosted.org/packages/34/c5/312af8ae038d3af9cf3f7f1021c1abfe31c0d9035e4cf63519e0a7dc983e/hypothesis-6.165.10-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:00de0abdcf8c05c9d0eab735a3c49a276376b55151e6fcb903c2b39a90e5e5c3", size = 1322921, upload-time = "2026-08-16T22:54:42.7Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e7/b0a2fde7570c090a1b914026266a421c751ef10138fffe37fe0ef9e675c0/hypothesis-6.165.10-cp314-cp314t-win_amd64.whl", hash = "sha256:cc2da5aa4edf14743fa9257e5ba3513963999f01211635702479d8e92b8207c8", size = 672147, upload-time = "2026-08-16T22:55:27.527Z" }, + { url = "https://files.pythonhosted.org/packages/47/fd/985aa564d6ffd06483d45a62b40d319df0a703cd8bc1d041de17d102fbaa/hypothesis-6.165.10-cp315-abi3.abi3t-macosx_10_12_x86_64.whl", hash = "sha256:eeab73050ea58c13dd56e329f594c1dfe32ebd7bb169bbdf4f8ceefbc31ec6b5", size = 782882, upload-time = "2026-08-16T22:55:37.93Z" }, + { url = "https://files.pythonhosted.org/packages/f8/2c/6cc11151e450f72353a490940cd0db704680d07b78dc75dcc9f480e0d0e1/hypothesis-6.165.10-cp315-abi3.abi3t-macosx_11_0_arm64.whl", hash = "sha256:4c68e983d0007d014bb01ad4bcbba78bc432c73a1755ff36d5102ceefa18299a", size = 774584, upload-time = "2026-08-16T22:55:51.822Z" }, + { url = "https://files.pythonhosted.org/packages/10/39/ef26fa79c1738dfe9cdb1a3584fb6717d26429ca6c9d011cc4fdf08130c2/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7730d8197086f65d8969a991d6728a1d420a51b19fea06535c896cb43a1e05d0", size = 1104876, upload-time = "2026-08-16T22:54:58.937Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f4/3fcc84e7637f42bf00d987093b9418083ac8db81b87392608a60f4b7c5fd/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7a7980a898a3e6ebe4de1896a0507e3d519edb53fb9b4bda478c9fbeb6514558", size = 1133353, upload-time = "2026-08-16T22:54:28.635Z" }, + { url = "https://files.pythonhosted.org/packages/35/59/21c5c14179c38f8d0de3560e7f1825c083311b3013b63f817d7dc78dfcbd/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5820d009aedb7ae9cfd32f98b1ab0c0bbd6268379c4fab042218b6b655c63f8", size = 1132300, upload-time = "2026-08-16T22:56:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/14/af/fbb56059961e416b2de7b9dc5352db2e8572bd5ea46892957e4c1e5548ab/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a7ac3d34220800e1107871cc391bca1b00439875925d7d821878b8b791f245", size = 1155175, upload-time = "2026-08-16T22:55:19.824Z" }, + { url = "https://files.pythonhosted.org/packages/0f/53/77fb0c2dad445858555429c4e06cf94a59ae8d2407dd6426b5af97c84828/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_31_riscv64.whl", hash = "sha256:dafa7c9dbe3d802f9bcdf261b29c8a70700fb22839947f06e471f62c46b6257f", size = 1109881, upload-time = "2026-08-16T22:55:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/a8/7b/d187f673ff30e6ada640953636f978ffe64a6332f756b64163c2277f8d0c/hypothesis-6.165.10-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:90915635b9648071129b0f72c0673cf8eac9eb84cfd445c5bedef30c714b1ec2", size = 1144963, upload-time = "2026-08-16T22:56:13.428Z" }, + { url = "https://files.pythonhosted.org/packages/e0/60/31d504e364134d60af23e5f6365db0da3cf4a51b3ed3d4836e5a2cff12cf/hypothesis-6.165.10-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl", hash = "sha256:e1bbeb7c506b07ee0422cf9b2f7212fefa4240957f03526d38d27bc6743a0a48", size = 1278684, upload-time = "2026-08-16T22:55:22.971Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e6/89d26834a08c02f8da149e541dd40d7a96f68d9722f43146e69a77436ed7/hypothesis-6.165.10-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl", hash = "sha256:2b36aaffc88625a44f91074c5bbedfdefb9b376c38d1b3c342edcd2e4c8ed16c", size = 1407202, upload-time = "2026-08-16T22:55:14.949Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/20d1e72246867ea195440092e8bb422c7ddc2f271b87b5b65679d5532719/hypothesis-6.165.10-cp315-abi3.abi3t-musllinux_1_2_ppc64le.whl", hash = "sha256:18a3ea838ddea183388f8788750afa8494d79abb5358823be9782585f34445d3", size = 1261395, upload-time = "2026-08-16T22:56:05.448Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9b/ebab6c3c2b90a16abb4119198178652d12aff83cc8ec2cfde5276c69fb1e/hypothesis-6.165.10-cp315-abi3.abi3t-musllinux_1_2_riscv64.whl", hash = "sha256:2a2567b3a03a4a5a7c575c191cfcce321a967df3727803817e75bffbbeaecabe", size = 1279213, upload-time = "2026-08-16T22:55:35.066Z" }, + { url = "https://files.pythonhosted.org/packages/23/78/69b219b524231d36eb20c792e1f01e7cb037e02bd0af1c29f77ed9a969c0/hypothesis-6.165.10-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl", hash = "sha256:8001925fa3dde51cb574e4c9de4c7efe77c4e4d64bd2fd2ef61d5651f9d04f3d", size = 1322367, upload-time = "2026-08-16T22:54:21.279Z" }, + { url = "https://files.pythonhosted.org/packages/55/63/ad5cc153dcc72ae5e7905fb9b3585f3e48ce892a2d6366f90163e867a69d/hypothesis-6.165.10-cp315-abi3.abi3t-win32.whl", hash = "sha256:c6559380469295c4009215fe1cab561301591a3bee2e2fb3f4f96d2273a3affc", size = 666038, upload-time = "2026-08-16T22:56:11.797Z" }, + { url = "https://files.pythonhosted.org/packages/80/32/b62307b73fbc99f0a4381d6f9456df76fbcbb7a27ef7256e26f0376f48ea/hypothesis-6.165.10-cp315-abi3.abi3t-win_amd64.whl", hash = "sha256:30797f20ca45e57f526d2df872f63ba453cb4e1091ad542184a7a951af8da79d", size = 671941, upload-time = "2026-08-16T22:55:00.235Z" }, + { url = "https://files.pythonhosted.org/packages/c2/dd/e0f98add0548ef73ea7afac45da1fb8efc854d7f9931db568754d0f963f3/hypothesis-6.165.10-cp315-abi3.abi3t-win_arm64.whl", hash = "sha256:c53e9b1c36350df9965ec44d6c0d4e0bbbb38f720dd2b0e1256dc6524d411015", size = 669931, upload-time = "2026-08-16T22:55:50.205Z" }, + { url = "https://files.pythonhosted.org/packages/0b/6a/880d6eeed5c451fb40a66733dadec4a5d498628a4a7f6a8a5f633f4c6dcb/hypothesis-6.165.10-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:34ee6402df6f31274d89119f1561b5f7489c97866afc5b7a3ed3a13d7e762802", size = 784644, upload-time = "2026-08-16T22:54:20.127Z" }, + { url = "https://files.pythonhosted.org/packages/27/e0/9e942bd3c3cf5ea0d5c0fd0905893bbfb6cefb7284c70fcc8033f8fdec38/hypothesis-6.165.10-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:277f41801e88dad2eba082f91a75632b7584ff64044ba2cf9dadf511b0d19cd0", size = 780515, upload-time = "2026-08-16T22:55:04.676Z" }, + { url = "https://files.pythonhosted.org/packages/19/32/f11a618415dc5fa9cdde41fea56c489f0814759527ae1ecd11a75a4558b9/hypothesis-6.165.10-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72df95fb1db41755b155c5f02106e0036a339250555c8d351d488704fd112cf9", size = 1109374, upload-time = "2026-08-16T22:56:00.241Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6f/db49b719842297c2b71e0d81e5b8967d31215fb7389421abcb465ce7ed3f/hypothesis-6.165.10-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e20a02775eb3cf0ffb4f0219b6d7c1f240336663d4e5d7028675ec247c790c4", size = 1159092, upload-time = "2026-08-16T22:55:58.57Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2a/bf0bae84ba1cb3923d295973f1fe38ee867eaf90119e0d559116083be300/hypothesis-6.165.10-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:1ec53f08732e3cfd0342cbbd75dbd1b193c8f19390660466e536a748bb81f757", size = 676045, upload-time = "2026-08-16T22:55:45.514Z" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + +[[package]] +name = "idna" +version = "3.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, +] + +[[package]] +name = "import-linter" +version = "2.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "grimp" }, + { name = "rich" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/c6/42962eb043df4d6984c1540220735b20442572fe37dab5e65ac807c939b9/import_linter-2.13.tar.gz", hash = "sha256:13af4a1d6b06044c58ea784e8732fd7fe48eec821a75feb4d6a1a2de36dd5c27", size = 1279761, upload-time = "2026-07-03T14:00:31.285Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/13/e7725e6eb32607fd4af51ccf3edfe835826e5cdf783b4d7fdc8f459196ae/import_linter-2.13-py3-none-any.whl", hash = "sha256:c0372e7ee5e15657bc06a8e841445e13237afd738a672d26863dc927af9f0bf5", size = 638185, upload-time = "2026-07-03T14:00:29.676Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "librt" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/9b/356320fbae2ac8467e21c5e73e1389c80468e4998c62cc7d3536cc51b614/librt-0.15.0.tar.gz", hash = "sha256:4e66cbe84437497d951b799d3e1551291b6fb3d643820a7014b3655d57a59162", size = 214338, upload-time = "2026-08-07T10:49:42.663Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/12/e2e9ca532cf5a0e08c9489826c4a35c6958c92ba0313fda70e8c6c3912be/librt-0.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1a49adf16a7c9d9646816c2946135527197b6fcf4347c7b8b761cf1bfbf4489", size = 148673, upload-time = "2026-08-07T10:46:22.569Z" }, + { url = "https://files.pythonhosted.org/packages/6d/7c/02005e23478bd5950618d9712e0fd2b4c511657857f3efd8ba6a5feabcdd/librt-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81a398f45b45a59200e13cd5ad1ae1d3f44334de98b148331afe2cdfee701c52", size = 153547, upload-time = "2026-08-07T10:46:23.931Z" }, + { url = "https://files.pythonhosted.org/packages/a0/90/d8848a735f5642077fc4b3b4bebcdb08edf10178e3add45597f5201a368f/librt-0.15.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4eafbaff06b9563f8b1c850621ce51605de05208e09d4d71ce490bc972b7b9e8", size = 494355, upload-time = "2026-08-07T10:46:25.122Z" }, + { url = "https://files.pythonhosted.org/packages/e1/0b/8604f41ea02feace490e9e405a338a15f9905369f55b239a9ce31c946f24/librt-0.15.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:b0411b4066db926b80258c60dcb0e6db4c9cee312eab45b7e8866b17ddf9ada1", size = 485459, upload-time = "2026-08-07T10:46:26.447Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ac/84153bda1ce0da609182527ab92b40d961809e544eefdc5a1c2422971416/librt-0.15.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:febb1ce6cac545a54e6b769982824e955a700fdd9fbf3a08a3d82c990968b57d", size = 498398, upload-time = "2026-08-07T10:46:27.701Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3a/5ca6cd282b2c244bec8ec84102e09773264e9c02891d56ab3a8f0e4d7083/librt-0.15.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b230acc1c3bfe2d6f2627ba2b95dc92e58aa494600e9722d0e6ccbc931e59702", size = 515474, upload-time = "2026-08-07T10:46:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/73/d3/bd34110234779eb843c6ed66aba7c9b2091d3dd85989f1fb9922f564cb7a/librt-0.15.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6da110e5f314c19ab8478464d02ae18808ae73d522c15260fa4918acdcd64da9", size = 509484, upload-time = "2026-08-07T10:46:30.124Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/43c3f7f071d71631a7daa3b835ef2168ea39f20692d81464d4e47fbaa6d6/librt-0.15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:eab9208b00ca55bf75983ec99f7bf13acc746a36102e98953addaad7f7ea1e1b", size = 532534, upload-time = "2026-08-07T10:46:31.511Z" }, + { url = "https://files.pythonhosted.org/packages/c5/1c/b854adf036ea817c40408873a5b794d65a91d9f0f39826f2ad2a2d5d7f48/librt-0.15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6c013cd3a1721e69e14380ada97eaa4b7b0cdf1c6b96fa765d4ea47c875088db", size = 537087, upload-time = "2026-08-07T10:46:32.734Z" }, + { url = "https://files.pythonhosted.org/packages/25/5c/c9a890e244e7dd725d3bd8b560e41f0aec787eaf343b46956a290ab7b841/librt-0.15.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:567b1c430f8bd560e689421468278ac5941bab4a05303b5d95b6ae10db03f451", size = 536575, upload-time = "2026-08-07T10:46:33.965Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c5/c8e70b60b704299555f55db468eb46b1c81bfc60201ffbfe20407d89870c/librt-0.15.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:29c4cab9df457b19672c39be7f384ebb2bc925c4e2684b8780c222b43eb36389", size = 517142, upload-time = "2026-08-07T10:46:35.577Z" }, + { url = "https://files.pythonhosted.org/packages/56/d1/767a90c41f5d381b3195bc88ac0ec4afda35777c9c781e1f9848fedd965e/librt-0.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bccbd8e5b0bffb7106cf18eb1baa3d7194b1cebb3b4b1cdbd4bdb19382a6ee6c", size = 558714, upload-time = "2026-08-07T10:46:36.829Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b4/3c0624b8dc8301ab808f2b3a910995bcabe28df070fb9a0e5505ae997dae/librt-0.15.0-cp310-cp310-win32.whl", hash = "sha256:8ae493ed5f659a7761c43d42f183db514536073ded9bcf671d2d1df47e29a07e", size = 104426, upload-time = "2026-08-07T10:46:38.594Z" }, + { url = "https://files.pythonhosted.org/packages/31/98/e91c0382304bedb2db9c6801897319a9dcb68daac5e975819b562362f20d/librt-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc25fb356d0c7810bb49ff3df908ad1fda6995d660ab099ded69244ed7ab6053", size = 125057, upload-time = "2026-08-07T10:46:40.052Z" }, + { url = "https://files.pythonhosted.org/packages/59/52/06790ced2ac7117f890c21bda43c39c958ec82aa665c0718e821d33ff939/librt-0.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:823b92cf3c18ecd08afc70c42473888b41b6e8ef5046f3b82c05c154a2fa3d22", size = 148039, upload-time = "2026-08-07T10:46:41.165Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1d/8e150b7fc449a1f33c8a760965cc1f43b14fc1577d9d0b50ab2701420e74/librt-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70bc1b602cf59917e8f0c7a2cbc8bcc6fbc14d5486136b00707a79619121d63", size = 153067, upload-time = "2026-08-07T10:46:42.418Z" }, + { url = "https://files.pythonhosted.org/packages/51/87/a162bc5a66a35599dc619ecb215145f4de7d68e886b479b6d12593139f7c/librt-0.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:814ff83a25b5fce8b9c80c4dd803153fb5c5599fc74db9e022466938368957ef", size = 493087, upload-time = "2026-08-07T10:46:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/e5/3a/aeea1fc620cf48060d3065b37614edbf97043c099d0f50782bc8ca61d897/librt-0.15.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:57f5eeb6ad4c180de583b1038e61fe5fbd9796bb69a8a1c1a0c7ddbec4c8c60f", size = 485608, upload-time = "2026-08-07T10:46:45.038Z" }, + { url = "https://files.pythonhosted.org/packages/52/ff/fe571ad416f0856fd0d5578ffc2e6dc531891e586e36b647bcf50569cab8/librt-0.15.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82909c8f7eb9952656b65d3147afde4cf8e6d5a991eebc86418b5e65843b0ab8", size = 498723, upload-time = "2026-08-07T10:46:46.35Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e1/7a65eb5dedb1f00aebd948cdd8e17add48bf066cab3514e9daf84ab45a6c/librt-0.15.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f779070399f991400fc451719e0ea388eb7de313388bada2c127a35de05f798a", size = 516002, upload-time = "2026-08-07T10:46:47.599Z" }, + { url = "https://files.pythonhosted.org/packages/5f/45/59832b0ebfbd08c2742e6ece372ceb53f18bf1faef5d33c8daf3abebf749/librt-0.15.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bac89069bc496ebdf4f79ebb57bbd10d0b214c8454225deb672d91002bd17e18", size = 508607, upload-time = "2026-08-07T10:46:48.873Z" }, + { url = "https://files.pythonhosted.org/packages/ea/0d/37fa73f3b43ebd8259f91ae9102a15e5a54e65d581e48dea72df3e81d7a4/librt-0.15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e0d00c708fb2f5822b152429b1ac80a58dbbbc3f6c232c4d13a3f7fcf2ea5b4c", size = 530422, upload-time = "2026-08-07T10:46:50.45Z" }, + { url = "https://files.pythonhosted.org/packages/26/02/e046c6fe7a5881ac34623242192f484426ba8a75595fd18f22c53a3f530f/librt-0.15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c6624fe268625869485553dd7cc1daf30d22558215bb2a4ff16f67a9801a31a", size = 534303, upload-time = "2026-08-07T10:46:51.693Z" }, + { url = "https://files.pythonhosted.org/packages/95/32/d5e6d861ab0366f3edf74f887ab0c9eb9f535aaf01d32b80b4f734daa179/librt-0.15.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f56b397858a23dacf35ede366ed2212fdc03a6a57a1ad36468ad6e9dc5fac091", size = 536084, upload-time = "2026-08-07T10:46:52.951Z" }, + { url = "https://files.pythonhosted.org/packages/2a/de/d69d725513fe53fc90c6d7a1f86e4428939bad2fb905b17fe4c18d413dde/librt-0.15.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4388184646efe2054911c5b00a1077d6d1ee86a95b7e8ba96dc7850a809f3f40", size = 514307, upload-time = "2026-08-07T10:46:54.194Z" }, + { url = "https://files.pythonhosted.org/packages/36/93/f8aded0d6682b4f25820fa86e0690f87f01df9fd7bd09ddb04d9167ad021/librt-0.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97335f59082f9fe2ce6c2a9cc6433a0114bbb6cd4d5c09dd76c95c68b9f9a8b0", size = 557686, upload-time = "2026-08-07T10:46:55.443Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/ffeb6bdeb6cd862b4272fddc8ad05f938dd25d020ed517e631813917d80a/librt-0.15.0-cp311-cp311-win32.whl", hash = "sha256:83380ffde38062a2e9bb55d83e74474f6614665528b98a6928720fc006dfffbb", size = 104917, upload-time = "2026-08-07T10:46:56.605Z" }, + { url = "https://files.pythonhosted.org/packages/96/28/7e2313a3ffbf0b4de7ba3da58a09e488507b4bd1ea2b5e69378354a23415/librt-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:f75720477ee05d509a310e856cacc8d909adc182f7b91193c207bcc26d7ee6db", size = 125886, upload-time = "2026-08-07T10:46:57.729Z" }, + { url = "https://files.pythonhosted.org/packages/39/9e/04b8c3cde014ef255ee785730425268354543acc38902093a40afa0dc164/librt-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:256237037a3ab001ae8d9803b2d43562a4c3aa38739843694349e4d5ebb0fd56", size = 111885, upload-time = "2026-08-07T10:46:58.787Z" }, + { url = "https://files.pythonhosted.org/packages/ba/39/99c25030e782bdfb7a21be8c05254806a2e4bbb05c8d50c2a2130acbfa05/librt-0.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e87bc679f86a99aa3b26e3c78eeb821a247c9a28eae48eaafcc32c3bf4c3bb9e", size = 151021, upload-time = "2026-08-07T10:47:00.057Z" }, + { url = "https://files.pythonhosted.org/packages/14/43/f4b1bd1b2888798a1409808889a25ea1ba49eaabce7d681ed27734c2df9d/librt-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71599e011ac880e8e45d46047d714871894c7d4ab6f25626f8d4f89da21f368d", size = 155267, upload-time = "2026-08-07T10:47:01.311Z" }, + { url = "https://files.pythonhosted.org/packages/0c/db/3ad9c965c72f1e1d6beeec44ec10a54e17be8ae042fbb4baade16cbadced/librt-0.15.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c802434092b769b1d613ed2e13fac15fbfce1934a74bd10283b03c0fae231cd1", size = 503136, upload-time = "2026-08-07T10:47:02.45Z" }, + { url = "https://files.pythonhosted.org/packages/4b/07/5888a6d76acd62ebce66c61b74d94e9370b9c32929f111e487bb6546f8ed/librt-0.15.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5500eeae393a184d14e1f35645962c27129d20c81afa4069e6ef826ebc2b3aaa", size = 496670, upload-time = "2026-08-07T10:47:03.675Z" }, + { url = "https://files.pythonhosted.org/packages/29/39/ab57cc2f5b276156da02bb7f5a8921bada1cb1993ffec99acf811c602c23/librt-0.15.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6ecfc32dfb46fb7b565bcd6abf9412acf978775a998273d22888a6d7953730dd", size = 513688, upload-time = "2026-08-07T10:47:04.981Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b9/bdbb0b648b5c2befb031f4c6f3b1dd857415e8fb492a25a3c764a6681e6c/librt-0.15.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cc46cfd15022e35084355478c9ac809d90b1152222706ac9a7655ec21df6fa", size = 531904, upload-time = "2026-08-07T10:47:06.211Z" }, + { url = "https://files.pythonhosted.org/packages/93/26/473c2e4b6c104e9e58e27ce95fc8005c8bd4fc36cae4f254371125a92db8/librt-0.15.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d5f51401d102c885b9ca509e62c79b1dbff286e1b9b047fde6f763780789356d", size = 524427, upload-time = "2026-08-07T10:47:07.592Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/03b3abb82b41714671b907bf6989b228e31e6a8af52dec82b5b0728dc250/librt-0.15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cc30523e3f1a23fb7511cc659834a0d01a1042bb9de359bc1c131cc4ec6c9656", size = 543155, upload-time = "2026-08-07T10:47:08.866Z" }, + { url = "https://files.pythonhosted.org/packages/f2/0e/9bb1f0a4affbd0a1888f4f79dc03ed2a299d9a2c26c59ab2a97dcbf11903/librt-0.15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:59fe030d8ae4a57e3fb7756bf35a858de74e04066fc8555c53d0af979132af81", size = 546890, upload-time = "2026-08-07T10:47:10.327Z" }, + { url = "https://files.pythonhosted.org/packages/dc/84/6937a280d461f7de6e031ffb02edc2b7c3c90d49d630565ce8ff27cbc5f2/librt-0.15.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a6526a2a956bbb1e4ae3568c82e650fc99119c66bb011ea60715744955a2b4d", size = 555163, upload-time = "2026-08-07T10:47:11.798Z" }, + { url = "https://files.pythonhosted.org/packages/bc/95/2a2853c1ee014bf102116e7f897a04beeaeb2461b45b79af98bdfb95f1ef/librt-0.15.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:85ea21ec6730194d67156b0e0b5430ccb1d61f8b8b907e39b37f9812b74a13f0", size = 535812, upload-time = "2026-08-07T10:47:13.279Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4c/cf9601c1b4c5f09280acd5d83abdb2e68527a2be8257136eb42304218622/librt-0.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e47b8ba865d7ede071a91a7163073bbaeb72541f1ef8a07d512c45c7b5007f2", size = 573688, upload-time = "2026-08-07T10:47:14.727Z" }, + { url = "https://files.pythonhosted.org/packages/47/6d/9ac7cbec46189a7625af4b5acbd25f10d827f4141b2002181848c8418923/librt-0.15.0-cp312-cp312-win32.whl", hash = "sha256:a5207ec414d1c4a2a7231b2086970dc036f94293cdf338190984958a013a42f1", size = 106138, upload-time = "2026-08-07T10:47:15.973Z" }, + { url = "https://files.pythonhosted.org/packages/38/d0/2ae99c83be86ce23f925ac1aeeedc777e97f427c4a8d190c70d0a16e9a87/librt-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:73b30cfa976659b3917c8f6153bdb0591c6a9ec6583599fd24a689b690622022", size = 126974, upload-time = "2026-08-07T10:47:17.049Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ef/dd24f9635c730b86b87587967dda7516b1845e8b17684603d31607fed598/librt-0.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:a54cf9e0ef47b96af580849db5471142200568ce1e02cbf416addab551369570", size = 112292, upload-time = "2026-08-07T10:47:18.222Z" }, + { url = "https://files.pythonhosted.org/packages/e7/42/467b53a601b406ccd7b97c1fd54b59cb34f9185ad5ce7e9d5c3c4e8961c8/librt-0.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:db13ca398005abcbe538deda87b686d9bd08b7001cf40c4c06b444960ae10a26", size = 151029, upload-time = "2026-08-07T10:47:19.312Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e6/36c2299b7a94b84fdd01220d8a777a71be5be0925bb0dbdf71c0a06a34d9/librt-0.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa1f1995789dca3698bc550aaceb09a51bd5df0a057ff84ff15296cd1975b801", size = 155194, upload-time = "2026-08-07T10:47:20.398Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b6/ed5071f9325845e670bd36012757419767fbf56af77ed483077b9e4db541/librt-0.15.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55456ea87d8df21808446d03817be2f65e20391c1c615d9187440dff28cd08dc", size = 502568, upload-time = "2026-08-07T10:47:21.652Z" }, + { url = "https://files.pythonhosted.org/packages/7f/81/6450c67c3615d87704bcbc21323fafc69c799b06a044c447529f725d4b01/librt-0.15.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5a86a5a08c2235316bdb359d5dbb6ce0abfca7fac06363103e2c5af571d92f95", size = 496153, upload-time = "2026-08-07T10:47:22.925Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d6/5f52b722bc75076954b3bfd49be15ea362df4d580c6fb315d0f617100d30/librt-0.15.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e56b6a368529bed262da40ce13f8fef590db0479819cca84f16a1f01ac356d0b", size = 513336, upload-time = "2026-08-07T10:47:24.213Z" }, + { url = "https://files.pythonhosted.org/packages/8d/e2/c08fd1d36ce63ea5a12b85c5d37f4550b5f86a692167e41e5a74222607ae/librt-0.15.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:234d8d394721fa0d786af15ebf1f3fb7f3ed82fd1cd0cde45c2f247b5d4281d2", size = 531661, upload-time = "2026-08-07T10:47:25.507Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d8/d9482fcbeb177b9eb87bb3899eeb3b42be690313c652f9e146b1d0681fb2/librt-0.15.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d8363d7accb0286ac3a0e633f396e93800dafb8150494505daf9515bbda591f3", size = 524487, upload-time = "2026-08-07T10:47:26.79Z" }, + { url = "https://files.pythonhosted.org/packages/10/cc/075171517b41f861753034fbb151b42cfc83bcc853849f24f5e66fd60ccf/librt-0.15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0f0ee3644d951f31055ad07d77d92520e84505dd7a432cc4cd501dd70ee06785", size = 543201, upload-time = "2026-08-07T10:47:27.999Z" }, + { url = "https://files.pythonhosted.org/packages/b0/03/42c2330f37eeb475b6affeedd06518f60035f323af3a839335e3fc9fef2d/librt-0.15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2cfd1a81a648806e6a7717be4cc4d1bb392fa229752bf8444ba365e381e984d6", size = 546467, upload-time = "2026-08-07T10:47:29.396Z" }, + { url = "https://files.pythonhosted.org/packages/57/1e/1ad4c5638f7e64d8560328bd25c54b409a661bdb6ff254b38ff90744288d/librt-0.15.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a6cd22c9da0d866558e46a041f1cc0c2bbb26b61b137b2347fa834c332e1d101", size = 555139, upload-time = "2026-08-07T10:47:30.815Z" }, + { url = "https://files.pythonhosted.org/packages/49/41/39fa7d15db1204cd1cbe6514680fbdc243adf754a0885061308f43afc013/librt-0.15.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6d5225ef8801e4ea5e482fa9b5dfb891dd9ef6f6d870f1f25d449ca2c70ac218", size = 536050, upload-time = "2026-08-07T10:47:32.222Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/c6dcf0dd8e26dc0c9a499a2abab8646c86dcaf9ecea9524cb46d3686331a/librt-0.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d28a05796b99f749bf8794f17ba9ba1612d0076b802e9cfc62c554634e9ce3b", size = 573700, upload-time = "2026-08-07T10:47:33.527Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9b/ab54c71a7918a7c34fa5327fb61390a77446a07a146fbfb1165250a61035/librt-0.15.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:2067ff438048cead9d223ca5675bae2a25e520a7c3e6c1498bf9c6892d22caab", size = 82194, upload-time = "2026-08-07T10:47:34.835Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b2/4f9a243bb892395f3becb80789ade13771701091f9f07ab8230247953ba8/librt-0.15.0-cp313-cp313-win32.whl", hash = "sha256:1cd3b721f24c206398b9e26da3c3a9c011e6e89d06f318ba8ebefc30f1003890", size = 106231, upload-time = "2026-08-07T10:47:36.251Z" }, + { url = "https://files.pythonhosted.org/packages/bf/af/64aff4885a40b93132382f2c314647d722574605416504379184ef3045ea/librt-0.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:f395a4a9a03ac062dbe9a9f82e0c720502e590a38feee6a757bc82e9c63afbd8", size = 126996, upload-time = "2026-08-07T10:47:37.453Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/335bccf6c7cb9028cb0b54aead27d9ece3f01f83bc6baa2abace5da655c1/librt-0.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:0a15cb554761247d84a3ec0cbdf4078d70725384f0e4662c0fa3b26266eb60ad", size = 112188, upload-time = "2026-08-07T10:47:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f5de7feedc56337a088eb15cd9fafa9938367362221d8cc62c642b7f94821993", size = 149833, upload-time = "2026-08-07T10:47:39.86Z" }, + { url = "https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c0eb900c0e91f4aebe680845242e614f1864edfd44106380d0752ac29522bf8", size = 154088, upload-time = "2026-08-07T10:47:41.065Z" }, + { url = "https://files.pythonhosted.org/packages/dd/02/1a1662dceaba6a086360891448d5ce9a7d3555976cae59a31a39d744b9c7/librt-0.15.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8c9a650a188e38bac005048cbe6342e81407782944d01934540ab75e417df21", size = 494215, upload-time = "2026-08-07T10:47:42.388Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/99211619dc656370a3740c33d2b0b6d5a3fb1e73689314f6ed477a397dc4/librt-0.15.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:92bfed8deec93df30286b9fe9e3b1dd17329cc076a192b4ee5ec223841d54953", size = 491173, upload-time = "2026-08-07T10:47:43.683Z" }, + { url = "https://files.pythonhosted.org/packages/d4/aa/5448d0b05f4579b635d3899176817ebf561af0e57bacd425b5b1887264c1/librt-0.15.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec4b19788f835711a2072f9dbe6b03b3bf32ed1f0fb30cf399bdd59d9f0c33fa", size = 505512, upload-time = "2026-08-07T10:47:45.314Z" }, + { url = "https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4c7bacb70930f3d0a56f4ecf1be474a1f0d941b01dd73b756f3c256d42cb879", size = 523073, upload-time = "2026-08-07T10:47:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/88/fa/759c0030f3ee371439eb26de34fc745807caf0abb878af7af4b8b7c3dd3d/librt-0.15.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3e79f05e4a08b4d880342673312bbc895b56df7765605796f15902eb5367d3ae", size = 515080, upload-time = "2026-08-07T10:47:48.319Z" }, + { url = "https://files.pythonhosted.org/packages/0b/27/894e072228fcb159703c655da69f8cd10dbed489c36e3df7dd032a2483be/librt-0.15.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a417149c0cba4d50b61e992e5a15e69eaf96746609b461cc4ed168aeef6b79dd", size = 534164, upload-time = "2026-08-07T10:47:49.875Z" }, + { url = "https://files.pythonhosted.org/packages/98/a3/0078e91c1f36f8815db17827de15650b9a3fe56c55fbf998c854b34e40d3/librt-0.15.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:da7a94d6a3411f579d72aa3e3bc5fbca7ed4549f3dbd7e5de3aa567333374285", size = 540616, upload-time = "2026-08-07T10:47:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/86/33/81a29b796dd52a45e9ef7974c7732926e8f10f15b8d2be505665979f896d/librt-0.15.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:856f743ae607f2c1380eccb566c0038a9fb3eabf0fc2be2704d76d9f73557239", size = 545890, upload-time = "2026-08-07T10:47:52.818Z" }, + { url = "https://files.pythonhosted.org/packages/05/82/8be1baa1350e5d30cfd70ae79d0a6f4dc5862ef47f7bb2808aabc9bb86e5/librt-0.15.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:779a6e7c894737e5983e7790a9c78c4000c30e23c9aada08081bdbea53b0fa60", size = 523287, upload-time = "2026-08-07T10:47:54.165Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4f/d1be6a01a35c20ef734e0e44113f87d4af756a9354a89dcfbe3b4f8af5e1/librt-0.15.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:96bb17dbe8bab3c0954fbebfc69ed395599de75b6bbc35e3270a878e15d4dd65", size = 565868, upload-time = "2026-08-07T10:47:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/67/88/649cfa33f5825927b160610f670bdab012a64d627eddb94fa795ea4292fd/librt-0.15.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:7220697efaa6e5348fc3d18ee7f8563d4bfecd9872b37ffb915bfc1d08840622", size = 81619, upload-time = "2026-08-07T10:47:56.886Z" }, + { url = "https://files.pythonhosted.org/packages/22/31/8e88a8d5e48fc8d1a817787fb6811dfff6499acd6c8683dd83934aa6ede0/librt-0.15.0-cp314-cp314-win32.whl", hash = "sha256:f54598964d357b1c5ab77cf5d92f21e598fe0e23cdbe9618480807f81b4eba15", size = 100138, upload-time = "2026-08-07T10:47:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl", hash = "sha256:3ff5893a2c23d886aa9ce786de5ac6ddc74aeeaf90743682b74d920e117d2e28", size = 121258, upload-time = "2026-08-07T10:47:59.564Z" }, + { url = "https://files.pythonhosted.org/packages/fc/28/6af430b44d9ebb897b865a3c363b6dcace51357be2347cc0f8f869656a86/librt-0.15.0-cp314-cp314-win_arm64.whl", hash = "sha256:3722a099730704c9a3d70c879fc0f51daec25fe5f1555672d97bc595abeafb95", size = 106467, upload-time = "2026-08-07T10:48:01.097Z" }, + { url = "https://files.pythonhosted.org/packages/7e/aa/b42bb798942ced219f6d63b27e07f91237887a8d0bd0921666db79a13790/librt-0.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:38c0c7d4b6fc06c3324b3f9162c8391bfc4fd9dde53afe1033ce7edb48d5a714", size = 159523, upload-time = "2026-08-07T10:48:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/75/03/1b53cd4ef904e73b1d828a5f90143bf94a2967d7cfff0b9ccf93e12aa9b4/librt-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8b2fdd7ead3c995c37940a790690660d0ca006c302db26cc51933f6766866fc3", size = 161638, upload-time = "2026-08-07T10:48:03.725Z" }, + { url = "https://files.pythonhosted.org/packages/ac/c4/9f9c9fba097d49e9e694c2b4dc331df31884645ecbc58a93b4b5fc69d2c5/librt-0.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2fde98cf1fc4bac144ce23c2c4c017b924ba714509ea9334977b0b27050c837d", size = 701795, upload-time = "2026-08-07T10:48:05.135Z" }, + { url = "https://files.pythonhosted.org/packages/4c/05/0966840bda0380c8ae167b9043c6230202941cc90ea29c48e096964c765e/librt-0.15.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:e3b461183c5fa7681b48560f91515f53a953122fb30c71e07abc67d7ddf58c38", size = 682147, upload-time = "2026-08-07T10:48:06.555Z" }, + { url = "https://files.pythonhosted.org/packages/18/af/1c47ca573c30ea47d195aec26133af522fea1104afaace028d7b32247ea8/librt-0.15.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4bbcc257e3babea20a91715c361b24554ec4e8f51aa578568afc230799fe1a19", size = 696397, upload-time = "2026-08-07T10:48:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/2e/0f/1aed6223d4f9f9d1171a8596ff100ea4c3f7699fea7a4ba657c3e60daa6c/librt-0.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b845b8d48088fad0cadc84be4b8fda63203be7e9237b71015b3925443c1f35ab", size = 722542, upload-time = "2026-08-07T10:48:09.569Z" }, + { url = "https://files.pythonhosted.org/packages/c6/22/9e3a929aea456c97d69e6ef3884efea56d4807f97399471cc946baebd8af/librt-0.15.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b30e600e8f337b9bd7f39b86d9fdfedc73cc46e3d0f745931a23a234220bb7e2", size = 729709, upload-time = "2026-08-07T10:48:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/e9/1b/c327ef6018e3a9ca0b8e7c5eddeeb331ba8f9b76c24e126d37d0f6d62faf/librt-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:64b0c8c35aa4c4ed79896359f3e0b285cbe4e610042106500da4811c322cc108", size = 752891, upload-time = "2026-08-07T10:48:12.558Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d1/d5f1ea02c56930087009e39db9b70660a663e76c730b27b925d786718457/librt-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0da0d94cb802f32a0524653e7201f2cef72d5f700a5407678f5290483d4fcd08", size = 745301, upload-time = "2026-08-07T10:48:14.55Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3c/5f7c585d15ebb2250c73e7c0ee4e9e47be72c65d520c07ddbcdc62037674/librt-0.15.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4a6369168d371207339b1e50d4532b06a7121586141f82599505a3f315751d47", size = 747921, upload-time = "2026-08-07T10:48:16.453Z" }, + { url = "https://files.pythonhosted.org/packages/7f/52/1443a446486eba966bcbca1696b472e4f210320ec42f490a47f48fbf0fdc/librt-0.15.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c434e072557ade9cbc642d052c89d031efe47d5c9614523619d0d74a02378e81", size = 727561, upload-time = "2026-08-07T10:48:18.089Z" }, + { url = "https://files.pythonhosted.org/packages/79/91/2270a9380f11725cf83ce1925a5e32dd1dde2be9bba597f25c10a38644e7/librt-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7eec6a42018bc1d45763b1c162d3d2bf7c3b9a1b0ed30d3e91dcba390efefcc", size = 774417, upload-time = "2026-08-07T10:48:19.611Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/f4b1548d4f5b99186737fe27aec238e9823e8d5d23bf4df007c030689dc5/librt-0.15.0-cp314-cp314t-win32.whl", hash = "sha256:6912fa5e635d74529ac7cdb1bdf6ca3af4453da8d1edbe0110ee1cb4ad407ebf", size = 104381, upload-time = "2026-08-07T10:48:21.048Z" }, + { url = "https://files.pythonhosted.org/packages/80/b6/134afad262def1de04c0843c376d02135f1168af43f22e09a52bd8394727/librt-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8e11699ed745931c395acd3621b07062e0f840efa6935aad87a64ed0995f0915", size = 127034, upload-time = "2026-08-07T10:48:22.561Z" }, + { url = "https://files.pythonhosted.org/packages/99/5f/1b6846b20572bd699c9e9ec321a5f781845bee477df2aa2a43b28bc40119/librt-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5d2a91724463bfed4f573cd7a9fdc856d2e230d0c0e5a61416a93481dccd8605", size = 110827, upload-time = "2026-08-07T10:48:23.804Z" }, + { url = "https://files.pythonhosted.org/packages/c6/44/4de9f4ddadb009a55c7758eb5736d62534a7daaf27bd71bc50e64b606b06/librt-0.15.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:8443e38dcfcfdbcf5add5118c623efd788d65ac2e25756d6251a54a06a4d0aca", size = 149843, upload-time = "2026-08-07T10:48:25.148Z" }, + { url = "https://files.pythonhosted.org/packages/1f/eb/5d9ab71e30119c44094e0275f38b47dd327aea0f843a080396677029d508/librt-0.15.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6d15a29033c57490cfe2069097c6fc4049e4e65ffbb749be7dc453b7c4c68965", size = 154510, upload-time = "2026-08-07T10:48:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9c/8505d1b8f5e8c19587bd03f7429993b3e9ce5c06819d856bfb11d919374c/librt-0.15.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2c05c729b589e734c09578bf5964be48a911765484840d017bbc84f49d4c4ad", size = 497543, upload-time = "2026-08-07T10:48:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/1d/9a/3a8390775cb095765aded027ac9c63e7c8ea74e731498607544c6505de0e/librt-0.15.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:fa60887537e1d0cd2d9982269d33a709bf54b195cd2b9364fc0a758022af5bd9", size = 480452, upload-time = "2026-08-07T10:48:29.531Z" }, + { url = "https://files.pythonhosted.org/packages/e7/40/258a4a7117ee915d66de5cd9b8ade65a440993161107ce3a686f1859955c/librt-0.15.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d8bc24219b24c0af375718942ab75e3544b2763085f40f965be4326734ae8328", size = 507768, upload-time = "2026-08-07T10:48:31.007Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c6/2f4dd296c97a0b85b98894519b279408ec9dd602d4f692b1ea0e25dee670/librt-0.15.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86a21a7bd3fe3a419512ef424cc1c020f6771d0b29cfddff36d1635a855e63f0", size = 525122, upload-time = "2026-08-07T10:48:32.7Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/29eab42be13b2bf0ea8cb227135a45d44693e30a7e8b92871981ff56b82b/librt-0.15.0-cp315-cp315-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dbab647e88d90b3167b91efe7091e248653688ed4337e4f90907a722c7361bb9", size = 520371, upload-time = "2026-08-07T10:48:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/4bad71adeca8fe208b775c2a35417fa5a2584c8f4791daaf89a89450fea1/librt-0.15.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d8edcf6f550e918dca779c069b9e156385c60b406f99fc7641f32c52f7193659", size = 537258, upload-time = "2026-08-07T10:48:35.88Z" }, + { url = "https://files.pythonhosted.org/packages/4c/63/59dba6143fdcc7240c54458b629f3250000a61b8945890fc9efd451b19c5/librt-0.15.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:8b62076030baa2d8b1501a46bf0e19c27a489aa90671c55665bff7887f7660b0", size = 527432, upload-time = "2026-08-07T10:48:37.466Z" }, + { url = "https://files.pythonhosted.org/packages/ec/21/21a24c6a2327d8362580efebe77286bf47b0f4062ec5ea41766e609d3c7d/librt-0.15.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:d00d20d1818e82a07a0ee0aa89a98b17ed7916b92441090b683719cb20a59b6d", size = 548108, upload-time = "2026-08-07T10:48:39.384Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6d/fc68c89a7971418b41f9a873623ff935cb864097544c6a2f8ce491c8ef5d/librt-0.15.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4e6ee93fc3cf848dcbf0cce2eca73d8e7dcd0cc2b6df3a529d57750b30a4c55c", size = 529681, upload-time = "2026-08-07T10:48:41.392Z" }, + { url = "https://files.pythonhosted.org/packages/65/7e/c2d98766124400d722063a630b0fde38a9fc768705d37eecca15c47dc192/librt-0.15.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:32896a0af72508ea979e0acb4e4c04cbeeae04938167950d535c83c45597167d", size = 567736, upload-time = "2026-08-07T10:48:43.124Z" }, + { url = "https://files.pythonhosted.org/packages/55/6c/f8c34a95e3a515c6e1c192b89511e7253c89a7760c6b500d57ffdb8d2dc8/librt-0.15.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:ec3ba415afaf951f6951b1dd16d3c8e4f540065fc382d7e70b823a79567ca374", size = 81673, upload-time = "2026-08-07T10:48:44.645Z" }, + { url = "https://files.pythonhosted.org/packages/c9/9e/e23fa8e78679ec45728188650b39e8ff476c83b691c96f749217df3b1b7c/librt-0.15.0-cp315-cp315-win32.whl", hash = "sha256:d2813ba2503764f0450680c533d13df7cff9b49df1411062eded5f67db4195b9", size = 100081, upload-time = "2026-08-07T10:48:46.171Z" }, + { url = "https://files.pythonhosted.org/packages/e1/dc/3eb4c5e297343f0620a55532cd7c8d764d3001fa2159212dadf480464827/librt-0.15.0-cp315-cp315-win_amd64.whl", hash = "sha256:b87d67e33afaf265262f2a66db578284b88ee2e6fcd224579cb5c15518677ad8", size = 121228, upload-time = "2026-08-07T10:48:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/97/70/43abce19f04e49762f8ec834c8fafee13cc40fd6b94a72a24e534febfcd0/librt-0.15.0-cp315-cp315-win_arm64.whl", hash = "sha256:713bd7df21170b982e729e46870f31d6b437bd1a9b4648cffb529bd3c2ec5c4b", size = 106487, upload-time = "2026-08-07T10:48:49.095Z" }, + { url = "https://files.pythonhosted.org/packages/de/15/83f2deddb9368b8951ec8c9477269b5b9b8bd9bbf15e57402d0f38817dca/librt-0.15.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:3de789c82752730f94782a5ee518baf9c05edf85733aeaf73bb6e518755cdf54", size = 159448, upload-time = "2026-08-07T10:48:50.649Z" }, + { url = "https://files.pythonhosted.org/packages/06/bf/043097353f9b3c73b583d07f6b8e552795463f4bfc8caf85e42eee50c26a/librt-0.15.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:e0b5deec9a8664eb722c797241970fd4aa1894d25fda36a1ddac0f7407606bd6", size = 161686, upload-time = "2026-08-07T10:48:52.174Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2a/8ae77f9719d42ce71cd708560a3557b38ac3c17a0383e57f87084de45bbe/librt-0.15.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5563302a8359bc2295bb7084d1a8ed1519df96afb30eb2aa4e0bff7b54228988", size = 710668, upload-time = "2026-08-07T10:48:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/61/34/c0436ea134deb9a0d6da80a396a2739a81cb31e0418f7227239e23140898/librt-0.15.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:22d6263b9d39d7bbb286fa791945646e3218f1be2d693e36fb630f1d0e59cd13", size = 679396, upload-time = "2026-08-07T10:48:55.645Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/001e0d99aa9250d5cd5715a9081291a20656083459f9019cda15255329e1/librt-0.15.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39ffd14646190c454f0d86e0d256b33f00a87a26ab410e619773b841d0e41416", size = 704313, upload-time = "2026-08-07T10:48:57.46Z" }, + { url = "https://files.pythonhosted.org/packages/2d/53/b34fa9d0ff00f136f4d58ebb4c411ff634baed1eb412bb602a2bc8dcafcb/librt-0.15.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c47318cd3a61401452de11282242937e3e057c4fd3dbaf601e269d0928a06c0a", size = 729847, upload-time = "2026-08-07T10:48:59.231Z" }, + { url = "https://files.pythonhosted.org/packages/86/ac/fa4d7a424665040e95baf480a6d523446057684b6758624c85338e8a23b2/librt-0.15.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a56a1d4f859a82ca5b99fc4b82c9b027b15e3c455c5cd99e7d0719f27bb20b6c", size = 742736, upload-time = "2026-08-07T10:49:01.151Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f1/e17a9bb5de6fb8c3186ed1a7d68d21618b027ac2d3633e03d3b6109c67ae/librt-0.15.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:077471b3182db4e17c36ae91555f36a4d2c00080b267f749bcad34a478a9a302", size = 763454, upload-time = "2026-08-07T10:49:03.039Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ec/ecd02cd30935b931b9cdbfed6ab5a099c51b280b4e7baa274da80978ed27/librt-0.15.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:411ca4d1b905b860ceba7570dd6717a71dedaddcc4b0f77ece710aa41ee11f8d", size = 743296, upload-time = "2026-08-07T10:49:04.941Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b5/b3c2b8353ce820a4854f78d19321344242f89fa71c975b71132ba9bf242a/librt-0.15.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1256589e0b0adb31751d685a68bce29d73407ddf4ef05d4188f49d5dcf9566d9", size = 756217, upload-time = "2026-08-07T10:49:06.825Z" }, + { url = "https://files.pythonhosted.org/packages/3c/52/6cc22542ba59146b05cca2a656f9ff8bb67e38e63d12c3b0cc183d837bf1/librt-0.15.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:f42b74a53e5f26a0ba0007411a7455b66c67ce4022a39cc1f56fc4efd65bcbab", size = 741934, upload-time = "2026-08-07T10:49:08.839Z" }, + { url = "https://files.pythonhosted.org/packages/40/32/a04b72b1aa86e3be23b2ecff8c1aad2dcc955bd3956d6d26e7e34267e57a/librt-0.15.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:291bf73caf78b9e88d6fae9bfd693207ff7d832e2fdbe2cf8e746bc13f5f892b", size = 783763, upload-time = "2026-08-07T10:49:10.661Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f0/89eb11dffbe9279ff37144dec786927314502ae0b114f1449dc78c458aab/librt-0.15.0-cp315-cp315t-win32.whl", hash = "sha256:c16d15ee371643ab48dc8248a3e680ebbeca573a13af2c3dd0c985b142d77162", size = 104313, upload-time = "2026-08-07T10:49:12.305Z" }, + { url = "https://files.pythonhosted.org/packages/6d/4a/1f1978c200f563beda63c36adff2d65bbecb81e365e8e69e572f5f70fbc6/librt-0.15.0-cp315-cp315t-win_amd64.whl", hash = "sha256:dbd605739f228912dc49027cb764456b9757750bdc2b6b7773164db7096c6fd1", size = 126889, upload-time = "2026-08-07T10:49:13.881Z" }, + { url = "https://files.pythonhosted.org/packages/38/a6/800800bfed7b1fb10fc3f3d557785c3854e80d3f7a9800d784b176a1fc2d/librt-0.15.0-cp315-cp315t-win_arm64.whl", hash = "sha256:84d244b00604d17df3fc7736c327892d6bba66181254aa4087be807b6c342bdc", size = 110700, upload-time = "2026-08-07T10:49:15.499Z" }, +] + +[[package]] +name = "mando" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/24/cd70d5ae6d35962be752feccb7dca80b5e0c2d450e995b16abd6275f3296/mando-0.7.1.tar.gz", hash = "sha256:18baa999b4b613faefb00eac4efadcf14f510b59b924b66e08289aa1de8c3500", size = 37868, upload-time = "2022-02-24T08:12:27.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl", hash = "sha256:26ef1d70928b6057ee3ca12583d73c63e05c49de8972d620c278a7b206581a8a", size = 28149, upload-time = "2022-02-24T08:12:25.24Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "mcp" +version = "1.29.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/48/0bb26fdfe7ac16875f534a101ce2405eae192bdef37e7451f2f4507c13ec/mcp-1.29.1.tar.gz", hash = "sha256:1967ba4c315f7a375146209949f45950d18b0efd2f913d7cf3400bc723ee5f04", size = 646823, upload-time = "2026-08-24T18:30:41.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/04/d6b4fb82eefe9e81807aabca1ac98f460ae0883974b83a997aaa20c52545/mcp-1.29.1-py3-none-any.whl", hash = "sha256:b6310eeb59153300c4ab8b9aec4c52f4819a2d6a8e429eb43d908bed7c783648", size = 224653, upload-time = "2026-08-24T18:30:39.573Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mypy" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ast-serialize" }, + { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/6a/878cc1097d4035f82bd516658d0c528d2a9955bc7b363afcbd0b07fea11b/mypy-2.3.1.tar.gz", hash = "sha256:47c1b1207258513a9d93495f69c8be9de73916186f0e52703e8c461b7a623419", size = 3992554, upload-time = "2026-08-15T03:03:38.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/b9/de8f67e12d721cdcc8ba6cfc440b989a4ba4dfabe4402ae94dfdd8bb30a4/mypy-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:57a936373fc690c43a8cd7e7e12a35148e4ec5aa7698ad7fc0a9f918bdc5be41", size = 14015541, upload-time = "2026-08-15T03:01:53.104Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8a/9e746ab012c67ed8ea3232a613716c306ee8c0b5682c80d8103b4f04568e/mypy-2.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d00d769056bde2f4e69c175071eba45cfb44fa1ed92bdfbfe64a93e0543b0cf0", size = 14248142, upload-time = "2026-08-15T03:02:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/f7/5c/c99ff2d8d0e2c53393e32dfe22d9aa43a5d959d30db46c786dafd24527d3/mypy-2.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2166b29228835e1f88ff411e96639e6ca3c7fdde84b62ec211f70f86b4051167", size = 15193309, upload-time = "2026-08-15T03:01:28.714Z" }, + { url = "https://files.pythonhosted.org/packages/64/39/124638f745243faae1ff4b37d5426fe41c0f0454535edc82fe8102b56a3c/mypy-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:83d36c2924df7426333abe7faf4724a7e1aab0d9fd41625e81b4683034b80c13", size = 15498246, upload-time = "2026-08-15T03:02:46.29Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/31c0781e243836505c0fb5f4e865487d6df1023e4ad959f4ebd4b84a0226/mypy-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:f12fdb70459d0060dea40b29e52163a961b156106d68d57882a6a9f648983a53", size = 11155028, upload-time = "2026-08-15T03:01:39.08Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ab/bc2eb0129e72d7d7d93d5e981a78084a9abefda7efa732a7e02f97d6e27d/mypy-2.3.1-cp310-cp310-win_arm64.whl", hash = "sha256:e099200a1b1b1223a4951f0a90cbff1b8c91b250ba599dab1f7217a628144d90", size = 10151438, upload-time = "2026-08-15T03:02:19.04Z" }, + { url = "https://files.pythonhosted.org/packages/a4/be/c624d4241484f37dc62839e177ab607a9b8b3e96f0866544ca99e8e41d51/mypy-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94f04929f1c44c35fb0061e912087edaf504acede963a4a7d00680bd089d8531", size = 13936739, upload-time = "2026-08-15T03:03:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/53/84/e3cf72f90dce5960871c82551c8fba6da05fc1018f79be41c047bd126bdd/mypy-2.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5d716048611e85ca9eefb2e1baa5d73ede389b5820ded260ea27c757d667af8", size = 14166460, upload-time = "2026-08-15T03:01:50.565Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ff/6b97d58aa0f79a5ab9b472db1f6d6df1b11a51d74d0c08ab3760d3a613ba/mypy-2.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b091a455111214cb5c9d54a57b9618e9a49f9fe2a42e4e1ac86e9d104ed96ce8", size = 15100476, upload-time = "2026-08-15T03:03:12.079Z" }, + { url = "https://files.pythonhosted.org/packages/da/f0/cbb4b7d2ae3ac635f6b4f2d9b04070b8a92edf50da599d3b39e5ed109001/mypy-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df12e20c9efd614738c71b390007ecd0181125afc4ccafca04d78a1d2eed2c01", size = 15347826, upload-time = "2026-08-15T03:03:02.856Z" }, + { url = "https://files.pythonhosted.org/packages/5f/10/91dcdc6f8d43fc08e6a06ab1f9732f3abaaf835ac1b2e67b9dff56910855/mypy-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:52eaf3a155f35cf80b40220288c861eb45f14a2340c1f6cbfbdb0feff32879d1", size = 11142615, upload-time = "2026-08-15T03:03:36.316Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8a/28d54535bf4b9aa43b2d8918c2ef660378b9f66b23d78dcee052744ae622/mypy-2.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:9b4eacbee8a69836c06eff6d0dd4e134a07c2b047755b30c08625fe214f322c6", size = 10141145, upload-time = "2026-08-15T03:03:07.406Z" }, + { url = "https://files.pythonhosted.org/packages/85/da/d6effc4f808a842d91edc22535dc9e799d2ff6e91449168b7f47a0771f54/mypy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a32bbbb940af990d3be0b8af321c7b6815bb1b3b48142fe7459b9cc5f58959ff", size = 14047547, upload-time = "2026-08-15T03:02:57.707Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e6/478229701dab76f26485fc8ff5d6f241f393da22447400bbc56f6946aebe/mypy-2.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff715e45b2231a8e85de1d163d1b42791e4d7aab8f5145f85fee1b710b735aff", size = 14216515, upload-time = "2026-08-15T03:01:26.496Z" }, + { url = "https://files.pythonhosted.org/packages/8d/fe/7c42327a3b21e84681f691982cbfe43f334a3685f3b683b72c376476c4fa/mypy-2.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:858fc57d3d91fa728e33e7ad71def60fc6272694607b306cd3292db53ae39080", size = 15307789, upload-time = "2026-08-15T03:03:31.62Z" }, + { url = "https://files.pythonhosted.org/packages/59/f4/7e597edbe01b5a56fa958ce541302dcaabfed979966f1dffedbea0ea0fc2/mypy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:851833db876e7b650f93719c74b7879a08e338979c96054fdfc3bfd90a486355", size = 15548831, upload-time = "2026-08-15T03:03:15.55Z" }, + { url = "https://files.pythonhosted.org/packages/a3/52/cb31e084bc0314a1e384bdd677a4b80e55af04ccac077545e2238b9d320a/mypy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:4c5095a327483591c94e0c8d3ef9e50d4ab1369b541eae007c1f23bc2a41f6bb", size = 11226359, upload-time = "2026-08-15T03:03:29.002Z" }, + { url = "https://files.pythonhosted.org/packages/7a/47/88fcf6217b43fa2da81a8c2611370af18141536a4f0294bbf98b457d456d/mypy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:bbfe022634a2a195406bd469e888d2eaf193b02ba7e607391cd7640374aaae3b", size = 10214707, upload-time = "2026-08-15T03:02:48.807Z" }, + { url = "https://files.pythonhosted.org/packages/de/cf/862010ee800ca9c2bd0c4c0dacf0f092e5411824a09b8f97ad4be8fe250e/mypy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:114dff494000f18bd10d5d95d84b8567b26da60279ecbe838131841df20e635d", size = 13964542, upload-time = "2026-08-15T03:02:21.43Z" }, + { url = "https://files.pythonhosted.org/packages/75/5a/3f3a2107b41e3e92e617e25daaee121413b91e9784bea733131ed4fecc5d/mypy-2.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8637731bb5eee3671eb2c3200827aa3564ed8a9309ecee4d1afe77e6d031bdb", size = 14168922, upload-time = "2026-08-15T03:03:00.351Z" }, + { url = "https://files.pythonhosted.org/packages/8b/41/04dc4fe7e63d7820fa4eff272e95157d30cbea921388f3ab3fe77794cd0b/mypy-2.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c80fbc405ed8020f5ff3802dc18cf060197bcdd3fbdd6a26ef2fd34dfdd5226", size = 15244791, upload-time = "2026-08-15T03:02:31.089Z" }, + { url = "https://files.pythonhosted.org/packages/96/fc/c3053b26b9054949285aa868cb6af8c10e7591541cacd79c5dcc06a1fcf9/mypy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:84081f538ce27375045c02e3d7f81bd11d853400621ae245d87ce7b6c420ec74", size = 15501627, upload-time = "2026-08-15T03:03:34.128Z" }, + { url = "https://files.pythonhosted.org/packages/70/4e/d77daab008bbc4e5001374d7928f4a260d28f0e6747af444fc4763f7a310/mypy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:e9144ac16fde007096f9563eb2041b4433c2d705c4218edeb79e7e9d01035ee6", size = 11243961, upload-time = "2026-08-15T03:02:11.952Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f8/7eb68c136e4abd30569fe31ef2bfcb7eceae9952cab80017c04cd09f5d0c/mypy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:77ad9529e67dca28e511f5cd5671436584ce91f6d3bac159a353158187b986ac", size = 10213219, upload-time = "2026-08-15T03:02:26.361Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:192abaedf75da1bc0b1cef104927e70ec49c1ef0031cc4825c7ee10a438ed24d", size = 13986778, upload-time = "2026-08-15T03:01:33.69Z" }, + { url = "https://files.pythonhosted.org/packages/45/13/9331fd2dfed7194d66c5304072894a8be3e51e9deda6863c1eceaa35a43d/mypy-2.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf678dffd16efcda2c15cbd30e9ecc0081388e29ea23687a88e686ed92638dc3", size = 14188467, upload-time = "2026-08-15T03:02:40.554Z" }, + { url = "https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e036f06b41630f4c8a1d48f9ac6aa26acc65f8be089973f5519da643318f03f", size = 15225538, upload-time = "2026-08-15T03:03:09.761Z" }, + { url = "https://files.pythonhosted.org/packages/40/05/534b3590757bd05794f73e07f6666c2a77b8597ffed795c94ce570096aa0/mypy-2.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:71af9c8a894e862b58e92abb08e53b05a384a1e5e5d6dc7cda59126211a53d82", size = 15480805, upload-time = "2026-08-15T03:01:41.134Z" }, + { url = "https://files.pythonhosted.org/packages/55/da/bdfba852e2562f599624af5bb7d29e36b0b4f526f2b8bac85efe0dd1803d/mypy-2.3.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:3c80cd23d85368bdd9f37d5231dfd97d35bcbf5bf41af96ef3a9b078ad1957f9", size = 7761712, upload-time = "2026-08-15T03:02:36.008Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:4956f34d145e145562a0a0bf367f642bbc85c04ec2baf47ae015947c3169a85d", size = 11423968, upload-time = "2026-08-15T03:02:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/a9/23/eb5950b24cd26ba3b78f87707a275568d633c77dae8e61c9661be6055ca6/mypy-2.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:cfb12e360242d23d91f5e978d94f58ea66acf5804c4fb6f2f794a20d4cb1b595", size = 10399323, upload-time = "2026-08-15T03:02:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/82/c7/f80f4e46c0b9a00eb5f78a79d49dda8bdf56a5230f7257fb33e76be04da7/mypy-2.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5f1c50bb05b64e2026b52867e8d21106f01313c744a2c4ecc34c90d12e8d6e2", size = 15121308, upload-time = "2026-08-15T03:01:46.053Z" }, + { url = "https://files.pythonhosted.org/packages/5d/74/9b04f17c7074cc5188f02fb63a2ca1d43fedf479e84fe3091c39061a1d7f/mypy-2.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:667196b352f4cf304ded4c10f90cfc179263a1acfb3cdcfa984bdfd340d498bc", size = 15536590, upload-time = "2026-08-15T03:01:35.941Z" }, + { url = "https://files.pythonhosted.org/packages/26/04/c837ef6208e567774e2ed1f863f8ba6ec4817b1b6dd426315e5d559b6ec9/mypy-2.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9c53e395c12cad2c6d4b67d5da7c6057638a132d85c08b73646b18f802a0045", size = 16791074, upload-time = "2026-08-15T03:01:31.073Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/48730230afa45192d5bd429a6a2ff24a6f8dedda90fdf2b221792b54518f/mypy-2.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:18162b128c3f9c703cd35f5537446900b0d21a2549aa7a95d21380d2ef643fb0", size = 17069183, upload-time = "2026-08-15T03:02:28.566Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ea/ca23fc9c20eeda09a15c9cbcf50015d0e73f409f6ead059e42aa69a608ff/mypy-2.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:30c0477d4aab7b7f39c8397dc877f2c96b9fe5588ec379f372c56eb63d599f63", size = 12154679, upload-time = "2026-08-15T03:02:04.809Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/8d982126034990869466f73b8db80dcb2234a7ac39b4dad093e047a79835/mypy-2.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6941ab3619377bc3f32ca02876b07d27f216f5201604b664d3937ea0fdd23bb4", size = 10969159, upload-time = "2026-08-15T03:02:38.152Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f7/41e7f2d8117fbc7a7587286162ffe2f688984b69c46ed63cf5f2e4fc3bae/mypy-2.3.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6f041a6de52c9217ca125e78ba0a335cb7fd98a1c0580978e49ab2b126f70b57", size = 13990694, upload-time = "2026-08-15T03:03:21.919Z" }, + { url = "https://files.pythonhosted.org/packages/06/85/8f665811a0c8f3bf6fa1d9acd665ec2d97a2bcc453ae68dcd92340941cd6/mypy-2.3.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5159ae60f5dbc3a498af5ba8365505808ac8031bc63f9e00304ad545d40bdd9b", size = 14203518, upload-time = "2026-08-15T03:01:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/2d/82/91b866c8546b120bff83b73a439d90d2d63ef3aff113599e6b8e4d566848/mypy-2.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47a8a7a0a7f6f6e63995c0ac36fa0c07b127413fdc81f0439b7f3dccafd33561", size = 15220224, upload-time = "2026-08-15T03:01:23.577Z" }, + { url = "https://files.pythonhosted.org/packages/c8/78/c226c99208ee40de7c768369fa533f933afa003dfdc606ff021450724e91/mypy-2.3.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2329c0501293d4e1f33bc15d04d6304d65a1cdda967ee93a05c1e681a3923133", size = 15501512, upload-time = "2026-08-15T03:02:09.453Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e7/7cfb3f106c393979f4cc37ad6c0586044d50401e3c35b0c003e4f3ba6bc9/mypy-2.3.1-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:bb26deed807bdb0457cf3e3f1cd7c4a1cf9d66864eaf1b4a61e06805d4c6b1f9", size = 7761913, upload-time = "2026-08-15T03:01:55.65Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/52affefa273b97939a1f474ae4a349c8718635c15b941112dfab4291b0c1/mypy-2.3.1-cp315-cp315-win_amd64.whl", hash = "sha256:375d7013876a8233b2d05be185bfa09f689696cd999ce8b1cfe6acac5c80e8a3", size = 11422533, upload-time = "2026-08-15T03:03:24.101Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b7/75643e70c72a5b346d8a9b1543c967ea8824df2ee3fb7ccba652c272b7bb/mypy-2.3.1-cp315-cp315-win_arm64.whl", hash = "sha256:586b3612214cceabb3c0f588c97e7d1e535393f06a60e912e994f6b3ace97523", size = 10397931, upload-time = "2026-08-15T03:02:55.265Z" }, + { url = "https://files.pythonhosted.org/packages/10/ce/53be21f2d4adfcd26f63f1184a13ed797015ab463853f117e2e11e4d726f/mypy-2.3.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:ef0c6335cda9d807f8193d8ff6204a72bc909fa9882aacbca14f43cdb7188306", size = 15118669, upload-time = "2026-08-15T03:02:51.479Z" }, + { url = "https://files.pythonhosted.org/packages/62/43/20de757cd42989d291a17fad607742c4c74e875ce5cea00e5a5225020ac1/mypy-2.3.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e598c8c66401d26b150872154a286e6d484cf2789c3bb28a7556806298423021", size = 15545627, upload-time = "2026-08-15T03:03:05.132Z" }, + { url = "https://files.pythonhosted.org/packages/7e/fc/092bdf77ad280eaf501422f0f3b966012b528076cc13e41a774861c907d1/mypy-2.3.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eda22fd4efa9dcd39331d1dede9b5b8b8a7fd69af07592e778433da98610d29e", size = 16764157, upload-time = "2026-08-15T03:02:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/94/5c/c94c4d62d909b07f552d0d9356d7acc943825558e602a64822ffa2231536/mypy-2.3.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:2a0ba2e57847849fb0d1fcdabb32786d223095ed8bc121dfe322bcdb3d9c46bc", size = 17073258, upload-time = "2026-08-15T03:02:14.573Z" }, + { url = "https://files.pythonhosted.org/packages/c0/f7/511a88b89e478053c02d22039bb8f3ce4183efe8fd7a4f0a5910a8bb0a32/mypy-2.3.1-cp315-cp315t-win_amd64.whl", hash = "sha256:3f7e865dd51f235f60a2dbcd8728a1c095f5ca28f095d48a725b84cd935735c4", size = 12135505, upload-time = "2026-08-15T03:02:16.714Z" }, + { url = "https://files.pythonhosted.org/packages/71/bf/02573b56964ecb0f7c644f915f53c325ae15c3faec521c5adf11599a32df/mypy-2.3.1-cp315-cp315t-win_arm64.whl", hash = "sha256:8ad80807dc3ab8ea978b1b2b6e4a657194ace1d4ef03e0e731aff1abd517da29", size = 10962647, upload-time = "2026-08-15T03:01:43.712Z" }, + { url = "https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl", hash = "sha256:6ed5c7e3419083268e5c9258bd1c1ef91af44a9e89374dbcaf37b775716e72eb", size = 2754338, upload-time = "2026-08-15T03:02:53.4Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/bb/ebc6636e1ae41314f796ebb7215fd28febb45f9aac72f2b04cb74b5071dc/platformdirs-4.11.4.tar.gz", hash = "sha256:f3373be828247211d0febabea97e238c3dfde8a60b3c90c32756fb52cb21556d", size = 34079, upload-time = "2026-08-24T14:53:49.676Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/be/0ff05fcd2938fb58ad9219bd54135968342d214737e012d62d43f06a2dd6/platformdirs-4.11.4-py3-none-any.whl", hash = "sha256:e34ff91a24bcddc6d939b878bdf3f5c437c9c46fe9e212b1bf455fdf1ee57586", size = 23741, upload-time = "2026-08-24T14:53:48.406Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/89/1f3e8e1fc3e97de0fa963495832f581f025f29471602a309e48808244292/pre_commit-4.6.2.tar.gz", hash = "sha256:8f5d7bfb021ecdbcd9d49d89847082dd24172ccde534390081a679ad046e2441", size = 198670, upload-time = "2026-08-10T22:07:18.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/e2/bbb7129c9e7999a6b8ee9cca3b66486c25c423ab5a75f34071798b74ce94/pre_commit-4.6.2-py2.py3-none-any.whl", hash = "sha256:e2dde9a75d3bce11bd3831c26d134df00a2803c1d818be6a0383c3dcda25dc4e", size = 226202, upload-time = "2026-08-10T22:07:16.942Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/ca/31c57507b13119d7d3cfa1576dad2911a4861e3be07b579395f4e9d393f9/pydantic_settings-2.15.0.tar.gz", hash = "sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117", size = 261253, upload-time = "2026-08-07T09:24:57.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/a4/2bffa9f8e804325a09867f0e9d30795c80ea9f8d62560bd1b6ad6220eb2f/pydantic_settings-2.15.0-py3-none-any.whl", hash = "sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42", size = 69413, upload-time = "2026-08-07T09:24:55.839Z" }, +] + +[[package]] +name = "pygit2" +version = "1.18.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/ea/762d00f6f518423cd889e39b12028844cc95f91a6413cf7136e184864821/pygit2-1.18.2.tar.gz", hash = "sha256:eca87e0662c965715b7f13491d5e858df2c0908341dee9bde2bc03268e460f55", size = 797200, upload-time = "2025-08-16T13:52:36.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/54/a747b5a80698c22b7e510de61facaf7b7dd196fe4540d0d28eb05eacaeba/pygit2-1.18.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a84fbc62b0d2103059559b5af7e939289a0f3fc7d0a7ad84d822eaa97a6db687", size = 5509510, upload-time = "2025-08-16T13:39:01.887Z" }, + { url = "https://files.pythonhosted.org/packages/d4/bc/865c6090efa25a5cfe7e1d2cec28c2515a2d7239d3b428f36184af6610ac/pygit2-1.18.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c84aa50acba5a2c6bb36863fbcc1d772dc00199f9ea41bb5cac73c5fdad42bce", size = 5762592, upload-time = "2025-08-16T13:39:03.06Z" }, + { url = "https://files.pythonhosted.org/packages/41/96/69a408e57fd68555e1bdb134a15edb4cb77a24ba266dcbf6edf6d5d4a807/pygit2-1.18.2-cp310-cp310-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7b8570f0df4f0a854c3d3bdcec4a5767b50b0acb13ef163f6b96db593e3611f", size = 4599930, upload-time = "2025-08-16T13:39:04.66Z" }, + { url = "https://files.pythonhosted.org/packages/aa/bc/ee2335c98995cce3dfec7ccd54fff027b769a839832457fa784fe14e4538/pygit2-1.18.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cccceadab2c772a52081eac4680c3664d2ff21966171d339fee6aaf303ccbe23", size = 5493592, upload-time = "2025-08-16T13:39:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/31/54/af78c3870c62b3bbfe86ed1f2ee1f46a8a43c1db70c0d35769365fa8b145/pygit2-1.18.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c51e0b4a733e72212c86c8b3890a4c3572b1cae6d381e56b4d53ba3dafbeecf2", size = 5760887, upload-time = "2025-08-21T13:32:22.347Z" }, + { url = "https://files.pythonhosted.org/packages/23/de/419658ecdbf37e89094b171b63c941774ff46d1bb6f65efd40f0c25d1df9/pygit2-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:970e9214e9146c893249acb9610fda9220fe048ae76c80fd7f36d0ec3381676b", size = 5460906, upload-time = "2025-08-16T13:39:07.633Z" }, + { url = "https://files.pythonhosted.org/packages/c7/91/bbaca03aa624915c4dd95c60961f34d683b069249c0f25d1faef29195873/pygit2-1.18.2-cp310-cp310-win32.whl", hash = "sha256:546f9b8e7bf9d88d77008a82d7d989c624f5756c4fba26af1b8985019985dc8a", size = 1238396, upload-time = "2025-08-16T13:10:33.39Z" }, + { url = "https://files.pythonhosted.org/packages/53/a5/1d10b3e9d85ca62cbe5d5bbda611d3ca1f5fd0603910a00132b440bbbfd9/pygit2-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:5383cdfc1315e7d49d7a59a9aa37c4f0f60d08c4de3137f31d20e4be2055ad47", size = 1323973, upload-time = "2025-08-16T13:15:10.479Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c5/d3bd32443f4d7275928f7e07beb87b907401570e4a0b2d6b671909373d23/pygit2-1.18.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3fc89da1426793227e06f2dec5f2df98a0c6806fb4024eec6a125fb7a5042bbf", size = 5509503, upload-time = "2025-08-16T13:39:09.095Z" }, + { url = "https://files.pythonhosted.org/packages/71/e4/b26e970a493f65f646ec33ab77c462c6cb6b5527a11aa51b0b18bfe47642/pygit2-1.18.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6ab37a87b58032c596c37bcd0e3926cc6071748230f6f0911b7fe398e021ae", size = 5768944, upload-time = "2025-08-16T13:39:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/86/32/09d5ef009dd28529afcf377f4a767156fd105b58496405a815e4b66c1944/pygit2-1.18.2-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d9642f57943703de3651906f81b9535cb257b3cbe45ecca8f97cf475f1cb6b5f", size = 4606504, upload-time = "2025-08-16T13:39:12.131Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2f/13fddef74a8dd6080e24a0bbd19c253e13e293f52c282596b9e3d0dc9148/pygit2-1.18.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1aa3efba6459e10608900fe26679e3b52ea566761f3e7ef9c0805d69a5548631", size = 5500249, upload-time = "2025-08-16T13:39:13.727Z" }, + { url = "https://files.pythonhosted.org/packages/80/c5/235376a6908a4b7cf25f92e3090e4f3f9828af49d021299a89eae66ecf9e/pygit2-1.18.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:25957ccf70e37f3e8020748724a14faf4731ceac69ed00ccbb422f99de0a80cc", size = 5767739, upload-time = "2025-08-21T13:33:47.707Z" }, + { url = "https://files.pythonhosted.org/packages/a2/1e/e2f914bfa0e8ca0b7c518c32d1b2183254c21d7d1eca3e21d6aeb7ccf066/pygit2-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6c9cdbad0888d664b80f30efda055c4c5b8fdae22c709bd57b1060daf8bde055", size = 5467750, upload-time = "2025-08-16T13:39:15.414Z" }, + { url = "https://files.pythonhosted.org/packages/d0/96/ac263bc9ce48a4f9cc31437dcaa812cc893382a8837c32cfe4764b03127e/pygit2-1.18.2-cp311-cp311-win32.whl", hash = "sha256:91bde9503ad35be55c95251c9a90cfe33cd608042dcc08d3991ed188f41ebec2", size = 1238394, upload-time = "2025-08-16T13:19:37.689Z" }, + { url = "https://files.pythonhosted.org/packages/fd/98/7fae3f7779469f2f4514e20d887d4011953c0a996af4b7f6b8bb73de4c0f/pygit2-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:840d01574e164d9d2428d36d9d32d377091ac592a4b1a3aa3452a5342a3f6175", size = 1324157, upload-time = "2025-08-16T13:24:17.196Z" }, + { url = "https://files.pythonhosted.org/packages/bd/bf/469ec748d9d7989e5494eb5210f0752be4fb6b6bf892f9608cd2a1154dda/pygit2-1.18.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5eaf2855d78c5ad2a6c2ebf840f8717a8980c93567a91fbc0fc91650747454a4", size = 5504679, upload-time = "2025-08-16T13:39:17.017Z" }, + { url = "https://files.pythonhosted.org/packages/40/95/da254224e3d60a0b5992e0fe8dee3cadfd959ee771375eb0ee921f77e636/pygit2-1.18.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee5dd227e4516577d9edc2b476462db9f0428d3cc1ad5de32e184458f25046ee", size = 5769675, upload-time = "2025-08-16T13:39:18.691Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cd/722e71b832b9c0d28482e15547d6993868e64e15becee5d172b51d4a6fed/pygit2-1.18.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07e5c39ed67e07dac4eb99bfc33d7ccc105cd7c4e09916751155e7da3e07b6bc", size = 4605744, upload-time = "2025-08-16T13:39:20.153Z" }, + { url = "https://files.pythonhosted.org/packages/3b/50/70f38159f6783b54abcd74f47617478618f98a7f68370492777c9db42156/pygit2-1.18.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12ae4ed05b48bb9f08690c3bb9f96a37a193ed44e1a9a993509a6f1711bb22ae", size = 5504072, upload-time = "2025-08-16T13:39:21.834Z" }, + { url = "https://files.pythonhosted.org/packages/e9/79/5648354eeefb85782e7b66c28ac27c1d6de51fd71b716fa59956fd7d6e30/pygit2-1.18.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:00919a2eafd975a63025d211e1c1a521bf593f6c822bc61f18c1bc661cbffd42", size = 5768382, upload-time = "2025-08-21T13:36:33.4Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e7/a679120119e92dcdbeb8add6655043db3bc7746d469b7dfc744667ebcd33/pygit2-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3f96a168bafb99e99b95f59b0090171396ad2fb07713e5505ad3e4c16a41d56a", size = 5472093, upload-time = "2025-08-16T13:39:23.031Z" }, + { url = "https://files.pythonhosted.org/packages/7d/54/e8c616a8fe12f80af64cfb9a7cba5f9455ca19c8ce68e5ef1d11d6a61d85/pygit2-1.18.2-cp312-cp312-win32.whl", hash = "sha256:ff1c99f2f342c3a3ec1847182d236088f1eb32bc6c4f93fbb5cb2514ccbe29f3", size = 1239180, upload-time = "2025-08-16T13:28:53.788Z" }, + { url = "https://files.pythonhosted.org/packages/c1/02/f4e51309c709f53575ceec53d74917cd2be536751d4d53f345a6b5427ad4/pygit2-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:507b5ea151cb963b77995af0c4fb51333f02f15a05c0b36c33cd3f5518134ceb", size = 1324567, upload-time = "2025-08-16T13:33:51.181Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ff/34dc8ce51f2f9ba39a5f2b34b9a5d70563cc93a387accf562c5c36e40d2b/pygit2-1.18.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f65d6114d96cb7a21cc09e8cb0622d0388619adf9cdb5d77d94589a41996b0a8", size = 5504646, upload-time = "2025-08-16T13:39:24.164Z" }, + { url = "https://files.pythonhosted.org/packages/fd/b6/7990c465a5a6967df87323a8a90e19e9b393d238497c62d0aabcb98b9d62/pygit2-1.18.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9367df01958f7e538bc3fc665ace55de0d5b72da5b6b5f95c44ae916c39a6f51", size = 5771485, upload-time = "2025-08-16T13:39:25.386Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ad/c31064927a11cb39d4860bbf3a1a1bd944d9768e9c8faaa48b670e9359ed/pygit2-1.18.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:eb2993e44aaafac5bcd801c2926dcf87c3f8939ff1c5fb9fe0549a81acd27a03", size = 4607179, upload-time = "2025-08-16T13:39:27.264Z" }, + { url = "https://files.pythonhosted.org/packages/5d/da/29a3c808bfb42ba86e5aca226fad7871b65fc216e18e14190553a879157b/pygit2-1.18.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d5dc116d6054cb4e970160c09440da7ded36acfbc4f06ef8e0d38ac275ee12", size = 5505911, upload-time = "2025-08-16T13:39:28.623Z" }, + { url = "https://files.pythonhosted.org/packages/14/ac/c5afc7dd8ec0deb022ec8bbb5c938725438c40531ab9b6ad2b2d37730c59/pygit2-1.18.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b87e7ab87da09145cb45434e6ad0402695ca72ffb764487ecc09d28abef5507", size = 5770236, upload-time = "2025-08-21T13:37:22.808Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d1/1c6882900bf6e0d3d5764937acab7c79ffadb452e33230ba8e5e9dc35695/pygit2-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a0aa809fd5572c8b1123270263720e458afc9e2069e8d0c1079feebc930e6813", size = 5474235, upload-time = "2025-08-16T13:39:30.274Z" }, + { url = "https://files.pythonhosted.org/packages/b3/be/7d8233ff8c5b39ca3d4309fa35a097999baa755e92303102599680c05604/pygit2-1.18.2-cp313-cp313-win32.whl", hash = "sha256:8c4423b08786d0fcea0c523b82bc5ec52039b01500a3391472786e89cadf1069", size = 1239177, upload-time = "2025-08-16T13:38:39.619Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f8/d61973ec64a6a7afabec5d1308794399797b44daaacf7ae1969b0f83ddab/pygit2-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:aeba6398d5c689c90c133e07f698aeb9f9693cfbb5707fccffd18f2d67d37c6d", size = 1324597, upload-time = "2025-08-16T13:43:31.309Z" }, + { url = "https://files.pythonhosted.org/packages/17/3f/da4563009011dd5e4427740ca7fe3f1005158bf6c6670727e8e9d6078d8a/pygit2-1.18.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd82d37cf5ce474a74388a04b9fb3c28670f44bc7fe970cabbb477a4d1cb871f", size = 5318756, upload-time = "2025-08-16T13:39:31.435Z" }, + { url = "https://files.pythonhosted.org/packages/7f/08/0aae26a1c74aedfe99b6f529011cd6e9f335f7840a0e92aeaa4620bcf117/pygit2-1.18.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:991fe6bcbe914507abfe81be1c96bd5039ec315354e4132efffcb03eb8b363fb", size = 5043500, upload-time = "2025-08-16T13:39:33.006Z" }, + { url = "https://files.pythonhosted.org/packages/57/91/f6655a5d171c0a080a7507b8d6855067f4365b326c0d946c6af12a633a80/pygit2-1.18.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d801d272f6331e067bd0d560671311d1ce4bb8f81536675706681ed44cc0d7dc", size = 5317765, upload-time = "2025-08-16T13:39:34.222Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c8/288d1a56092b3e01524d03eeff24a85efc4eaa3861c6813e3098cde9ee02/pygit2-1.18.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e1ff2d60420c98e6e25fd188069cddf8fa7b0417db7405ce7677a2f546e6b03", size = 5042134, upload-time = "2025-08-16T13:39:35.871Z" }, +] + +[[package]] +name = "pygit2" +version = "1.20.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", +] +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/54/9273c78efd3d570091af585bdeb68a46089e80602dafe11989cca40c6d0f/pygit2-1.20.0.tar.gz", hash = "sha256:7253735629c22fff412a72c48c204b19c206fda9fcb01e51113d9689194cb1cf", size = 826041, upload-time = "2026-08-08T14:45:11.281Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/ba/3dec5c58bc307558d7e846e2367658913fd7f49813f9c9afef12b05e3983/pygit2-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97a903fdd3e6e99d22bac87f0aaf439ccb9ad86bb4c9e15655188e97c0e53513", size = 5727580, upload-time = "2026-08-08T14:43:36.628Z" }, + { url = "https://files.pythonhosted.org/packages/37/17/657bc991833d80321f882291408f89a8677701c93c47f48023a95381345d/pygit2-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0bba0fd1568d9ba2948cdfe0680019cb0b8c1d58e54825856b6e31ebf13a1398", size = 5715849, upload-time = "2026-08-08T14:43:38.348Z" }, + { url = "https://files.pythonhosted.org/packages/74/b3/3b02bc8feeec5ddefcd8782a27478b86f30a306916e356c7b7164c5836ef/pygit2-1.20.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12a837854f1e7fc2c141eb2ac193a316e26812ca04ad4ed977ed9be92e598d27", size = 6069889, upload-time = "2026-08-08T14:43:39.956Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c8/145f9fa3a960cb1c4ef1f31dd6170c5e1cb870960ca238038213e0c515e3/pygit2-1.20.0-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d458c50de33f5d0f086122ecf87651aba4291a89d99d79ef46976ed9088cbd0b", size = 4667780, upload-time = "2026-08-08T14:43:41.528Z" }, + { url = "https://files.pythonhosted.org/packages/2a/18/ecbc0dcce05103dfc556f3b3c44d9fa4f5023ca32e977a5c152ce4de001a/pygit2-1.20.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45403d9f0c38df1ab2219d22e5e3fca6a7d40c27784a2a771a629a1c05a6a055", size = 5833427, upload-time = "2026-08-08T14:43:42.955Z" }, + { url = "https://files.pythonhosted.org/packages/45/1c/ac65749cdc2fa6efdc9f7d45e0b1cb1553df0155c9cf2921fe80161053db/pygit2-1.20.0-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e9b7f915c8a555f2300ec231652e91303b67654465f26669fb86a6c7b2d2dcc8", size = 5325995, upload-time = "2026-08-08T14:43:44.506Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8b/d92f8bbe1b90f703cc50ec12d4343c93f7e44656ef81ca0a2aae4b923ddf/pygit2-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2ec2ade07eb56515f8fa4864efafb472ffac1715431338c985039273852aee8e", size = 6199586, upload-time = "2026-08-08T14:43:45.921Z" }, + { url = "https://files.pythonhosted.org/packages/ed/7c/b5207badbc9dc61593280868a83949132eb17a4cd8a3503cf3d4173cfd0c/pygit2-1.20.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:db972efa0a0f3bd2f3f215cb5cbb3cca68b11fd638400167e0ec4c4d5726fb15", size = 4887211, upload-time = "2026-08-08T14:43:47.42Z" }, + { url = "https://files.pythonhosted.org/packages/12/a6/00f14abd34701bbf329e71e56e5fb70c2f0272d9ef572c9924f4b2fbed92/pygit2-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5d6cfc3684ac7ca944e7172f0518adcbc93c1d7711705c4b36ef70218fc721ce", size = 5931583, upload-time = "2026-08-08T14:43:48.97Z" }, + { url = "https://files.pythonhosted.org/packages/54/07/c0701027b77555930913592b5a265eef09f7260221d4c6348a629972f0e3/pygit2-1.20.0-cp311-cp311-win32.whl", hash = "sha256:8c9073e38f216e937cfc69d8d93e97a59c59f06dfa67c557134b10f8927503d2", size = 1019027, upload-time = "2026-08-08T14:43:50.315Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5a/09e66f51a5147929fe4a5653e9e9f3820e91998820fd15837ecfdd98e4fd/pygit2-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:c4800ad2643e0cb540f802973866b16480d45da2c8237a56c0b9405460ea97e6", size = 1332836, upload-time = "2026-08-08T14:43:51.372Z" }, + { url = "https://files.pythonhosted.org/packages/89/c0/7241ced2014b485f6de3eb692236f0db8f6d92d79cbdcbff972d0b78614a/pygit2-1.20.0-cp311-cp311-win_arm64.whl", hash = "sha256:83f1ccb0455e801b70dc13b4fec6dcc5ed0412ab7a38b986e0f559c9ed0bf7e2", size = 1043630, upload-time = "2026-08-08T14:43:52.8Z" }, + { url = "https://files.pythonhosted.org/packages/32/4a/20433a321dc495231f6c017db880dfb6e0d5436780a699ce5e6ac5c1fead/pygit2-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dec857dcd64cfb3f52d2e79faa53ff9fc34a6db2ed5d3f865bf5a7239177de56", size = 5725662, upload-time = "2026-08-08T14:43:54.133Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b7/add39585242cd7f24701e4899e6cff73cc8aa64dc9c945497071043f39cd/pygit2-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9374c6f8d8ee0ba01a58238416ed2b24d4c154a8823ebc6b638a7ee4a480415", size = 5716598, upload-time = "2026-08-08T14:43:56.171Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/6039aef21a18da62dd41c0457af47c6d84e24845b1cc938661ec56446a55/pygit2-1.20.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62bd32dcfc1982e1cb2218ca38c14c511caf970ec64ae2d39e6aa0d9d62dc4f0", size = 6070500, upload-time = "2026-08-08T14:43:57.701Z" }, + { url = "https://files.pythonhosted.org/packages/26/0b/8e9852340ddcaea2f4f28f4d4f6324254c75d845654aae61f67b7b2b084b/pygit2-1.20.0-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9a540410f9f893c5e68e221d1df21319fe5add04e45d51b2329ce0fa14516b7", size = 4667205, upload-time = "2026-08-08T14:43:59.178Z" }, + { url = "https://files.pythonhosted.org/packages/33/26/bd9b33dbd8535b4f667f7cac56a15740fa5039c8ceb735fda1cd0d2d3b65/pygit2-1.20.0-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2be2e29283268a2842342c7d4e206e1d8326dfc71598743fa8ef61ef6d744d5", size = 5838298, upload-time = "2026-08-08T14:44:00.745Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ce/7a7c5007c3b1e7082503b23a51f1329f42525cda6531630623fb52ba8390/pygit2-1.20.0-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8119ef9b00587f243ee5462dfe5dc71aad600cf1b25b268bffa67065d3412439", size = 5327204, upload-time = "2026-08-08T14:44:02.11Z" }, + { url = "https://files.pythonhosted.org/packages/33/61/fa9b9c75c4a87d5877179c13ea26e958f2ea5bb6a42f5228615bf26e4010/pygit2-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7150878d113dee6291ca2d17876729b739e762d1585d90459aa61b34bd662de7", size = 6201154, upload-time = "2026-08-08T14:44:03.481Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e2/3ba5a1d42e3334c93387eb4d01365762f735c25655e9907c23d58e110cef/pygit2-1.20.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a79cf9048797997cc3610726b7b2827d6459961208553b187522786ab5ffc0f2", size = 4886640, upload-time = "2026-08-08T14:44:04.873Z" }, + { url = "https://files.pythonhosted.org/packages/23/6b/bba0edae78e97e220908c33a8bf1ef5418bc558e3c657ec0d29f18e77304/pygit2-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:97619aa269f31f2b94e83078b5c6df4e7a0cc9bdfe5b672378c10ed09d50c360", size = 5936908, upload-time = "2026-08-08T14:44:06.544Z" }, + { url = "https://files.pythonhosted.org/packages/09/9b/22149d9b5059ad47b21bf9c7791fc59ce2226aafb95dbfe0e6e7fa54af89/pygit2-1.20.0-cp312-cp312-win32.whl", hash = "sha256:d49d7bb4987fabece611f4f873bfe490e574f0bb5bb4fafe557d4d504efe3026", size = 1019713, upload-time = "2026-08-08T14:44:07.836Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/8c9fb460aa70e34681e26d1b314dc2ee6a7de556941d20d6fec3485d0377/pygit2-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c16126d27218e7b5d059e5072b15819261ec3ad515ff45ed611fa1687993c25", size = 1333225, upload-time = "2026-08-08T14:44:09.124Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a3/8ca3be722208fd764364feabe5c2a9186a96dcc2be73feb7f7bfce4dda5b/pygit2-1.20.0-cp312-cp312-win_arm64.whl", hash = "sha256:3f7b97f577d7d15d59fbef8e3f6f6943bdc5e315cbf6d4c0478984858e55b0ea", size = 1043775, upload-time = "2026-08-08T14:44:10.157Z" }, + { url = "https://files.pythonhosted.org/packages/f9/52/4247a6180b6a4100a7232404a97cad74a62f19942c405383f1d13c361168/pygit2-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9217790892f6c9faf38737a078ac36203bd082b226e0b0ba68d8930f4ba7737b", size = 5725672, upload-time = "2026-08-08T14:44:11.347Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ee/e28c2f0bc3d753158e93900bf0e236038b79f2d20a09be8952f1c4c1e692/pygit2-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c21715780541121c9784a7e4372c32b440b3ac67452b5364af738f5f4b82f8e1", size = 5716639, upload-time = "2026-08-08T14:44:13.068Z" }, + { url = "https://files.pythonhosted.org/packages/6f/76/ca1ac1f568e7a326a01b6b1e09960f4e09a7f1a06c6d93b0ffdb28b51dd3/pygit2-1.20.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23a1879065591b65b26f58048450629c2cdbdaa2a65328eee27d908614b963db", size = 6071276, upload-time = "2026-08-08T14:44:14.639Z" }, + { url = "https://files.pythonhosted.org/packages/af/88/5d56e8d5bbd75e3929afe177755bb7c28cf4e8bf1cb05eb3713769b3e75f/pygit2-1.20.0-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e51e9a9a4aa15bd570d57c5febc0142b86a19c4f2b579e9a33d6c170189ff9b", size = 4667815, upload-time = "2026-08-08T14:44:16.291Z" }, + { url = "https://files.pythonhosted.org/packages/5c/84/8ed86da20b9d451b2be4a916f9ede203fbfdd6aa40c5e54ffadeeb4544af/pygit2-1.20.0-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c7fba542df37ef208dba315579df6ea62c841ed60101154e15e811480f3f5ae", size = 5839457, upload-time = "2026-08-08T14:44:17.708Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7c/c29b37d10614ee0787e3fdaa79664c8bb68f38587ad75f8f84122021f3c4/pygit2-1.20.0-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4600c5cf14895bd7a4ffac14932969c02b6fd7ce2a047b004f3397bdc040425c", size = 5327439, upload-time = "2026-08-08T14:44:19.089Z" }, + { url = "https://files.pythonhosted.org/packages/aa/04/f462bd2bf8acd34859418e72de805b92af7d216d37e5ddbfd09a01284dc9/pygit2-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229bbd20bde6a9fcceee732ca4bc30360d375b0db439e19c6b9a0e1d3bb4311e", size = 6202569, upload-time = "2026-08-08T14:44:20.579Z" }, + { url = "https://files.pythonhosted.org/packages/16/47/8805d05d6a1d1768f5ccfc2a87d7ea33c31ba99d7ab2762b838eccdda922/pygit2-1.20.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:223be35205f6dd4ed9fd35ae9feca59fb1a98913de090d8716c5830495e31901", size = 4888440, upload-time = "2026-08-08T14:44:21.93Z" }, + { url = "https://files.pythonhosted.org/packages/f2/59/8ef9d3c585d1d37acb236e2fc637905da931c9321dced6ce9ee3754a9145/pygit2-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:46b6bac662c55cfbdc137f131050317d56e508a4506ab2e8ac01518f33a29bcd", size = 5938354, upload-time = "2026-08-08T14:44:23.287Z" }, + { url = "https://files.pythonhosted.org/packages/68/63/97aff45f675521f1a0397e93e7b8f623b86ef79c70567ea8bbfc0bee6ccd/pygit2-1.20.0-cp313-cp313-win32.whl", hash = "sha256:a455a1d9714b49ba36fc45985d58debe3d6d07fbaa187cd217f79713ae1d1af7", size = 1019675, upload-time = "2026-08-08T14:44:25.099Z" }, + { url = "https://files.pythonhosted.org/packages/4b/68/428fab56d8df919bcd735aa9ef0ac9100ab47b9ed9d9aa4cd0a686da9b5d/pygit2-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:451bfe3ec1719419157f49423d1a13a90788df78d2e97fe53efd2c872dbdf8a1", size = 1333178, upload-time = "2026-08-08T14:44:26.254Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f3/51e78c77badab4b73434749bc19ba1f406c191e0911da6a051b803c3445e/pygit2-1.20.0-cp313-cp313-win_arm64.whl", hash = "sha256:e9f715e5ddef14eb4ba344b1deca8a82a2015acb01f6aa0a79eaea122dfc9384", size = 1043747, upload-time = "2026-08-08T14:44:27.502Z" }, + { url = "https://files.pythonhosted.org/packages/95/99/c6b55c5f695b84921afdc4b52ac14191e4b8006e18220f09d32d63d15c1e/pygit2-1.20.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:79dece6a15fee4e0c1fc9231b3156327933adbdd6d21c2070e3c06c26add3d73", size = 5728008, upload-time = "2026-08-08T14:44:28.757Z" }, + { url = "https://files.pythonhosted.org/packages/ca/43/a6639265efc0ce9cdbf9943cac9ab03d74f26128882059495193c7d0652f/pygit2-1.20.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:15907f5b6e28dafd54062e41e9375cb4dc2f9cc37ffad58b0195dfeab58b3325", size = 5716504, upload-time = "2026-08-08T14:44:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/66/04/6c9b77b553e55bfc104540969df57e08c10ca7d91e26c035a7d58f9a681d/pygit2-1.20.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68b4cc2a442b59202c038214aa93ea9db8bb222429552e545afe0a98a5ccb004", size = 6073519, upload-time = "2026-08-08T14:44:31.745Z" }, + { url = "https://files.pythonhosted.org/packages/41/c1/9507ccfaac42424d70b6acea6b03e2645e55d6cc57efbba458d718ed117e/pygit2-1.20.0-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9c63594002feaa4b406dd3b133b4d40a1c53dd285f9bbf3156af89647f2ddf2", size = 4672126, upload-time = "2026-08-08T14:44:33.154Z" }, + { url = "https://files.pythonhosted.org/packages/49/0b/eea71c54f11e943a3c6493df26db59fc4fe859bf701bb366992ba241ca76/pygit2-1.20.0-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b99f40e2b3ea98e8ff905958db279d21e735d2fb5888818b359480f0883c2d", size = 5841077, upload-time = "2026-08-08T14:44:34.499Z" }, + { url = "https://files.pythonhosted.org/packages/85/a6/46786c212302b4bc10a26b64640a7419db17aed48e420b191a0a76abfb9c/pygit2-1.20.0-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cf93fd9dea38087f6642837bfeb6db722b661ea9dd90b604d06810063ff030e6", size = 5329043, upload-time = "2026-08-08T14:44:35.806Z" }, + { url = "https://files.pythonhosted.org/packages/65/4f/b0159fd6d4efd997ff5f3eb8b3340b7ac797b98f8c06f51aaac19c0b444d/pygit2-1.20.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:115580869b6c78bbf07b24f389c8a146c6f080e55121ada2506b3ca29710dead", size = 6203519, upload-time = "2026-08-08T14:44:37.722Z" }, + { url = "https://files.pythonhosted.org/packages/a5/10/797f5583a85b013a0f216ce3c88f6f5556f9fa4b6bcc5d1de297e6e21d6c/pygit2-1.20.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:37e0db3a58603531d6ceef3b36b0bab645a2a81b91c1b8e0e1111f34d67fa61d", size = 4889896, upload-time = "2026-08-08T14:44:39.097Z" }, + { url = "https://files.pythonhosted.org/packages/41/96/cb1e48a08bd7030dbb4455a1c3f940bcdfc2943e24bbac3cfe1150753652/pygit2-1.20.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93ed5d0c305c265b97337844b2cecc8075ff05f657475ffcefbe985de8b04134", size = 5939118, upload-time = "2026-08-08T14:44:40.445Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e1/c7d2683de4c7fb59b7f6f3d2c6dea638fb72c8c45655e1639517c7c8a8d2/pygit2-1.20.0-cp314-cp314-win32.whl", hash = "sha256:c7ec615560faf3a4f868263df680954bf3deb74cefd24be63a2caad4ffadf6f9", size = 1044051, upload-time = "2026-08-08T14:44:41.801Z" }, + { url = "https://files.pythonhosted.org/packages/a4/52/2a903622fa9599fc0e0d68a7614513ba26248a89590042ee7752d58c0d35/pygit2-1.20.0-cp314-cp314-win_amd64.whl", hash = "sha256:4ae51387c4016966703f990fad2a1adf60f594239d8a0f5b308ec82921e3b582", size = 1368061, upload-time = "2026-08-08T14:44:43.145Z" }, + { url = "https://files.pythonhosted.org/packages/a4/bd/e05a00751c65745383fadddaea02d49d81a4bbff2d7d1d7a745c7763f67c/pygit2-1.20.0-cp314-cp314-win_arm64.whl", hash = "sha256:055057b36ce141ccc6ce600475c3f8ce0edadad45c78b480cdcb61da29f7ecf7", size = 1074468, upload-time = "2026-08-08T14:44:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/13/a1/4ba9ac3ce81f02d2f089c3c878282767d06eb97716834432917aa676cd58/pygit2-1.20.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:00415a2aad3a4e1eeeb1da5c0d805e992971e849a1a7d9f604c8e0381dff70fa", size = 5731464, upload-time = "2026-08-08T14:44:45.997Z" }, + { url = "https://files.pythonhosted.org/packages/a3/87/231bdc55a8243c44e6cab4772b863842abba73752258d8adf93ca12d2d5a/pygit2-1.20.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4207f901c377410f3d85df259d32903af1523258150968a1add805f40daad8bc", size = 5719730, upload-time = "2026-08-08T14:44:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bc/8688683a38f3b250ccc80b64f4a157a9cfb61dd836989b78ba923379a410/pygit2-1.20.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4cf13d0b12fc1df25953a23c3112f4cb8abed1802b0479b317086f79f5d1511", size = 6134328, upload-time = "2026-08-08T14:44:48.924Z" }, + { url = "https://files.pythonhosted.org/packages/81/1a/6ecf1236d9ba766e97797735d6d584b3713dd1ef03628b39c87ad231b90e/pygit2-1.20.0-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d3b2db875ff92b288bb23cdb4bd398b045869e98c8dde55ba49d9abf264f19fc", size = 4730024, upload-time = "2026-08-08T14:44:50.259Z" }, + { url = "https://files.pythonhosted.org/packages/50/3c/304e83eb83da4b84d90168f003f9ae6761871f97285fe4352760abc098e6/pygit2-1.20.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7fb2becd2cee9b610da613902aeca5426ac8c4a09e16344e1f75802f2ffe2bf3", size = 5893950, upload-time = "2026-08-08T14:44:51.797Z" }, + { url = "https://files.pythonhosted.org/packages/2e/11/e64b6414998dbcb336a5523e1e222e7656f5d679f7da7d797962fce57ede/pygit2-1.20.0-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cbbe502c735ee630be31be1c6e20f9ef35f980c492301c77969ce3d883242ffc", size = 5379546, upload-time = "2026-08-08T14:44:53.392Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ba/22ae0fe087d1eef7ab694882a3ab5e0c4cafac63ab2dc8e9c5716c5d4d3b/pygit2-1.20.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:254e0b61201c78b1cabe87d06d60891676311da07b5393a04e0ac813c130d583", size = 6261117, upload-time = "2026-08-08T14:44:55.394Z" }, + { url = "https://files.pythonhosted.org/packages/e0/20/71b6064e532b8071035f40a1c727040861eaecfe8b04ecfa0a998fcfb7c0/pygit2-1.20.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7cb0607755a251ca5ab942f1f45796dddb03b8499770f8c97d8de5f3616233ee", size = 4938423, upload-time = "2026-08-08T14:44:57.237Z" }, + { url = "https://files.pythonhosted.org/packages/51/bb/3751758fd0a2e52881e3b760376f9a848483bbf80db01f13fcea556c293e/pygit2-1.20.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c23e5405d6837760d3de58635492221067ee2d89c000c7b53e39e679b378ee1", size = 5990631, upload-time = "2026-08-08T14:44:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/50/19/dc0af298676f0dc1c1affedef0fdd49c3e831b71442c63f4047d3da81f4b/pygit2-1.20.0-cp314-cp314t-win32.whl", hash = "sha256:20dd3576c05cc94dd6ad6650d0a937593de6115bcbfeba37414dd57fa33c9b8a", size = 1047236, upload-time = "2026-08-08T14:45:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2f/cd193585ba738814cab54f6b99faa12e8449b5706b24d242d1c7dc785b0d/pygit2-1.20.0-cp314-cp314t-win_amd64.whl", hash = "sha256:82006722c4aacd4f5e4c93cd8914d1dd1521ec77a71c37f50ac58bc4f6b563f4", size = 1371325, upload-time = "2026-08-08T14:45:01.439Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b8/c0e5ae3702f46a36fa3bd914853d52c534968e0417a2e5775f439a921317/pygit2-1.20.0-cp314-cp314t-win_arm64.whl", hash = "sha256:3831bf91550c487540f3e2d5cea211689b8e65b4589e812d3c335cb5500a5eae", size = 1075577, upload-time = "2026-08-08T14:45:02.598Z" }, + { url = "https://files.pythonhosted.org/packages/3f/9e/7388a45ad7a1ab0f2e68d43a1117b3dc0526fb383e0623da0ce402b15555/pygit2-1.20.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e6432cf4eb368366affb1bce4eaac750f03ee440defe5ee185557ba7e656909a", size = 5666736, upload-time = "2026-08-08T14:45:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/68/15/865f9b69a98daf0d218dafc2946c074889cd5291e3cd7dba3fa2af2b11da/pygit2-1.20.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:aff3a6312006e668ce35983ef3c8d3c27115a37ce9ceb6ce316422f25d44b01d", size = 5664511, upload-time = "2026-08-08T14:45:05.361Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a4/ed18018054b88e378918088943ddc87eace2794ed058e66ee003dbb5779d/pygit2-1.20.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8108f420748549807603e5463f46df123844a7b5c0123d990d1107f308a3171f", size = 5577852, upload-time = "2026-08-08T14:45:06.776Z" }, + { url = "https://files.pythonhosted.org/packages/63/d0/b769009606f3d3adb7eaed9cf889e40dc5c6b03be2896fc2c924c3a886bf/pygit2-1.20.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de6729361800d312f9062c53a218f141af8909bad44c4d0064995728a284e8ae", size = 5333941, upload-time = "2026-08-08T14:45:08.433Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e6/dc41a33491517159e72ed197e60b50f74fd4f22903308f89dad815993205/pygit2-1.20.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e063d809e5ae8624a3c29a9743417670f2f57ab27fcf300f4e35575f9f30be79", size = 1300896, upload-time = "2026-08-08T14:45:09.999Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, + { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, +] + +[[package]] +name = "pytest-timeout" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/82/4c9ecabab13363e72d880f2fb504c5f750433b2b6f16e99f4ec21ada284c/pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a", size = 17973, upload-time = "2025-05-05T19:44:34.99Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" }, +] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/8f/3c92c45737f654f2488ab3662b7604a55d3d35146d37c9ce80f5c95b95a6/python_discovery-1.5.3.tar.gz", hash = "sha256:e500eb24025fb7c4876c1fdcfbafd9028a10c71b661aee38cb6fb0de594518c1", size = 82477, upload-time = "2026-08-24T14:48:46.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/12/823d9a321904ccfd2969a24b84fdfd1e6614c707ec569c62879bf1dbc6c5/python_discovery-1.5.3-py3-none-any.whl", hash = "sha256:8305296358f1aa2ed302a25b84be7df84fef8ca47c7dce2da63cb7325333044e", size = 38290, upload-time = "2026-08-24T14:48:45.305Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/53/ed9d74092561d4b01a2ef1349d52cdbc135e526c245f366b089cfca6de49/python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35", size = 58945, upload-time = "2026-08-16T16:54:54.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9", size = 22780, upload-time = "2026-08-16T16:54:52.473Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/24/f206113e05cb8ef51b3850e7ef88f20da6f4bf932190ceb48bd3da103e10/pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", size = 161522, upload-time = "2026-01-30T01:02:50.393Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e9/06a6bf1b90c2ed81a9c7d2544232fe5d2891d1cd480e8a1809ca354a8eb2/pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", size = 246945, upload-time = "2026-01-30T01:02:52.399Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/f6fb1007a4c3d8b682d5d65b7c1fb33257587a5f782647091e3408abe0b8/pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", size = 259525, upload-time = "2026-01-30T01:02:53.737Z" }, + { url = "https://files.pythonhosted.org/packages/04/92/086f89b4d622a18418bac74ab5db7f68cf0c21cf7cc92de6c7b919d76c88/pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", size = 262693, upload-time = "2026-01-30T01:02:54.871Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7b/8b31c347cf94a3f900bdde750b2e9131575a61fdb620d3d3c75832262137/pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", size = 103567, upload-time = "2026-01-30T01:02:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, + { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, + { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, + { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, + { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, + { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, + { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, + { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, + { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/1b/9cfdeac80ee45bebbbcb31f1b7b99a0d81a1c72de48d837be984e0e88b1d/pywin32-312-cp310-cp310-win32.whl", hash = "sha256:772235332b5d1024c696f11cea1ae4be7930f0a8b894bb43db14e3f435f1ff7e", size = 6361387, upload-time = "2026-06-04T07:49:14.329Z" }, + { url = "https://files.pythonhosted.org/packages/33/b1/7afc96d041d982c27bc2df6f853d43f01fd273e3d39d04be3647ddeb533d/pywin32-312-cp310-cp310-win_amd64.whl", hash = "sha256:5dbc35d2b5320dc07f25fa31269cfb767471002b17de5eb067d03da68c7cb2db", size = 6926780, upload-time = "2026-06-04T07:49:16.881Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/4140da9ad54108e517f4a16b2d83da3033e08662144623e1239587cb7db6/pywin32-312-cp310-cp310-win_arm64.whl", hash = "sha256:3020656e34f1cf7faeb7bccd2b84653a607c6ff0c55ada85e6487d61716deabd", size = 4307203, upload-time = "2026-06-04T07:49:18.993Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f5/10a6e845a00fc5e7afd0a988b744f403d4d57162a28d160a093c4d9322f0/pywin32-312-cp311-cp311-win32.whl", hash = "sha256:17948aeadbdb091f0ced6ef0841620794e68327b94ee415571c1203594b7215c", size = 6362659, upload-time = "2026-06-04T07:49:21.349Z" }, + { url = "https://files.pythonhosted.org/packages/35/c4/dcd2d62b5944b6d5db53413a5899016ccd57ffcb7278f3f81655d25d2027/pywin32-312-cp311-cp311-win_amd64.whl", hash = "sha256:d11417d84412f859b722fad0841b3614459ed0047f7542d8362e77884f6b6e8a", size = 6928825, upload-time = "2026-06-04T07:49:23.934Z" }, + { url = "https://files.pythonhosted.org/packages/b7/56/3cbb433fe4501cdba2eb9040f56a4e1a8243faa4186b25295564d1a7a79d/pywin32-312-cp311-cp311-win_arm64.whl", hash = "sha256:b2200a054ca6d6625c4842fc56a4976a4b47f96b73dbe5538c3f813a80359f47", size = 6721875, upload-time = "2026-06-04T07:49:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "radon" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, + { name = "mando" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/6d/98e61600febf6bd929cf04154537c39dc577ce414bafbfc24a286c4fa76d/radon-6.0.1.tar.gz", hash = "sha256:d1ac0053943a893878940fedc8b19ace70386fc9c9bf0a09229a44125ebf45b5", size = 1874992, upload-time = "2023-03-26T06:24:38.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl", hash = "sha256:632cc032364a6f8bb1010a2f6a12d0f14bc7e5ede76585ef29dc0cecf4cd8859", size = 52784, upload-time = "2023-03-26T06:24:33.949Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "regex" +version = "2026.7.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/98/04b13f1ddfb63158025291c02e03eb42fbb7acb51d091d541050eb4e35e8/regex-2026.7.19.tar.gz", hash = "sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5", size = 416440, upload-time = "2026-07-19T00:19:48.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/13/bbf7d9d1887fe4a3693527c6caa232c197ea9da91f1212e9672eff60329d/regex-2026.7.19-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:555497390743af1a65045fa4527782d10ff5b88970359412baa4a1e628fe393b", size = 494009, upload-time = "2026-07-19T00:16:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/a3/19/783688e75a2bec15d50aec0d5e7e317d363808bc82a6eb6750b897bfcd7b/regex-2026.7.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:343a4504e3fb688c47cad451221ca5d4814f42b1e16c0065bde9cbf7f473bd52", size = 295287, upload-time = "2026-07-19T00:16:15.702Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/cefe4f051302ca298d3f3e79ed6dbd933ac84485b9515acdd6a52d70cef7/regex-2026.7.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ebee1ee89c39c953baac6924fcde08c5bb427c4057510862f9d7c7bdb3d8665", size = 290633, upload-time = "2026-07-19T00:16:17.182Z" }, + { url = "https://files.pythonhosted.org/packages/ae/1e/1045ca2cabb12e8ec41ad0d138e9f3ff1eb079d30a6f51ccf7d709b44aad/regex-2026.7.19-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:062f8cb7a9739c4835d22bd96f370c59aba89f257adcfa53be3cc209e08d3ae0", size = 785300, upload-time = "2026-07-19T00:16:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/20e5bca184e90bf1bd187efdb53363f4a7b7b34f01d54ced5740caf104bd/regex-2026.7.19-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1123ef4211d763ee771d47916a1596e2f4915794f7aabdc1adcb20e4249a6951", size = 854079, upload-time = "2026-07-19T00:16:19.909Z" }, + { url = "https://files.pythonhosted.org/packages/09/9b/5a2e59678be3b24aa6a42b2c6d66a48daa212593e9f4096fe7ba577fa9b1/regex-2026.7.19-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6e44c0e7c5664be20aee92085153150c0a7967310a73a43c0f832b7cd35d0dd3", size = 899496, upload-time = "2026-07-19T00:16:21.453Z" }, + { url = "https://files.pythonhosted.org/packages/48/9a/7317f14ed8ed9fd998d1978b4802b07bc4d79216353c435dbcc1ddd1301f/regex-2026.7.19-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98c6ac18480fcdb33f35439183f1d2e79760ab41930309c6d951cb1f8e46694c", size = 793541, upload-time = "2026-07-19T00:16:22.991Z" }, + { url = "https://files.pythonhosted.org/packages/6f/53/833c2db3e274d3c191f4c42fe5bfa358e4c8b617d5d7312d31334965fc46/regex-2026.7.19-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4458124d71339f505bf1fb94f69fd1bb8fa9d2481eebfef27c10ef4f2b9e12f6", size = 785515, upload-time = "2026-07-19T00:16:24.654Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b9/efb2f9fa151d71db09d4015e1fb92fee47416f01c12164836bbd23e2f3c2/regex-2026.7.19-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbf300e2070bb35038660b3be1be4b91b0024edb41517e6996320b49b92b4175", size = 769556, upload-time = "2026-07-19T00:16:26.207Z" }, + { url = "https://files.pythonhosted.org/packages/81/4d/45610c263f8eadb84e4a1fabd904d81d5176226faa9104ef498bf8a8b285/regex-2026.7.19-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b2b506b1788df5fecd270a10d5e70a95fe77b87ea2b370a318043f6f5f817ee6", size = 774130, upload-time = "2026-07-19T00:16:27.786Z" }, + { url = "https://files.pythonhosted.org/packages/40/95/1b40d87c7a9e5480bec7a87bce9fd67fc3f14b5f106c8ee66d660249072f/regex-2026.7.19-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:52579c60a6078be70a0e49c81d6e56d677f34cd439af281a0083b8c7bc75c095", size = 848694, upload-time = "2026-07-19T00:16:29.412Z" }, + { url = "https://files.pythonhosted.org/packages/17/8b/bb45968addd5b394ef9cd9184bd9c65ade1a819dbb2b92b71ad52a0c7907/regex-2026.7.19-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:2955907b7157a6660f27079edf7e0229e9c9c5325c77a2ef6a890cba91efa6f0", size = 758505, upload-time = "2026-07-19T00:16:31.006Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6f/33386c672fbf43e21602135a0f29a97ee251a483f007fe51d10e9b2dbc93/regex-2026.7.19-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:89dfee3319f5ae3f75ebd5c2445a809bb320252ba5529ffdafea4ef25d79cf1a", size = 836985, upload-time = "2026-07-19T00:16:32.459Z" }, + { url = "https://files.pythonhosted.org/packages/22/f1/9112b86e9bb075619862e8e42b604794389f1958faa68fb69bde505dd90e/regex-2026.7.19-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d3143f159261b1ce5b24c261c590e5913370c3200c5e9ebbb92b5aa5e111902", size = 782610, upload-time = "2026-07-19T00:16:33.857Z" }, + { url = "https://files.pythonhosted.org/packages/3a/f9/13d460d8a385ca0b0be9e6be80a90968b9293b3e30895543ad2d1d1653e4/regex-2026.7.19-cp310-cp310-win32.whl", hash = "sha256:64729333167c2dcaaa56a331d40ee097bd9c5617ffd51dabb09eaddafb1b532e", size = 266772, upload-time = "2026-07-19T00:16:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/9f/90/29addd7a03e1aea402c1f31467e25c80caabc8c3735b88a23cf73b0aa9c2/regex-2026.7.19-cp310-cp310-win_amd64.whl", hash = "sha256:1c398716054621aa300b3d411f467dda903806c5da0df6945ab73982b8d115db", size = 277967, upload-time = "2026-07-19T00:16:36.847Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ba/ecfce06fe66c122bc6f77ae284887a9282e4411fe1e6268c5266611ca054/regex-2026.7.19-cp310-cp310-win_arm64.whl", hash = "sha256:064f1760a5a4ade65c5419be23e782f29147528e8a66e0c42dd4cedb8d4e9fc6", size = 276963, upload-time = "2026-07-19T00:16:38.315Z" }, + { url = "https://files.pythonhosted.org/packages/05/e5/cef4de2bac939280b68d32adc659478845238a8274f2f79c465063f590ad/regex-2026.7.19-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ac777001cdfc28b72477d93c8564bb7583081ea8fb45cdca3d568e0a4f87183c", size = 494012, upload-time = "2026-07-19T00:16:39.927Z" }, + { url = "https://files.pythonhosted.org/packages/ff/87/e86f51eb117457bb7803132ffe5cb6e2841e2b5bea4cc85d397f3c6e257d/regex-2026.7.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:59787bd5f8c70aa339084e961d2996b53fbdeab4d5393bba5c1fe1fc32e02bae", size = 295281, upload-time = "2026-07-19T00:16:41.433Z" }, + { url = "https://files.pythonhosted.org/packages/41/2e/2360c41d8080a3d9ec7e5c90fad6eab3b50192869d10e9a5609e48c8177b/regex-2026.7.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:90c633e7e8d6bf4e992b8b36ce69e018f834b641dd6de8cea6d78c06ffa119c5", size = 290615, upload-time = "2026-07-19T00:16:43.058Z" }, + { url = "https://files.pythonhosted.org/packages/cf/69/b65ba4344efbc771b28fe5dde84cbbb6c8f9551165952fe78def5b9dde6a/regex-2026.7.19-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:87ccab0db8d5f4fbb0272642113c1adb2ffc698c16d3a0944580222331fa7a20", size = 791804, upload-time = "2026-07-19T00:16:44.662Z" }, + { url = "https://files.pythonhosted.org/packages/81/b6/a40dfa0dc6224b36f620c00296eacc830489cbf8c2837b6750dfe6170375/regex-2026.7.19-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e50d748a32da622f256e8d505867f5d3c43a837c6a9f0efb149655fadd1042a", size = 861723, upload-time = "2026-07-19T00:16:46.412Z" }, + { url = "https://files.pythonhosted.org/packages/e3/02/735991dee71abd83196a7962f7ed8bf5aa05720ff06e2d3ff896a85e2bbb/regex-2026.7.19-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf1516fe58fc104f39b2d1dbe2d5e27d0cd45c4be2e42ba6ee0cc763701ec3c7", size = 905932, upload-time = "2026-07-19T00:16:47.956Z" }, + { url = "https://files.pythonhosted.org/packages/45/6c/e7098d8b846ccdbf431d8c081b61e496526a27a28094ed09e0dce21b3f54/regex-2026.7.19-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09f3e5287f94f17b709dc9a9e70865855feee835c861613be144218ce4ca82cc", size = 801407, upload-time = "2026-07-19T00:16:49.43Z" }, + { url = "https://files.pythonhosted.org/packages/8a/18/34b69274e2649bcc7d9b089c2b2983fb2632d8ecf667e359593be9072e79/regex-2026.7.19-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6383cd2ed53a646c659ba1fe65727db76437fdaa069e697a0b44a51d5843d864", size = 774448, upload-time = "2026-07-19T00:16:51.352Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e6/0a72247d025585fd3800b98e040b84d562a88af6303347100484849f4f01/regex-2026.7.19-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:09d3007fc76249a83cdd33de160d50e6cb77f54e09d8fa9e7148e10607ce24af", size = 783297, upload-time = "2026-07-19T00:16:53.071Z" }, + { url = "https://files.pythonhosted.org/packages/b1/aa/c4f65ae7dd02a36b323a70c4cff326e1f3442361aaebc9311100a130d54f/regex-2026.7.19-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f8c6e7a1cfa3dc9d0ee2de0e65e834537fa29992cc3976ffec914afc35c5dd5", size = 854736, upload-time = "2026-07-19T00:16:54.607Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/668082bcc817b9e694189b84997aeba7385b7779faa6711788679c482e35/regex-2026.7.19-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b2ea4a3e8357be8849e833beeae757ac3c7a6b3fc055c03c808a53c91ad30d82", size = 763298, upload-time = "2026-07-19T00:16:56.289Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fb/2d07ad555e7af88aa5f867fdafa47a8d945ee237c20af3ebceb46a820835/regex-2026.7.19-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:80115dd39481fd3a4b4080220799dbcacb921a844de4b827264ececacbe17c78", size = 844430, upload-time = "2026-07-19T00:16:57.933Z" }, + { url = "https://files.pythonhosted.org/packages/51/15/c82a471fe3dce56f03745635b43aa456c40dc0db089e07ef148b331507d1/regex-2026.7.19-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6ce43a0269d68cee79a7d1ade7def53c20f8f2a047b92d7b5d5bcc73ae88327", size = 789683, upload-time = "2026-07-19T00:16:59.583Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f4/7532a2c59d56f5398902c20de60f0c9a5d1cd364e42a051b48e1b210be7b/regex-2026.7.19-cp311-cp311-win32.whl", hash = "sha256:9be2a6647740dd3cca6acb24e87f03d7632cd280dbce9bbe40c26353a215a45d", size = 266778, upload-time = "2026-07-19T00:17:01.032Z" }, + { url = "https://files.pythonhosted.org/packages/83/2b/cf1bc631db154eb95520d9d5dbc2371ff77a0f014bbf7d748fed8496aa63/regex-2026.7.19-cp311-cp311-win_amd64.whl", hash = "sha256:8d3469c91dd92ee41b7c95280edbd975ef1ba9195086686623a1c6e8935ce965", size = 277983, upload-time = "2026-07-19T00:17:02.571Z" }, + { url = "https://files.pythonhosted.org/packages/8d/bd/56ceaf170e875d5a6761bf2bfd0d040f1cacc896850d5e40cb29b11bbd06/regex-2026.7.19-cp311-cp311-win_arm64.whl", hash = "sha256:36aacfb15faaff3ced55afbf35ec72f50d4aee22082c4f7fe0573a33e2fca92e", size = 276961, upload-time = "2026-07-19T00:17:04.135Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/d11d7e501ac8fd7d617684423ebb9561e0b998481c1e4cbc0cb212c5d74a/regex-2026.7.19-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2cc3460cedf7579948486eab03bc9ad7089df4d7281c0f47f4afe03e8d13f02d", size = 496778, upload-time = "2026-07-19T00:17:05.677Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a9/a5ab6f312f24318019170dc485d5421fe4f89e43a98640da50d95a8a7041/regex-2026.7.19-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0e9554c8785eac5cffe6300f69a91f58ba72bc88a5f8d661235ad7c6aa5b8ccd", size = 297122, upload-time = "2026-07-19T00:17:07.59Z" }, + { url = "https://files.pythonhosted.org/packages/b3/63/4cab4d7f2d384a144d420b763d97674cb70619c878ea6fcd7640d0e62143/regex-2026.7.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7da47a0f248977f08e2cb659ff3c17ddc13a4d39b3a7baa0a81bf5b415430f6", size = 292009, upload-time = "2026-07-19T00:17:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/22/85/102a81b218298957d4ea7d2f084fae537a71add9d6ff93c8e67284c5f45e/regex-2026.7.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93db40c8de0815baab96a06e08a984bac71f989d13bab789e382158c5d426797", size = 796708, upload-time = "2026-07-19T00:17:11.542Z" }, + { url = "https://files.pythonhosted.org/packages/78/b5/dc136af5629938a037cd2b304c12240e132ec92f38be8ff9cc89af2a1f2d/regex-2026.7.19-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:66bd62c59a5427746e8c44becae1d9b99d22fb13f30f492083dfb9ad7c45cc18", size = 865651, upload-time = "2026-07-19T00:17:13.312Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/67402ae3cd9c8c988a4c805d15ee3eef015e7ca4cb112cf3e640fc1f4153/regex-2026.7.19-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1649eb39fcc9ea80c4d2f110fde2b8ab2aef3877b98f02ab9b14e961f418c511", size = 911756, upload-time = "2026-07-19T00:17:15.015Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8e/096d00c7c480ef2ff4265349b14e2261d4ab787ba1f74e2e80d1c58079c3/regex-2026.7.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dce8ec9695f531a1b8a6f314fd4b393adcccf2ea861db480cdf97a301d01a68", size = 801798, upload-time = "2026-07-19T00:17:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f0/41/e7ecac6edb5722417f85cc67eaf386322fbe8acf6918ec2fdc37c20dd9d0/regex-2026.7.19-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3080a7fd38ef049bd489e01c970c97dd84ff446a885b0f1f6b26d9b1ad13ce11", size = 776933, upload-time = "2026-07-19T00:17:19.347Z" }, + { url = "https://files.pythonhosted.org/packages/6f/69/03c9b3f058d66403e0ca2c938696e81d51cd4c6d47ec5265f02f96948d9a/regex-2026.7.19-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d793a7988e04fcb1e2e135567443d82173225d657419ec09414a9b5a145b986", size = 784338, upload-time = "2026-07-19T00:17:21.057Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f7/b38ab3d43f284afbb618fcd15d0e77eb786ae461ce1f6bc7494619ddc0f2/regex-2026.7.19-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e8b0abe7d870f53ca5143895fef7d1041a0c831a140d3dc2c760dd7ba25d4a8b", size = 860452, upload-time = "2026-07-19T00:17:23.119Z" }, + { url = "https://files.pythonhosted.org/packages/15/5c/ff60ef0571121714f3cf9920bc183071e384a10b556d042e0fdb06cc07a5/regex-2026.7.19-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4e5413bd5f13d3a4e3539ca98f70f75e7fca92518dd7f117f030ebedd10b60cb", size = 765958, upload-time = "2026-07-19T00:17:24.81Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0f/bd34021162c0ab47f9a315bd56cd5642e920c8e5668a75ef6c6a6fca590d/regex-2026.7.19-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:73b133a9e6fb512858e7f065e96f1180aa46646bc74a83aea62f1d314f3dd035", size = 851765, upload-time = "2026-07-19T00:17:26.993Z" }, + { url = "https://files.pythonhosted.org/packages/2a/20/a2ca43edade0595cccfdc98636739f536d9e26898e7dbddc2b9e98898953/regex-2026.7.19-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbe6493fbd27321b1d1f2dd4f5c7e5bd4d8b1d7cab7f32fd67db3d0b2ed8248a", size = 789714, upload-time = "2026-07-19T00:17:28.699Z" }, + { url = "https://files.pythonhosted.org/packages/5d/47/e02db4015d424fc83c00ea0ac8c5e5ec14397943de9abf909d5ce3a25931/regex-2026.7.19-cp312-cp312-win32.whl", hash = "sha256:ddd67571c10869f65a5d7dde536d1e066e306cc90de57d7de4d5f34802428bb5", size = 267157, upload-time = "2026-07-19T00:17:31.051Z" }, + { url = "https://files.pythonhosted.org/packages/08/8e/c780c131f79b42ed22d1bd7da4096c2c35f813e835acd02ef0f018bd892c/regex-2026.7.19-cp312-cp312-win_amd64.whl", hash = "sha256:e30d40268a28d54ce0437031750497004c22602b8e3ab891f759b795a003b312", size = 277777, upload-time = "2026-07-19T00:17:32.848Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4c/e4d7e086449bdf379d89774bf1f89dc4a41943f3c5a6125a03905b34b5fb/regex-2026.7.19-cp312-cp312-win_arm64.whl", hash = "sha256:de9208bb427130c82a5dbfd104f92c8876fc9559278c880b3002755bbbe9c83d", size = 277136, upload-time = "2026-07-19T00:17:34.803Z" }, + { url = "https://files.pythonhosted.org/packages/5d/3d/84165e4299ff76f3a40fe1f2abf939e976f693383a08d2beea6af62bd2c1/regex-2026.7.19-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f035d9dc1d25eff9d361456572231c7d27b5ccd473ca7dc0adfce732bd006d40", size = 496552, upload-time = "2026-07-19T00:17:36.808Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/a65293e6e4cf28eb7ee1be5335a5386c40d6742e9f47fafc8fec785e16c7/regex-2026.7.19-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42572142ed0b9d5d261ba727157c426510da78e20828b66bbb855098b8a4e38", size = 296983, upload-time = "2026-07-19T00:17:38.816Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/2d0564e93d87bc48618360ddca232a2ca612bbdf53ce8465d45ca5ce14ee/regex-2026.7.19-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40b34dd88658e4fedd2fddbf0275ac970d00614b731357f425722a3ed1983d11", size = 291832, upload-time = "2026-07-19T00:17:40.726Z" }, + { url = "https://files.pythonhosted.org/packages/07/cd/42dfbabff3dfc9603c501c0e2e2c5adbb09d127b267bf5348de0af338c15/regex-2026.7.19-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c41c63992bf1874cebb6e7f56fd7d3c007924659a604ae3d90e427d40d4fd13", size = 796775, upload-time = "2026-07-19T00:17:42.382Z" }, + { url = "https://files.pythonhosted.org/packages/df/5d/f6a4839f2b934e3eed5973fd07f5929ee97d4c98939fb275ea23c274ee16/regex-2026.7.19-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d3372064506b94dd2c67c845f2db8062e9e9ba84d04e33cb96d7d33c11fe1ae", size = 865687, upload-time = "2026-07-19T00:17:44.185Z" }, + { url = "https://files.pythonhosted.org/packages/14/b0/b47d6c36049bc59806a50bd4c86ced70bbe058d787f80281b1d7a9b0e024/regex-2026.7.19-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fce7760bf283405b2c7999cab3da4e72f7deca6396013115e3f7a955db9760da", size = 911962, upload-time = "2026-07-19T00:17:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/2a/be/ff61f28f9273658cfe23acbbac5217221f6519960ed401e61dfdab12bc35/regex-2026.7.19-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0d702548d89d572b2929879bc883bb7a4c4709efafe4512cadee56c55c9bd15", size = 801817, upload-time = "2026-07-19T00:17:48.25Z" }, + { url = "https://files.pythonhosted.org/packages/c3/bb/8b4f7f26b333f9f79e1b453613c39bb4776f51d38ae66dd0ba31d6b354ca/regex-2026.7.19-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d446c6ac40bb6e05025ccee55b84d80fe9bf8e93010ffc4bb9484f13d498835f", size = 776908, upload-time = "2026-07-19T00:17:50.183Z" }, + { url = "https://files.pythonhosted.org/packages/09/13/610110fc5921d380516d03c26b652555f08aa0d23ea78a771231873c3638/regex-2026.7.19-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4c3501bfa814ab07b5580741f9bf78dfdfe146a04057f82df9e2402d2a975939", size = 784426, upload-time = "2026-07-19T00:17:52.454Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f5/1ef9e2a83a5947c57ebff0b377cb5727c3d5ec1992317a320d035cd0dbb6/regex-2026.7.19-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c4585c3e64b4f9e583b4d2683f18f5d5d872b3d71dcf24594b74ecc23602fa96", size = 860600, upload-time = "2026-07-19T00:17:54.229Z" }, + { url = "https://files.pythonhosted.org/packages/a0/02/073af33a3ec149241d11c80acea91e722aa0adbf05addd50f251c4fe89c3/regex-2026.7.19-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:571fde9741eb0ccde23dd4e0c1d50fbae910e901fa7e629faf39b2dda740d220", size = 765950, upload-time = "2026-07-19T00:17:56.041Z" }, + { url = "https://files.pythonhosted.org/packages/81/a9/d1e9f819dc394a568ef370cd56cf25394e957a2235f8370f23b576e5a475/regex-2026.7.19-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:15b364b9b98d6d2fe1a85034c23a3180ff913f46caddc3895f6fd65186255ccc", size = 851794, upload-time = "2026-07-19T00:17:57.897Z" }, + { url = "https://files.pythonhosted.org/packages/03/3a/8ae83eda7579feacdf984e71fb9e70635fb6f832eeddca58427ec4fca926/regex-2026.7.19-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffd8893ccc1c2fce6e0d6ca402d716fe1b29db70c7132609a05955e31b2aa8f2", size = 789845, upload-time = "2026-07-19T00:17:59.97Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/c195cbfe5a75fdec64d8f6554fd15237b837919d2c61bdc141d7c807b08b/regex-2026.7.19-cp313-cp313-win32.whl", hash = "sha256:f0fa4fa9c3632d708742baf2282f2055c11d888a790362670a403cbf48a2c404", size = 267135, upload-time = "2026-07-19T00:18:01.958Z" }, + { url = "https://files.pythonhosted.org/packages/b2/80/a11de8404b7272b70acb45c1c05987cce60b45d5693da2e176f0e390d564/regex-2026.7.19-cp313-cp313-win_amd64.whl", hash = "sha256:d51ffd3427640fa2da6ade574ceba932f210ad095f65fcc450a2b0a0d454868e", size = 277747, upload-time = "2026-07-19T00:18:04.121Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/0f5c8eff1b4f1f3d83276d365fccecf666afcc7d947420943bf394d07adb/regex-2026.7.19-cp313-cp313-win_arm64.whl", hash = "sha256:c670fe7be5b6020b76bc6e8d2196074657e1327595bca93a389e1a76ab130ad8", size = 277129, upload-time = "2026-07-19T00:18:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4c/44b74742052cedda40f9ae469532a037112f7311a36669a891fba8984bb0/regex-2026.7.19-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db47b561c9afd884baa1f96f797c9ca369872c4b65912bc691cfa99e68340af2", size = 501134, upload-time = "2026-07-19T00:18:07.567Z" }, + { url = "https://files.pythonhosted.org/packages/f0/45/bbd038b5e39ee5613a5a689290145b40058cc152c41de9cc23639d2b9734/regex-2026.7.19-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:65dcd28d3eba2ab7c2fd906485cc301392b47cc2234790d27d4e4814e02cdfda", size = 299418, upload-time = "2026-07-19T00:18:09.38Z" }, + { url = "https://files.pythonhosted.org/packages/65/38/c5bde94b4cedfd5850d64c3f08222d8e1600e84f6ee71d9b44b4b8163f74/regex-2026.7.19-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f2e7f8e2ab6c2922be02c7ec45185aa5bd771e2e57b95455ee343a44d8130dff", size = 294486, upload-time = "2026-07-19T00:18:11.188Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6a/2f5e107cb26c960b781967178899daf2787a7ab151844ed3c01d6fc95474/regex-2026.7.19-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe31f28c94402043161876a258a9c6f757cb485905c7614ce8d6cd40e6b7bdc1", size = 811643, upload-time = "2026-07-19T00:18:12.975Z" }, + { url = "https://files.pythonhosted.org/packages/37/d4/a2f963406d7d73a62eed84ba05a258afb6cad1b21aa4517443ce40506b78/regex-2026.7.19-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8f6fa298bb4f7f58a33334406218ba74716e68feddf5e4e54cd5d8082705abf", size = 871081, upload-time = "2026-07-19T00:18:14.733Z" }, + { url = "https://files.pythonhosted.org/packages/45/a3/44be546340bedb15f13063f5e7fe16793ea4d9ea2e805d09bd174ac27724/regex-2026.7.19-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cc1b2440423a851fad781309dd87843868f4f66a6bcd1ddb9225cf4ec2c84732", size = 917372, upload-time = "2026-07-19T00:18:16.724Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f6/e0870b0fd2a40dba0074e4b76e514b21313d37946c9248453e34ec43923e/regex-2026.7.19-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ac59a0900474a52b7c04af8196affc22bd9842acb0950df12f7b813e983609a", size = 816089, upload-time = "2026-07-19T00:18:18.617Z" }, + { url = "https://files.pythonhosted.org/packages/ae/27/957e8e22690ad6634572b39b71f130a6105f4d0718bb16849eac00fff147/regex-2026.7.19-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4896db1f4ce0576765b8272aa922df324e0f5b9bb2c3d03044ff32a7234a9aba", size = 785206, upload-time = "2026-07-19T00:18:20.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/a4/186e410941e731037c01166069ab86da9f65e8f8110c18009ccf4bd623ee/regex-2026.7.19-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4e6883a021db30511d9fb8cfb0f222ce1f2c369f7d4d8b0448f449a93ba0bdfc", size = 800431, upload-time = "2026-07-19T00:18:22.716Z" }, + { url = "https://files.pythonhosted.org/packages/73/9f/e4e10e023d291d64a33e246610b724493bf1ce98e0e59c9b7c837e5acfb7/regex-2026.7.19-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:09523a592938aa9f587fb74467c63ff0cf88fc3df14c82ab0f0517dcf76aaa62", size = 864906, upload-time = "2026-07-19T00:18:24.772Z" }, + { url = "https://files.pythonhosted.org/packages/24/57/ccb20b6be5f1f52a053d1ba2a8f7a077edb9d918248b8490d7506c6832b3/regex-2026.7.19-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:1ebac3474b8589fce2f9b225b650afd61448f7c73a5d0255a10cc6366471aed1", size = 773559, upload-time = "2026-07-19T00:18:27.008Z" }, + { url = "https://files.pythonhosted.org/packages/a3/82/f3b263cf8fad927dc102891da8502e718b7ff9d19af7a2a07c03865d7188/regex-2026.7.19-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4a0530bb1b8c1c985e7e2122e2b4d3aedd8a3c21c6bfddae6767c4405668b56e", size = 857739, upload-time = "2026-07-19T00:18:29.107Z" }, + { url = "https://files.pythonhosted.org/packages/47/2e/1687bd1b6c2aed5e672ccf845fc11557821fe7366d921b50889ea5ce57bf/regex-2026.7.19-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2ef7eeb108c47ce7bcc9513e51bcb1bf57e8f483d52fce68a8642e3527141ae0", size = 804522, upload-time = "2026-07-19T00:18:31.362Z" }, + { url = "https://files.pythonhosted.org/packages/76/7c/cc4e7655181b2d9235b704f2c5e19d8eff002bbc437bae59baee0e381aca/regex-2026.7.19-cp313-cp313t-win32.whl", hash = "sha256:64b6ca7391a1395c2638dd5c7456d67bea44fc6c5e8e92c5dc8aa6a8f23292b4", size = 269141, upload-time = "2026-07-19T00:18:33.479Z" }, + { url = "https://files.pythonhosted.org/packages/bb/14/961b4c7b05a2391c32dbc85e27773076671ef8f97f36cec70fe414734c02/regex-2026.7.19-cp313-cp313t-win_amd64.whl", hash = "sha256:f04b9f56b0e0614c0126be12c2c2d9f8850c1e57af302bd0a63bed379d4af974", size = 280036, upload-time = "2026-07-19T00:18:35.419Z" }, + { url = "https://files.pythonhosted.org/packages/ce/67/795644550d788ddbb6dc458c95895f8009978ea6d6ea76b005eb3f45e8c9/regex-2026.7.19-cp313-cp313t-win_arm64.whl", hash = "sha256:fcee38cd8e5089d6d4f048ba1233b3ad76e5954f545382180889112ff5cb712d", size = 279394, upload-time = "2026-07-19T00:18:37.454Z" }, + { url = "https://files.pythonhosted.org/packages/d2/25/0c4c452f8ef3efe456745b2f33195f5904b573fb4c2ff3f0cb9ec188461e/regex-2026.7.19-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a81758ed242b861b72e778ba34d41366441a2e10b16b472784c88da2dea7e2dd", size = 496750, upload-time = "2026-07-19T00:18:39.633Z" }, + { url = "https://files.pythonhosted.org/packages/24/9e/b70ca6c1704f6c7cd32a9e143c86cc5968d10981eca284bad670c245ea7d/regex-2026.7.19-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4aa5435cdb3eb6f55fe98a171b05e3fbcd95fadaa4aa32acf62afd9b0cfdbcac", size = 297093, upload-time = "2026-07-19T00:18:41.583Z" }, + { url = "https://files.pythonhosted.org/packages/87/74/0b692da2520d51fbff19c88b83d97e4c702909dd02386c585998b7e2dbed/regex-2026.7.19-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:60be8693a1dadc210bbcbc0db3e26da5f7d01d1d5a3da594e99b4fa42df404f5", size = 292043, upload-time = "2026-07-19T00:18:43.347Z" }, + { url = "https://files.pythonhosted.org/packages/e3/a7/1d478e614016045a33feae57446215f9fd65b665a5ceb2f891fb3183bc52/regex-2026.7.19-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19662dbedbe783d323196312d38f5ba53cf56296378252171985da6899887d3", size = 797214, upload-time = "2026-07-19T00:18:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ae/11b9c9411d92c30e3d2db32df5a31133e4a99a8fc397a604fd08f6c4bffb/regex-2026.7.19-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d15df07081d91b76ff20d43f94592ee110330152d617b730fdbe5ef9fb680053", size = 866433, upload-time = "2026-07-19T00:18:47.315Z" }, + { url = "https://files.pythonhosted.org/packages/b1/62/2b2efc4992f91d6d204b24c647c9f9412e85379d92b7c0ab9fdae622327e/regex-2026.7.19-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:56ad4d9f77df871a99e25c37091052a02528ec0eb059de928ee33956b854b45b", size = 911360, upload-time = "2026-07-19T00:18:49.588Z" }, + { url = "https://files.pythonhosted.org/packages/14/71/986ceea9aa3da548bf1357cad89b63915ec6d21ec957c8113b29ece567df/regex-2026.7.19-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7322ec6cc9fba9d49ab888bb82d67ac5625627aa168f0165139b17018df3fb8a", size = 801275, upload-time = "2026-07-19T00:18:51.767Z" }, + { url = "https://files.pythonhosted.org/packages/15/be/ce9d9534b2cda96eab32c548261224b9b4e220a4126f098f60f42ae7b4cd/regex-2026.7.19-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9c7472192ebfad53a6be7c4a8bfb2d64b81c0e93a1fc8c57e1dd0b638297b5d1", size = 777131, upload-time = "2026-07-19T00:18:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/58b5c710f2c3929515a25f3a1ca0dad0dcd4518d4fff3cf23bc7adb8dcd2/regex-2026.7.19-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c10b82c2634df08dfb13b1f04e38fe310d086ee092f4f69c0c8da234251e556e", size = 785020, upload-time = "2026-07-19T00:18:56.579Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/5fe091935b74f15fe0f97998c215cae418d1c0413f6258c7d4d2e83aa37f/regex-2026.7.19-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:17ed5692f6acc4183e98331101a5f9e4f64d72fe58b753da4d444a2c77d05b12", size = 861263, upload-time = "2026-07-19T00:18:58.64Z" }, + { url = "https://files.pythonhosted.org/packages/d8/fa/d60bf82e10841eef62a9e32aac401468f05fddfbcb2942e342b1ba3d2433/regex-2026.7.19-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:22a992de9a0d91bda927bf02b94351d737a0302905432c88a53de7c4b9ce62e2", size = 766199, upload-time = "2026-07-19T00:19:00.705Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5d/11e64d151b0662b81d6bf644c74dc118d461df85bdf2577fadbbf751788a/regex-2026.7.19-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:618a0aed532be87294c4477b0481f3aa0f1520f4014a4374dd4cf789b4cd2c97", size = 851317, upload-time = "2026-07-19T00:19:03.015Z" }, + { url = "https://files.pythonhosted.org/packages/7c/34/532efb87488d90807bae6a443d357ee5e2728a478c597619c8aaa17cc0bd/regex-2026.7.19-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ce9e679f776649746729b6c86382da519ef649c8e34cc41df0d2e5e0f6c36d4", size = 789557, upload-time = "2026-07-19T00:19:05.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/90/3a8d5ca977171ec3ae21a71207d2228b2663bde14d7f7ef0e6363ecf9290/regex-2026.7.19-cp314-cp314-win32.whl", hash = "sha256:73f272fba87b8ccfe70a137d02a54af386f6d27aa509fbffdd978f5947aae1aa", size = 272531, upload-time = "2026-07-19T00:19:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/96/e1/8862885e70409de70e8c005f57fb2e7be8d9ef0317250d60f4c9660a300d/regex-2026.7.19-cp314-cp314-win_amd64.whl", hash = "sha256:d721e53758b2cca74990185eb0671dd466d7a388a1a45d0c6f4c13cef41a68ac", size = 280831, upload-time = "2026-07-19T00:19:09.46Z" }, + { url = "https://files.pythonhosted.org/packages/08/82/2693e53e29f9104d9de95d37ce4dd826bd32d5f9c0085d3aa6ac042675c4/regex-2026.7.19-cp314-cp314-win_arm64.whl", hash = "sha256:65fa6cb38ed5e9c3637e68e544f598b39c3b86b808ed0627a67b68320384b459", size = 281099, upload-time = "2026-07-19T00:19:11.398Z" }, + { url = "https://files.pythonhosted.org/packages/92/b7/9a01aa16461a18cde9d7b9c3ab21e501db2ce33725f53014342b91df2b0a/regex-2026.7.19-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:5a2721c8720e2cb3c209925dfb9200199b4b07361c9e01d321719404b21458b3", size = 501121, upload-time = "2026-07-19T00:19:13.425Z" }, + { url = "https://files.pythonhosted.org/packages/f3/5e/bbaeca815dc9191c424c94a4fdc5c87c75748a64a6271821212ebdd4e1a3/regex-2026.7.19-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:199535629f25caf89698039af3d1ad5fcae7f933e2112c73f1cdf49165c99518", size = 299415, upload-time = "2026-07-19T00:19:15.43Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d6/0dd1a321afaab95eb7ff44aa0f637301786f1dc71c6b797b9ed236ed8890/regex-2026.7.19-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b60d7814174f059e5de4ab98271cc5ba9259cfea55273a81544dceea32dc8d9", size = 294483, upload-time = "2026-07-19T00:19:17.879Z" }, + { url = "https://files.pythonhosted.org/packages/92/5f/40bacf91d0904f812e13bbbab3864604c463eced8afdc54aeaa50492ea95/regex-2026.7.19-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbece16025afda5e3031af0c4059207e61dcf73ef13af844964f57f387d1c435", size = 811833, upload-time = "2026-07-19T00:19:20.102Z" }, + { url = "https://files.pythonhosted.org/packages/94/7c/4902744261f775aeede8b5627314b38482da29cf49a57b66a6fb753246c5/regex-2026.7.19-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d24ecb4f5e009ea0bd275ee37ad9953b32005e2e5e60f8bbae16da0dbbf0d3a0", size = 871270, upload-time = "2026-07-19T00:19:22.365Z" }, + { url = "https://files.pythonhosted.org/packages/16/70/6980c9be6bf21c0a60ed3e0aea39cf419ecf3b08d1d9947bc56e196ef186/regex-2026.7.19-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8cae6fd77a5b72dae505084b1a2ee0360139faf72fedbab667cd7cc65aae7a6a", size = 917534, upload-time = "2026-07-19T00:19:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/52/92/8b2bd872782ce8c42691e39acb38eb8efe014e5ddb78ad7d943d6f197ce9/regex-2026.7.19-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9724e6cb5e478cd7d8cabf027826178739cb18cf0e117d0e32814d479fa02276", size = 816135, upload-time = "2026-07-19T00:19:26.919Z" }, + { url = "https://files.pythonhosted.org/packages/de/2d/33a602f657bdc4041f17d79f92ab18261d255d91a06117a6e29df023e5e2/regex-2026.7.19-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:572fc57b0009c735ee56c175ea021b637a15551a312f56734277f923d6fd0f6c", size = 785492, upload-time = "2026-07-19T00:19:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/9e/36/0987cf4cb271680064a70d24a475873775a151d0b7058698a006cb0cae4a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:20568e182eb82d39a6bf7cff3fd58566f14c75c6f74b2c8c96537eecf9010e3a", size = 800658, upload-time = "2026-07-19T00:19:31.392Z" }, + { url = "https://files.pythonhosted.org/packages/a8/24/c14f31c135e1ba55fa4f9a58ca98d0842512bf6188230763c31c8f449e3b/regex-2026.7.19-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1d58561843f0ff7dc78b4c28b5e2dc388f3eff94ebc8a232a3adba961fc00009", size = 865073, upload-time = "2026-07-19T00:19:33.485Z" }, + { url = "https://files.pythonhosted.org/packages/14/85/181a12211f22469f24d2de1ebddfe397d2396e2c29013b9a58134a91069a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:61bb1bd45520aacd56dd80943bd34991fb5350afdd1f36f2282230fd5154a218", size = 773684, upload-time = "2026-07-19T00:19:35.599Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/bd1a0c1a62251366f8d21f41b1ea3c76994962071b8b6ea42f72d505c0f0/regex-2026.7.19-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:cd3584591ea4429026cdb931b054342c2bcf189b44ff367f8d5c15bc092a2966", size = 857769, upload-time = "2026-07-19T00:19:37.738Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4f/f7e2dad6756b2fe1fe75dd90a628c3b45f249d39f948dd90cd2476325417/regex-2026.7.19-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5cc26a66e212fa5d6c6170c3a40d99d888db3020c6fdab1523250d4341382e44", size = 804546, upload-time = "2026-07-19T00:19:40.229Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d7/01d31d5bdb09bc026fab77f59a371fdf8f9b292e4810546c56182ca70498/regex-2026.7.19-cp314-cp314t-win32.whl", hash = "sha256:2c4e61e2e1be56f63ec3cc618aa9e0de81ef6f43d177205451840022e24f5b78", size = 274526, upload-time = "2026-07-19T00:19:42.398Z" }, + { url = "https://files.pythonhosted.org/packages/52/0e/cea4ce73bc0a8247a0748228ae6669984c7e1f8134b6fa66e59c0572e0ea/regex-2026.7.19-cp314-cp314t-win_amd64.whl", hash = "sha256:c639ea314df70a7b2811e8020448c75af8c9445f5a60f8a4ced81c306a9380c2", size = 283763, upload-time = "2026-07-19T00:19:44.644Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b6/26e41975febae63b7a6e3e02f32cff6cff2e4f10d19c929082f56aebf7c6/regex-2026.7.19-cp314-cp314t-win_arm64.whl", hash = "sha256:9a15e785f244f3e07847b984ce8773fc3da10a9f3c131cc49a4c5b4d672b4547", size = 283451, upload-time = "2026-07-19T00:19:46.639Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "ruff" +version = "0.16.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/8f/d8074b1f25e003164087a8bfe79a0f1a3945135764dbb6aaab04103dcaf9/ruff-0.16.4.tar.gz", hash = "sha256:13171aa9d9af2240ee3504e639de73122c67e74036de5ba2e1d01422cd17e3dc", size = 4899731, upload-time = "2026-08-20T17:43:59.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/80/779895ef584e089d22f2c6df0d0e99a65ec2df0805f1fffd439415b8c1f0/ruff-0.16.4-py3-none-linux_armv6l.whl", hash = "sha256:df4075f71ddac40b9934af60c3ec8a53047dd5a5fdc43224e6e4e8e9a27cb6f7", size = 10006909, upload-time = "2026-08-20T17:43:16.888Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e6/f553199b5e8927a05cb5c422d921fd0656b29ab976e91c44802107c6b0da/ruff-0.16.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0c95538517af68004306b0fb3214ff2f2af67a65092aee77cd9eb86db6656604", size = 10240201, upload-time = "2026-08-20T17:43:19.337Z" }, + { url = "https://files.pythonhosted.org/packages/1c/70/4a6dc4bb34da4dee35e30f09bbd1bfbdd26f33b62fb9b8df31f08a199cd2/ruff-0.16.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:963f83df8e69e575b64d67dd447ebbc917db41a14bf38d4593a4183e7aaa8255", size = 9835122, upload-time = "2026-08-20T17:43:21.708Z" }, + { url = "https://files.pythonhosted.org/packages/24/12/c6e22d686372c15bcb7af99831f1a1be96df696491babf4f24e4f942c527/ruff-0.16.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a5057c7ff3f6e6480a48fccfb3a412a690f48a3d03ac5cf08177d6c2da3ade", size = 9977162, upload-time = "2026-08-20T17:43:24.236Z" }, + { url = "https://files.pythonhosted.org/packages/46/49/72b10ec912f5ab5854992eaf7aa7cd36729b6937d9dc4e0fb41b3bf428ec/ruff-0.16.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3dce8d9b0c57c265b91885a66a567d8ea1372e8eb4e250fa8e5e3f579e99cff", size = 9829789, upload-time = "2026-08-20T17:43:26.966Z" }, + { url = "https://files.pythonhosted.org/packages/fa/80/0f30e32e7f6ee26edc39075502db9d368d788a44a79b55f763eb4ab03796/ruff-0.16.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7dc651db49283c69f8e72c834eec4fe5573e4c646856aebece0ce385dceb2a80", size = 10527949, upload-time = "2026-08-20T17:43:29.384Z" }, + { url = "https://files.pythonhosted.org/packages/52/3d/86e8ad3542169e56cac3859a343afdb9df2ad54d35a59ce1e67baee83421/ruff-0.16.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3817b87dbcabc92f13b05019257c5b89b5b4d51b5fb20f56fb5235ceb723cd07", size = 11333695, upload-time = "2026-08-20T17:43:31.872Z" }, + { url = "https://files.pythonhosted.org/packages/d0/16/481c29b380c20a0054a8261066665e1b3488e23636c49d0a43e75975b9bb/ruff-0.16.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9fce1499134b2c8c68e5166f95705a5812062bb93aacc5f9873bb1a27084bc7", size = 10727741, upload-time = "2026-08-20T17:43:34.596Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/56bc0b8cf45b54b28b3a5e6381c8945d51b5b18adf659454c32295209a31/ruff-0.16.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2d812e482f5a7e02eee26cd73d2a37ebbdf47d795ea63ba1b89110ae93e9fb3", size = 10286522, upload-time = "2026-08-20T17:43:37.288Z" }, + { url = "https://files.pythonhosted.org/packages/e8/8b/b345b4fb110f2fbe2bd31eabd271e5e8b3b7e4ee6c0e02f2dc6be78db000/ruff-0.16.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6baaf984aa7976edf93d3b627fe2d1d22ee94bbca05fa6f90fc76d73924e3454", size = 10584182, upload-time = "2026-08-20T17:43:39.984Z" }, + { url = "https://files.pythonhosted.org/packages/29/e5/827b34041c35f58774a9681a4213994c164fc987800f4dddabcf451da0bf/ruff-0.16.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:bdfcf0b28662eb890372d50f92c283bb94e67e7635ed93c7fd533970acff7b2b", size = 10134195, upload-time = "2026-08-20T17:43:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/0f/10/d0bffcdd6729b87afc82ba0ef377173356a7dc8e972f5179968cf2fdf98c/ruff-0.16.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b66b02cb9b04f537643cadf5768e5f98dc461890d530cb67113d71c8c76e605d", size = 9825821, upload-time = "2026-08-20T17:43:44.532Z" }, + { url = "https://files.pythonhosted.org/packages/f5/32/0db2a863b796ca62d83e92a07a3ccf00921b14db02059347576a2fda3d4b/ruff-0.16.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8528bf9a4b291a60bf02ea453511e8ce6215bd2b982ee80405b66b008b6c30a0", size = 10267658, upload-time = "2026-08-20T17:43:46.989Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a0/fbdeb59e48c6261f523e56c8f12e9c08fbe693786595cc7e3959207a9232/ruff-0.16.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:fbd85d2875fdd67e833213a651f613bbf25303abf6aa822a5121f4531195678d", size = 10697071, upload-time = "2026-08-20T17:43:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/aa/28/0c6dd865859c6d17bc8ccc34cb72b0e02d6c7eb25e8a1e22b5bea681e2c0/ruff-0.16.4-py3-none-win32.whl", hash = "sha256:312769988007aaeb8e189b443ccdd03c0e6374489e053467be6d96518ebff76e", size = 10021687, upload-time = "2026-08-20T17:43:52.281Z" }, + { url = "https://files.pythonhosted.org/packages/a3/03/e724450f621698117f9aa6dd241c94d0274ae96781378dc86745ae29f0e7/ruff-0.16.4-py3-none-win_amd64.whl", hash = "sha256:05d9d27a18c4bcbefada602480ec9e01e0bc949d432e0ced5df77edac195919c", size = 10567657, upload-time = "2026-08-20T17:43:54.78Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fe/da8b9e1347696bb22120b77280ec5ce25d500ca5cb39d5ad6e5c18de19c1/ruff-0.16.4-py3-none-win_arm64.whl", hash = "sha256:a3a61621c9b6f6a89573e938a080e648f1695baa3f58570a3a707bc51ff65a21", size = 10451579, upload-time = "2026-08-20T17:43:57.135Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.4.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/00/b42a44342a054d58cb1115d7c8aa9cb4290dd9442f9c1b91a4b8173dba22/sse_starlette-3.4.8.tar.gz", hash = "sha256:ed89ffbb75cbf78a5fe2f2109cd584792ee7f9dfac96f791db546df8f15f3f9c", size = 32548, upload-time = "2026-08-05T11:19:49.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/3a/764912c58293d95b6dcdf4cc255f9d10de310580ced547b082eb9d72018c/sse_starlette-3.4.8-py3-none-any.whl", hash = "sha256:6e82314c786709a3cd9520f2285cf9fff90e181e598e8a357b0cf80f66afba0d", size = 16516, upload-time = "2026-08-05T11:19:48.748Z" }, +] + +[[package]] +name = "starlette" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/b4/205b0d5241d934e8add0c38aa924c4f9fb7330834ff11e5444db964ec3f9/starlette-1.6.0.tar.gz", hash = "sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b", size = 2716969, upload-time = "2026-08-08T18:27:57.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl", hash = "sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c", size = 75969, upload-time = "2026-08-08T18:27:56.196Z" }, +] + +[[package]] +name = "tiktoken" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/62/167a842aa0429d45f5e797354fd4343a96f6043d67d0513c675c7b8d36e6/tiktoken-0.14.0.tar.gz", hash = "sha256:231dec90efcdccf1b565a1416107736f1e09b1a08fe736ef9d6363e626d03874", size = 38898, upload-time = "2026-08-17T19:49:49.514Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/82/d60a7a5d7bff7b4641d556ea68ea5914ea6edc3774a12eb1c0d444701382/tiktoken-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3b12e54f8bec91433e41aff65d8d1f209a4f678081163747079806e5361f6c91", size = 1095817, upload-time = "2026-08-17T19:48:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/18/e2/d39ae33d3dc30a0c229ff0cb683df961ebb5e7b8691feb2d08b3ee6ac327/tiktoken-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:94f77b60a8ab23580db19ae822744c9716c1720020d2179ca5605112d12326f1", size = 1043064, upload-time = "2026-08-17T19:48:33.138Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e9/8e18cbee0c3ae8321c7e9696bef6090a24eed99a4a75a4c4a7f5115e5a2f/tiktoken-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f3d6cf93fbe2e7117eb7bedca684216fbe328a41f0843ce34245451d8eb2df1c", size = 1190381, upload-time = "2026-08-17T19:48:34.386Z" }, + { url = "https://files.pythonhosted.org/packages/af/c8/051e7b72a816ff50eb34a1c7c5b185cd2429ffdf59a497baea35b2b6b2dd/tiktoken-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:18a1b651c4b032004bf7b4f1713391a54b2a341a52c6e8a2b59acae9d16e13c7", size = 1206869, upload-time = "2026-08-17T19:48:35.581Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b3/7795db206adb6a57d6137fe48ef2cca6b9707e90b86ee8244671592ddc33/tiktoken-0.14.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4d8d91d68353bd167fdf26467e5ff9e56aaa5f87d6410c0238608629e4dc0d33", size = 1255197, upload-time = "2026-08-17T19:48:36.832Z" }, + { url = "https://files.pythonhosted.org/packages/c8/39/5234783af6b81af645ccdf9438f2f02af472f14e91d876ca2079af641841/tiktoken-0.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10f31e63e40313f2e518d87f7086cfa44e45f64cc14d8ae14103b41220c30a14", size = 1319329, upload-time = "2026-08-17T19:48:37.944Z" }, + { url = "https://files.pythonhosted.org/packages/88/cf/f2d955c8c5c6c67cc86ba6fb132c47c710465ebe6a6dcec1c3b6e250660e/tiktoken-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb9896a82b9ee44e15ba0b5c8044072f2e4d48acaa704c8d3feeef5ad9487c", size = 944146, upload-time = "2026-08-17T19:48:39.011Z" }, + { url = "https://files.pythonhosted.org/packages/8f/c5/9d848b7f408241171e1f843deb8bfa626086452bc9c78beee500829583e3/tiktoken-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c2edf09b381fafbc014ae8e018ed25087abb9a3dafa8465a0ea63c6558c47a79", size = 1094971, upload-time = "2026-08-17T19:48:40.347Z" }, + { url = "https://files.pythonhosted.org/packages/2d/a9/d94302340304328961d6f0c35ca4e60617fbb57a5cf667e2ed1692cb9e57/tiktoken-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd8ca1305c1c902fe42c486165f2e4808d9997625c98ffb05b9e0366d99d3948", size = 1042916, upload-time = "2026-08-17T19:48:41.541Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b6/31da98ee871383509cae2ba96a9ddef1965e3c4f8cb6dc7bcda3379398db/tiktoken-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1f83081065ee5833d35b49e9180f3d8d15622a603dd1c435da0da6cc12b3662f", size = 1188650, upload-time = "2026-08-17T19:48:42.729Z" }, + { url = "https://files.pythonhosted.org/packages/24/65/8c5dddd7cb67f6571d154a58d7c6e2f07da54bf84c49b6a1839965b7c35e/tiktoken-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7665f6624e052e5e7f6a36919ab69279decdc976d7b16b4fa15e1897d0513", size = 1206378, upload-time = "2026-08-17T19:48:44.013Z" }, + { url = "https://files.pythonhosted.org/packages/d1/04/522ec59d30dd9a2f3ab837011cd4fc5d1178dc4a2fa07c9fa4b90af6ba9d/tiktoken-0.14.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:144a3fc369f92b7d548995217c5d6e84038d3572157a0f6f34080d65291d0f78", size = 1253694, upload-time = "2026-08-17T19:48:45.597Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/9019e272bad188a1c61ecf44f25a9ba2368744644e3ac1f3d6516f3c9e80/tiktoken-0.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:151d37a150c8f3dfc5f4345597b10e101876bd1bd13494e0185af6b508758d2e", size = 1317873, upload-time = "2026-08-17T19:48:46.792Z" }, + { url = "https://files.pythonhosted.org/packages/24/7f/fff1217240343c0c11b5938b98aeae0e3a266cacfac25f86f91cdcd748f0/tiktoken-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:c77d4a3e1deb2707819df92046b89aad1ac81d27e07616b797cbff3f62c037da", size = 944395, upload-time = "2026-08-17T19:48:48.028Z" }, + { url = "https://files.pythonhosted.org/packages/8c/da/e273746b9d24a63c776bc60fba914351573ad9c575b52601eb5e60632564/tiktoken-0.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8e947aefe98ef74cce94923f90e48c98fe34eb1ec0a6bfdfadfc5a96359bfc36", size = 1094408, upload-time = "2026-08-17T19:48:49.269Z" }, + { url = "https://files.pythonhosted.org/packages/69/9f/fe6b1aca23331aa5271df5a4bd07bf68a7059254d47faee1b8272592a777/tiktoken-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cebe67765569df3dafac8474e4eccf5c19d24140492567a5e58a11445732a4", size = 1038499, upload-time = "2026-08-17T19:48:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/0b/35/e9f47647c9e163bd1de30fe1a491669b7248cfc67b7404c35c009a701e1a/tiktoken-0.14.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7db45b98e94adf4173a5cd7422b150999a7ee11ff847783a14f6e1b80cc38cb6", size = 1186355, upload-time = "2026-08-17T19:48:51.93Z" }, + { url = "https://files.pythonhosted.org/packages/51/11/9976ad86980a00cdef05e730a0127a2578a1bc6d11644d8d47246de2eb26/tiktoken-0.14.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7896eea257fe497a2b7134474d909156c6744ce8da35bce88011a960e008aa0d", size = 1204197, upload-time = "2026-08-17T19:48:53.18Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9c/7035b0bcfaa68d1ee4803fc5be5214ad865669b05bd20e7105ae8a18afc6/tiktoken-0.14.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b950248272f1b303dc32986396e2dccfa10cf6d1e83ec8f0bba1776660305482", size = 1250635, upload-time = "2026-08-17T19:48:54.392Z" }, + { url = "https://files.pythonhosted.org/packages/bc/1d/69cabf18bed7f4366da076735816abce0d4db3fae491ae338a6612128777/tiktoken-0.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3de75343041a1c57333b1e707ac8a9769738241d7d6a55d39e12cf84548337c6", size = 1316085, upload-time = "2026-08-17T19:48:55.525Z" }, + { url = "https://files.pythonhosted.org/packages/bd/bd/a2e884fb1402cba5be08836590320012b2d8ada0e2eef9911a64df4bcd2d/tiktoken-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:087538c080e5ff421abd3a0785ed63c5111d06af98e6cd0d374dbe5969147ca3", size = 941208, upload-time = "2026-08-17T19:48:56.938Z" }, + { url = "https://files.pythonhosted.org/packages/50/53/ee1453623bf65f019328721ccb6587846d2c5b7b82f34e73ca09101f072e/tiktoken-0.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9c5fe393aab56469f04e432ff851216d3def3436cf5f07e442a240164bf500f", size = 1094198, upload-time = "2026-08-17T19:48:57.955Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5f/6448cfe278c3664ba9ec5b5ac08344341f7dc3d42888476e215a14eda2be/tiktoken-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbe2cc3bba939bcdaf103e03df9d5039d33887080b315624be28ec69059e5f94", size = 1038820, upload-time = "2026-08-17T19:48:59.015Z" }, + { url = "https://files.pythonhosted.org/packages/69/3b/d67eac1bcce9dee3abe23aff5e3ded3116bbebaf67b80a0811c06d3806fc/tiktoken-0.14.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2157f52e4b4d7ac5ecc7457b3716834706e7ef9a46f5144029bfeb7cf71f4e06", size = 1186175, upload-time = "2026-08-17T19:49:00.068Z" }, + { url = "https://files.pythonhosted.org/packages/37/62/cae690d9783146b0f81f564ada0f8f611de68178c0c9c7e1e969f0516b48/tiktoken-0.14.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:26e60f6a956ee171ab728b37b8439905d7ea1db435c30f9822f291e9861c861d", size = 1203884, upload-time = "2026-08-17T19:49:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1e/633e30237b94e383cf814145499079f3bb9cdd4aeafc1bc42e01b0f810a6/tiktoken-0.14.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:380873f330b741c4435574f37edb20813d04603ace2d53e0a63560e1fec83010", size = 1250980, upload-time = "2026-08-17T19:49:02.274Z" }, + { url = "https://files.pythonhosted.org/packages/cb/56/4c12f07b812f84206f38d723eb1ebfdd34bad9309b5dbc0bee6bbcff4cbf/tiktoken-0.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3fd7c14b1cb45b486c39fc9b3443bb341f3e2fc7e6f31247f3435a5836651632", size = 1315434, upload-time = "2026-08-17T19:49:03.434Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e0/c65603f0c44811def666d3fbf611bf2af3b5e1ef613e06c19411419830b3/tiktoken-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:90a762670c7f968184723769a06ed51f5cf5ce5dcd1e30164f25c72d85c2d1f1", size = 940883, upload-time = "2026-08-17T19:49:04.583Z" }, + { url = "https://files.pythonhosted.org/packages/59/b0/1cf129f4af8fc513931f931023def596b7c4bfc77026513cd9d851da9e88/tiktoken-0.14.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e067f4cbcc5d036e8aff7fe7a6b530a8f4de2e4616ad9005a24a1879e24e6450", size = 1096273, upload-time = "2026-08-17T19:49:05.807Z" }, + { url = "https://files.pythonhosted.org/packages/62/85/2ae74575e321148484147e10b53c3b1717c59ebaa9edb4fe18b1f5c055f8/tiktoken-0.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f2af4a336ea56d6c14f27741a0e1d8294a35dd0b038bcf990d232ebb54eb994b", size = 1040269, upload-time = "2026-08-17T19:49:06.943Z" }, + { url = "https://files.pythonhosted.org/packages/89/29/92a1120a12e4bcf2d5464350d1a91b68a433d63ce656bb7f806c27aec09c/tiktoken-0.14.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f702e0aeeb6506e57687e881c59e844ebe8f0a6a097ddafe20e3ab25f387be4e", size = 1186101, upload-time = "2026-08-17T19:49:08.102Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7d/144af98dc5ad68108451a82e2f5a17f80e2663f5115058b8dfd215c1ad02/tiktoken-0.14.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e3442bbb2f0c588cec876061e37ae67b455b9df9978b003c8fe30e45f2ef5b42", size = 1204457, upload-time = "2026-08-17T19:49:09.28Z" }, + { url = "https://files.pythonhosted.org/packages/e6/1f/be7cb06ab2108f612f3e92e7b76cf391e192db0db37a984616f0cc32aafc/tiktoken-0.14.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:979c1524f753b662b0f3cd261b135afe6659cce33caaa7a5ea00dd1756b3055c", size = 1251716, upload-time = "2026-08-17T19:49:10.509Z" }, + { url = "https://files.pythonhosted.org/packages/ab/6b/81f158d0f90adb826cd704069c2129a046cb784a2a09861009519fc41cf4/tiktoken-0.14.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2cc19ac87b41c9493c9778ff5847f0c8bbcf5bd0ec6b87ce06c1c802adc8a771", size = 1315432, upload-time = "2026-08-17T19:49:11.844Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ec/f5fa35ec13f07279fdcaf3cc9c04bbb154ea591d23978651f2b672593e8a/tiktoken-0.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:eceeff0c62419bc78d4b6e70a4762a4d25df3ae8f2d5946e3853ce93e7a57098", size = 988046, upload-time = "2026-08-17T19:49:13.282Z" }, + { url = "https://files.pythonhosted.org/packages/68/c9/7756717408d3d0dfea3f046c9466144b28afde39ff69d5808f2475dcd7f5/tiktoken-0.14.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6eb94895c45f26bb8f5546e5fd8a069efcf6e3f108ea9d5cbe3bf6f7f3983438", size = 1096261, upload-time = "2026-08-17T19:49:14.351Z" }, + { url = "https://files.pythonhosted.org/packages/79/29/46ad8061f57bd9f8b2ea0aa82bf574e0f2aa040b0857a1582adba9957899/tiktoken-0.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:86951a971c53979ec857bd8c4a32dc227ab0fd33f6c12a3bd62d3fbf5f0bfcaa", size = 1040183, upload-time = "2026-08-17T19:49:15.707Z" }, + { url = "https://files.pythonhosted.org/packages/5a/7c/3184d17b868456f17b60b1a75f5ec0405618a43aa753336df341d8f11781/tiktoken-0.14.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e2eca764c53490f8930dbce329e0769f11108d87d908282a80c5c130e26e7037", size = 1186719, upload-time = "2026-08-17T19:49:16.84Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e8/46de4400d5bf859f640feee85bd7e32235f68ddf25db53c63be78e581e3a/tiktoken-0.14.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:26cc4b4840fa0e9f4b72ed489883e12f57e00d1021ca794720e3c29a12f0edef", size = 1204660, upload-time = "2026-08-17T19:49:17.987Z" }, + { url = "https://files.pythonhosted.org/packages/29/ce/af8964c38bc8226dd8950305b7a255fa33345d5572f78af7275a313d28e0/tiktoken-0.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2fc834fbe3f6a0736905c36ab709537e6840dbd63b982dc9e0216ae7d305ba1a", size = 1250932, upload-time = "2026-08-17T19:49:19.28Z" }, + { url = "https://files.pythonhosted.org/packages/1d/4b/323631116fc986d9cc5bbeb2b8223c7c85e61a8bb94ea5ab4951023b149b/tiktoken-0.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ca4db6ff5c5bf600f9b7761a0070ed44dfe5797a76bd432fb978bc480ef40c58", size = 1315190, upload-time = "2026-08-17T19:49:20.467Z" }, + { url = "https://files.pythonhosted.org/packages/18/8b/ba48a73729c9270989b36f37ab2ed5525e52690d715097c9fa791aaa5d05/tiktoken-0.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:7aab286a020660a039097912a088236b985d18a3090d73f136c4413d29d37ca0", size = 987717, upload-time = "2026-08-17T19:49:21.704Z" }, + { url = "https://files.pythonhosted.org/packages/1d/10/b73b7e319179e0f60b32475f783b044f9cece872c53b6662664e9084b0d0/tiktoken-0.14.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:14b47e3674f2624803a8acc8fb367b7e24fc53055f9df3296482fe9a3a34a232", size = 1096280, upload-time = "2026-08-17T19:49:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/c2/6b/09999a9bf1d559670d1680e8f8e419ac0e2c5f6aac82e9bfdf70f260b30a/tiktoken-0.14.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:19d643d701fdaa70e5b9c7f8f96abcaffe77ca5e482a3a1a7dde46feb4284695", size = 1040433, upload-time = "2026-08-17T19:49:23.998Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7b/8537be0836f3df99b2a636b44399bfa43cd757f2b8b4097dacb794cf24a7/tiktoken-0.14.0-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:e4ddf863b59347deaa92302dcd90e5eb003cdc9be06ec2b692c38d1bdd9efd49", size = 1186989, upload-time = "2026-08-17T19:49:25.021Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9d/f9c56d7a943a4468abf9ef37661bb9b8e0cd3aa8aa87368c7146cc3f3222/tiktoken-0.14.0-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:60c47ca69ddda0dea8256fffd12e1b86f4b59734a20e4a70c61f63cc5f021df4", size = 1204615, upload-time = "2026-08-17T19:49:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d2/98a38579db25c4a8a84e31dd95d9072ec5f21f7e70de591da0412e29b25b/tiktoken-0.14.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:728303a072163130c5b477b1f20d6211895569c1d5302c24ffc93a3009160871", size = 1251828, upload-time = "2026-08-17T19:49:27.423Z" }, + { url = "https://files.pythonhosted.org/packages/0c/83/467be424746c039c5493c0f4102feab16b9b48eb6f5c089b2a2438e3cde2/tiktoken-0.14.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3c5349c9f916283bba32bec8af69b763e4faa304dc004d0eaaea66a3cf004c1f", size = 1316260, upload-time = "2026-08-17T19:49:29.101Z" }, + { url = "https://files.pythonhosted.org/packages/02/ee/ddf46ca78e371f5890e96b6e7d089a85b3536432be219851eb0481786ca8/tiktoken-0.14.0-cp315-cp315-win_amd64.whl", hash = "sha256:1b6e4adcfd285c44502aed51df98aaaca4f0fea028165dbf8a9e857b9f98d8ea", size = 988230, upload-time = "2026-08-17T19:49:30.246Z" }, + { url = "https://files.pythonhosted.org/packages/2a/00/5162e90c851a28da18ed382d34898b79a8022548e5619a64e14c03ce7c3d/tiktoken-0.14.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:11d8211b290855d2721334ff17dd9b3a17bfb26872be01f25d73612ef7ece890", size = 1096186, upload-time = "2026-08-17T19:49:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/65/97/a5a7bfccf25b1bb65e82bae8edff11ac3c9c041c374b7b4a823d60c38133/tiktoken-0.14.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d0781223705199b289faa59601bb9c2441712d4c600dd13c43d8fd6a33d22cd5", size = 1039947, upload-time = "2026-08-17T19:49:32.848Z" }, + { url = "https://files.pythonhosted.org/packages/fb/ba/ef427fc638f1439181c5e12dd26b70e881861f89c007aa7e5b36300f8342/tiktoken-0.14.0-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:2ea70afba6b9eddbf22c165142e5f0a2ad7aa36a452873c48b57bb2aeb8492ae", size = 1186997, upload-time = "2026-08-17T19:49:34.121Z" }, + { url = "https://files.pythonhosted.org/packages/3e/88/2f3f85a968cdc514152129af0a060ebcccb067005a2f29b0d5ef3c838514/tiktoken-0.14.0-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:78571efc311c30b73f31eb949a921d6dac39a5d9dc42d1cfa8f8db157b3447b1", size = 1205211, upload-time = "2026-08-17T19:49:35.284Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f6/80760e98a08e6649d2d68afb6035af713121dfb615acce8c4f73810ec438/tiktoken-0.14.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86f66c85e796f5d05d5c4a60ec1d40cbfebc47a32464053528c797163fa9ab89", size = 1251479, upload-time = "2026-08-17T19:49:36.419Z" }, + { url = "https://files.pythonhosted.org/packages/c5/84/50966fb6918a0fb9b32721277e5342bf729a2d74350074d662fbedf9772e/tiktoken-0.14.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:149d97453c4c98c04b081d64a85e635921269b532710d6faf81e9e82b790e7d3", size = 1316673, upload-time = "2026-08-17T19:49:37.756Z" }, + { url = "https://files.pythonhosted.org/packages/35/5e/9b01afd037bfa22a0033963fa091e0f75b6fb15cd85bffb42ff86e697323/tiktoken-0.14.0-cp315-cp315t-win_amd64.whl", hash = "sha256:561e7580f84a79859af1ef6f676968e9030fcc3fe195700b15235bca64f009c9", size = 987929, upload-time = "2026-08-17T19:49:38.947Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tree-sitter" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/03/5600b84aff2e6c4fe80cfebb4063fe2f50299521befe5f6092ab8c082f4a/tree_sitter-0.26.0.tar.gz", hash = "sha256:b40c219edccc4564530c96f8f1556f6202b37cda964d1cbd7bd2b7e68b40a245", size = 191423, upload-time = "2026-06-30T12:14:27.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/2f/201c33ea65875d8e4ec73e4d1949718ec49780d84c0adf19793ef75d99a2/tree_sitter-0.26.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff527388df14cb5009f9274faf78cc69a7393ae6acf3b04784b8acca249519c5", size = 148676, upload-time = "2026-06-30T12:13:42.718Z" }, + { url = "https://files.pythonhosted.org/packages/9e/db/05b9d45dd2b9827bf91b6819e749227ca6d686d58658292c0f149294b18e/tree_sitter-0.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bcbadfa614326debef581957d5c780a9d7f66065c13deea61aa21d1dd36263f", size = 140757, upload-time = "2026-06-30T12:13:44.007Z" }, + { url = "https://files.pythonhosted.org/packages/b9/08/1e1da65c1585b8d70130b26d65b41a71737ab623c1fab1008479c2b95b50/tree_sitter-0.26.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f941cea06128c1f74f8937a8e2a90c7db49cf4be6647cd9e07d92a306d91517", size = 631526, upload-time = "2026-06-30T12:13:45.008Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b7/06353044a80ee58a71e884b4a9b2913705849d81025d87308abdfef8f883/tree_sitter-0.26.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e9e46b664887d8c1014f1fb33e09454bbdd9ec1fe29b7fd02dde7b46bc1bb81a", size = 658688, upload-time = "2026-06-30T12:13:46.491Z" }, + { url = "https://files.pythonhosted.org/packages/df/56/c4b22ccbc4f89ae507c0b76e29f363ad4f16eb38c43f7392b3eb9afec64e/tree_sitter-0.26.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:763627db05db34f12333081bd7422cc1c675893d373cc870b3e9249e200700e4", size = 644399, upload-time = "2026-06-30T12:13:47.719Z" }, + { url = "https://files.pythonhosted.org/packages/b5/b7/6b3f0192d5b9b49a199cb0dcd5e45dd1327a82c52c80a49edd790e3a2d9b/tree_sitter-0.26.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:17a1c5cfd3a05d5c7c86bf4282b6ef8092c91dc0a98390499669c3fedb7d1814", size = 655316, upload-time = "2026-06-30T12:13:49.03Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6b/f7475c8f8d699671c2a80c3ed16f5cddd161280c6ed5b845117179c66075/tree_sitter-0.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:f289be0225ba2ace8e87d6c9639b2bc9ff2b5271afb7c5d39282a4a00e248682", size = 129494, upload-time = "2026-06-30T12:13:50.242Z" }, + { url = "https://files.pythonhosted.org/packages/f6/20/0df8dd708638cba7ef875fff4ce80122af7f604f1f0b566de2164108bc01/tree_sitter-0.26.0-cp310-cp310-win_arm64.whl", hash = "sha256:526a165a2cb1d1f79e247d400f0e0acd8d49a817d6f312d543513af200b1f886", size = 116486, upload-time = "2026-06-30T12:13:51.21Z" }, + { url = "https://files.pythonhosted.org/packages/41/18/78aae7e4b5a36daaebb0276e4b07d084d45298758000787838e89329e11f/tree_sitter-0.26.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1d6fe0e8fb4df77b5ee816228e2c4475a63d8cc1d4d3a7ffd7097b2b87fc3e95", size = 148679, upload-time = "2026-06-30T12:13:52.27Z" }, + { url = "https://files.pythonhosted.org/packages/24/e4/b371b9553b0e47d130fc2073e56cab94fecc868be04666bf5bbd1fcd1cc9/tree_sitter-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:514a9bf8993e5210e7970736aaf6020d1759b670e195ef17b1c48f586aa30736", size = 140759, upload-time = "2026-06-30T12:13:53.221Z" }, + { url = "https://files.pythonhosted.org/packages/22/7d/266fb0f2c41e6fb00b0f40e7a3338cdf99651e6a6511ca72bc78fc697636/tree_sitter-0.26.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10f0d4eb94aa7242dcb7f554bcd24dd7ba1c114f00d58759ba08c7a46c8ec51a", size = 637206, upload-time = "2026-06-30T12:13:54.334Z" }, + { url = "https://files.pythonhosted.org/packages/40/9f/47cf22febb47132d5b3a507a27bb99ef89fe5c8ec420a13c6daa9b64f782/tree_sitter-0.26.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:335294ce0504fcefde5245dff596778ffaf820205b98ae0b549c72e48855f1d8", size = 664758, upload-time = "2026-06-30T12:13:55.42Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4d/8d144ca3beb46a62a5102b6deac76bb0da55235c2c7840faf3b12f2e9d97/tree_sitter-0.26.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9997ba61368c48ed54e715676afadf703947a1542464e39d047764fb3624b01", size = 647438, upload-time = "2026-06-30T12:13:56.523Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ed/ed1d6e78520c4fb64ed52fec3f2947bf8c1fbad7bc24e282c56193c9ba42/tree_sitter-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c56581ad256c4195a21bfe449fed5d44a02fe83a4a7d6e70e6ec302c881191c7", size = 661944, upload-time = "2026-06-30T12:13:57.82Z" }, + { url = "https://files.pythonhosted.org/packages/10/83/45f5bd43db1b8248d2fd08ef6cbe43e2725c539e09a2cfb8bc2818646788/tree_sitter-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f8793fd18ad7eec276ed4b51c097b4bf2002b357259b66b0d75db1f3f41c754", size = 129496, upload-time = "2026-06-30T12:13:59.216Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8d/be68e6c04563eb54145424cc83fe0aa8b0ba6c90d8989cf8a032671b5f16/tree_sitter-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:dea4b4e27d49e9ec5b785d4f994da000e6726882fcc6ad05ec98478500c71aef", size = 116484, upload-time = "2026-06-30T12:14:00.147Z" }, + { url = "https://files.pythonhosted.org/packages/87/ca/565702c44815393e3a973552ad546db4e5ca081ca8698640b4e93d809f51/tree_sitter-0.26.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6cb2bd20efb2544c19ac54486ab7cb8ec7b36f913bbe1ce95df84acb96743d9c", size = 148934, upload-time = "2026-06-30T12:14:01.188Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/8bb61957f16ec1b1d92410a006cdc84a952b6352a7313b2ad299f2d21484/tree_sitter-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:918d89529786873f0982a0f59c2a303cd065fbfd1b903d71a8e4e1584f67b42e", size = 140820, upload-time = "2026-06-30T12:14:02.087Z" }, + { url = "https://files.pythonhosted.org/packages/78/0a/8a6f08559182643a814a4ab559948ae817b2851890fd9b995a4fff6541ce/tree_sitter-0.26.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30a88be89ff1f2755297f81e8080d88b795dd98720c3f9fa2acf93873182cc95", size = 638844, upload-time = "2026-06-30T12:14:03.428Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2f/6e6781b31677231366cb3cf27bc8269157f6d4b03c9032865a4f5f2bbe7e/tree_sitter-0.26.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a6b333b0282d8bb0af741f9b018bd2523d4eecb2686bf6717066a625fecfaa4", size = 667487, upload-time = "2026-06-30T12:14:04.669Z" }, + { url = "https://files.pythonhosted.org/packages/02/0b/0483078c8567445557a7015b0e5b187f6d7d4fda73464df9c4bdea7f7f3c/tree_sitter-0.26.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f3c44339dd34fe8eb2b8d5aa7610660499a795f70376b130bbee7a437337280", size = 647975, upload-time = "2026-06-30T12:14:05.797Z" }, + { url = "https://files.pythonhosted.org/packages/27/68/da83ca72c984e96ab4eb3bee0db1a6ffb5de1c8c455f92bd9f420cde7f0e/tree_sitter-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:94550e13b6ae576969da40246f4c4abb206380b5375ad43f26dd9151d55438e3", size = 665018, upload-time = "2026-06-30T12:14:07.278Z" }, + { url = "https://files.pythonhosted.org/packages/d1/36/4d67927fd47b89af4a00f65f55a7370e28778cd50e972c2430487e3ecc27/tree_sitter-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca89e361a276dbc934b28a43dd881199e25d34ff5493ee0ce45f3c52a6124a37", size = 129619, upload-time = "2026-06-30T12:14:08.373Z" }, + { url = "https://files.pythonhosted.org/packages/ed/72/cdefad523eb78710679c6da6a79e3d90f5afd32b1c6aa5a17bac7eef99f6/tree_sitter-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:bc6cb01d5ee75c85424aa1f1c72a82d8f07fd52539a0f3c4a6ed3e8721079b84", size = 116545, upload-time = "2026-06-30T12:14:09.273Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b0/465257cf8f972ad9f9812ec1cbaa8ec210ebebb601ade9a15881aa2436b4/tree_sitter-0.26.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ed0889dbed843ce45ede9f5169c0b2dea2222f12685844a03fadb81f12705867", size = 148893, upload-time = "2026-06-30T12:14:10.541Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ec/19d093e854b45e807fecfdd26105c266f43aeecc39c4dc97992a7074ad5a/tree_sitter-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6189c6c340c7384357711e3d92645e96bfb79f7a502f86de1ebdb23eb43f7dab", size = 140829, upload-time = "2026-06-30T12:14:11.626Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ee/87e74671ed63a837e7a1f17ab94aa3913871e033b27523d8e7b83d6f7ad0/tree_sitter-0.26.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ff2e0750b7daa722302838356d7b65e303829b7eb73c915df127ddba115e1d1", size = 639334, upload-time = "2026-06-30T12:14:12.836Z" }, + { url = "https://files.pythonhosted.org/packages/66/e7/f7e04cd9dff6b6ac0adf23922796fbc76accd4cf4bcda50542748d485679/tree_sitter-0.26.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7075ef857ef86f327dbb72d1e2574dda78db5754b3a1fca6506acd7fe5d561a7", size = 668102, upload-time = "2026-06-30T12:14:14.035Z" }, + { url = "https://files.pythonhosted.org/packages/d3/90/0bfb16b7894fea728c774a89d5af421a9368a2f913bbd4e8dcab7caaecfb/tree_sitter-0.26.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:26c996c1edfee86e977bb3f5462e74fcec0d0b0db1e85a3c475875763caa03be", size = 648560, upload-time = "2026-06-30T12:14:15.302Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e6/0fe05ba396e9623b0ae40ccf34171336b8701ec8d7bd0ee9f5224d638665/tree_sitter-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00289bfe7978f3e0dc0ce69813a20fa9f44ea4c100b3ec62043e5eb74ccfc3a2", size = 665121, upload-time = "2026-06-30T12:14:16.403Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/a944b1ca35bed6068dc84a9967aaf3049d8cc0b7a36179eea8787270a6ab/tree_sitter-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:93e220cab7e6a823efeb2046c49171427de92ef71c7c681c01820d14d8d3721f", size = 129615, upload-time = "2026-06-30T12:14:17.463Z" }, + { url = "https://files.pythonhosted.org/packages/09/ef/c7ca48293580d2249f36940c4eed5b4ddeb9ce75baf9a4ef30621987e0c7/tree_sitter-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:b31a8195d2f224224c530ac814632d98c1dcc123d227442c07c736e86b70d564", size = 116525, upload-time = "2026-06-30T12:14:18.53Z" }, + { url = "https://files.pythonhosted.org/packages/c5/7a/4d84e6f6ae2c3e757490dd84de251712c31e293dfe31f28da1ec019cefa2/tree_sitter-0.26.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5a3c93a352b7e6f70f73e121bbfa2d0117ba7478bd51114ed35c91b0b78814fa", size = 148901, upload-time = "2026-06-30T12:14:19.452Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d9/efe62ec65dc9d096e834d27b8c058127e2146e42ff3380b822a233f016a6/tree_sitter-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5fc2f41bf246ff2f70a9cc3690be35ec7580a4923151873d898c8bcb1a4503d3", size = 140805, upload-time = "2026-06-30T12:14:20.478Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2c/c82326b7b97e3c485c18679883b16f89e5e913c639d3b219d3da70c9e67e/tree_sitter-0.26.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8ea92a255c91671a7ec4625aba3ab7bb5220c423630ffbf83c45d7312abe084", size = 640586, upload-time = "2026-06-30T12:14:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7a/f56e7d8282859452611024c7cbc623bfba5b24b8cb9b8f8bc88c5219fe9a/tree_sitter-0.26.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f665510f0fcf4636fb9696f1f7853bed7a3bd764b7bb0cb8494e619c14ed5a0c", size = 668300, upload-time = "2026-06-30T12:14:22.728Z" }, + { url = "https://files.pythonhosted.org/packages/91/51/240ee81b9d5e9ca0a6cb1528e8605ffa70ab58c89ce126631be96d3e4bae/tree_sitter-0.26.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:253df7ab82cc0a9d311cd65f06e9f99fb3eac55996ae9fc94da22f123a861b90", size = 649627, upload-time = "2026-06-30T12:14:23.819Z" }, + { url = "https://files.pythonhosted.org/packages/6a/54/760035cefedf9eb44f0f84c4ac22f1322e73155853e272576ee876336312/tree_sitter-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ff80d4833d330a73184a3ac5132abe93c575d2dea31975c6f15c0d21fef238aa", size = 664885, upload-time = "2026-06-30T12:14:25.064Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1b/0b36fe2a984ecedc4ce6aefd5d56447a6626a8e9b595c4e48658510ce8f8/tree_sitter-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:a4033fecc8f606c7f2e8b8014d0057b74668a7f0152763606f7bc25c5f9ec64c", size = 132688, upload-time = "2026-06-30T12:14:26.106Z" }, + { url = "https://files.pythonhosted.org/packages/4d/74/ebc041a13fbf40144afdb0d4b447e48e0b4012ca866c63de8b48f801f0c1/tree_sitter-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:823251c4b6725a7c03ed497a339135ede7ae4bdde75bb8be7ef5e305aeb4ff52", size = 120287, upload-time = "2026-06-30T12:14:26.991Z" }, +] + +[[package]] +name = "tree-sitter-c" +version = "0.24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/c9/3834f3d9278251aea7312274971bc4c45b17aec2490fd4b884d93bd7019a/tree_sitter_c-0.24.2.tar.gz", hash = "sha256:1628584df0299b5a340aa63f8e67b6c97c91517f52fa7e7a4c557e40adb330a9", size = 228397, upload-time = "2026-04-22T08:06:14.491Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/c1/26ed17730ec2c17bedc1b673349e5e0a466c578e3eb0327c3b73cf52bf97/tree_sitter_c-0.24.2-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:4d4579a8b54f0a442f903d88d3304cab77cd5c2031d4015baa4f2f8e15d6dcb7", size = 81016, upload-time = "2026-04-22T08:06:07.208Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1c/1140db75e7e375cda3c68792a33826c4fd40b5b98c3259d93c75f6c8368f/tree_sitter_c-0.24.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:97bc80a224d48215d4e6e6376bf30d114f4c317b8145ff1b02afe785d4ba7bdd", size = 86213, upload-time = "2026-04-22T08:06:08.136Z" }, + { url = "https://files.pythonhosted.org/packages/e9/8c/0dfb88d726f8821d1c4c36042f092be974a800afd734307a595b8604190c/tree_sitter_c-0.24.2-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5041ef67eb68ce6bc8bb0b1f8ef3a5585ce523dae0c7eec109ab0627dd75aede", size = 94264, upload-time = "2026-04-22T08:06:08.918Z" }, + { url = "https://files.pythonhosted.org/packages/87/78/47dc570e7aee6b0a1ecc2520b30639cc2b06003154c9ab0672d86bf720d5/tree_sitter_c-0.24.2-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c098bedcd5ac86ff93fa734d51d1dd86aed40fd5ed7d634c7af11380a0469969", size = 94560, upload-time = "2026-04-22T08:06:09.852Z" }, + { url = "https://files.pythonhosted.org/packages/29/37/75d59d3f74f4cfc00f04472917e933d8a9c9fdc6eff980ef9552e010e6aa/tree_sitter_c-0.24.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:82842c5a5f2acd93f4de10038c33ac179c8979defc39376f990348d6289e933b", size = 94023, upload-time = "2026-04-22T08:06:10.682Z" }, + { url = "https://files.pythonhosted.org/packages/64/57/8fc655d5a446a70a637e92b98bd2fdaab88bf5bb5b36076ac4add544808d/tree_sitter_c-0.24.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2b42e8e22202c251f8629306f9321233542e07a6e01611b5fe83489272143eb", size = 94160, upload-time = "2026-04-22T08:06:11.497Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f7/72a1d6b42dd31fd37e03ff67e7dc5ee572301499e6b216002b8dd42a1714/tree_sitter_c-0.24.2-cp310-abi3-win_amd64.whl", hash = "sha256:abb549225091f7b25df2dd3a0143ece6e208f7055d8bcb4700b41ee79b9ef1e1", size = 84669, upload-time = "2026-04-22T08:06:12.347Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9d/7475d9ae8ef679aa36c7dfe6c903ab78e573651c68b6ef9862d6a3f994db/tree_sitter_c-0.24.2-cp310-abi3-win_arm64.whl", hash = "sha256:4a2f4371cd816cc3153458f69062135ebb2ea5f275ddd90494e5c823d778204a", size = 82956, upload-time = "2026-04-22T08:06:13.364Z" }, +] + +[[package]] +name = "tree-sitter-c-sharp" +version = "0.23.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/fb/7e2962bc1901daf264e7ce263b168e0139304a5f8f66c9b2baf20e550f87/tree_sitter_c_sharp-0.23.5.tar.gz", hash = "sha256:2635c7d5ec93e59f2e831b571bed99c4cc68a5d183a0994020aa769e1b990a71", size = 1147914, upload-time = "2026-04-14T16:11:22.441Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/c4/86d8d469400a856757a464a6ac01af97d8cdacbb595e62bdb98bf1e9db90/tree_sitter_c_sharp-0.23.5-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61e1981cf21b09ee547b9c4c68e64fb4394325f8fc8d5f6d50d41471eba923ea", size = 333658, upload-time = "2026-04-14T16:11:11.288Z" }, + { url = "https://files.pythonhosted.org/packages/c8/13/593c8603f834eaf15082b81e079289fc9f062b4c0ab5b9489134084eec06/tree_sitter_c_sharp-0.23.5-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a75994a11f6fed3f5b8c36ad6a00e5dc43205bd912c43af3a2a54fdf649664eb", size = 376296, upload-time = "2026-04-14T16:11:12.972Z" }, + { url = "https://files.pythonhosted.org/packages/41/5a/a8855cbb5bbab28adb29c2c7f0e7be5a9f1d21450c13b3c3e613190d9b8c/tree_sitter_c_sharp-0.23.5-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aa88a780204cd153c4c1ae2d59c654cee1402212fa0d069823d6d34301587438", size = 358333, upload-time = "2026-04-14T16:11:14.214Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c8/e0f391e343f5424d0627e3b6886c77baeb1249a3f10986be00b0b64ecdab/tree_sitter_c_sharp-0.23.5-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea38fb095d85d360dc5a0bec2fa605e496228876f798c9e089d5f0e72bcef46", size = 359448, upload-time = "2026-04-14T16:11:15.419Z" }, + { url = "https://files.pythonhosted.org/packages/6f/fc/10f807ac79f928241c5e0d827fdaf91e97dfba662fc7e07d7bd664140ec1/tree_sitter_c_sharp-0.23.5-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:05a9256415e7f24d4f133133794a9c224c60d19f677a04e2f6a94c25090b6d65", size = 358144, upload-time = "2026-04-14T16:11:17.087Z" }, + { url = "https://files.pythonhosted.org/packages/de/2a/6c3e12ef0cf09138717fcc02e1de8b76a3928d1bed65c7e3c2bd3172bcef/tree_sitter_c_sharp-0.23.5-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8636dc70b5a373c35c1036ed5de98e801f2e4d105ae41e2e20b6804c36e3bf33", size = 357525, upload-time = "2026-04-14T16:11:18.214Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e0/bd287b092d611df95a9149117fd27b5947ce75527113d6898a4b4e2c8858/tree_sitter_c_sharp-0.23.5-cp310-abi3-win_amd64.whl", hash = "sha256:41a28cfa3d9ea50f5629e44550a03188c8fbd5079803dfc03554b6fd594b33fa", size = 338756, upload-time = "2026-04-14T16:11:19.661Z" }, + { url = "https://files.pythonhosted.org/packages/7f/fb/114ff43fdd256d0befed32f77c1dadee9517867181c70794571f718ed05c/tree_sitter_c_sharp-0.23.5-cp310-abi3-win_arm64.whl", hash = "sha256:2de4ebf95ddc2e92cd3105c8a8e0e7ec646bc82f52bfaf2f3acec0fa2401ec09", size = 337260, upload-time = "2026-04-14T16:11:20.849Z" }, +] + +[[package]] +name = "tree-sitter-cpp" +version = "0.23.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/2c/4dd63d705a8933543cad9b92ff31be849b164fec91a6eb63475ebc9ce668/tree_sitter_cpp-0.23.4.tar.gz", hash = "sha256:6a59c4cebb1ad1dc2e8d586cf8a72b39d21b8108b7b139d089719e81a339e41d", size = 940358, upload-time = "2024-11-11T06:59:24.934Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/ac/11d56670f7b048362db872ca866fd00ba2002a322ab179f047b7c0fb2910/tree_sitter_cpp-0.23.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aacb1759f0efd9dbc25bd8ee88184a340483018869f75412d9c3bc32c039a520", size = 287861, upload-time = "2024-11-11T06:59:15.005Z" }, + { url = "https://files.pythonhosted.org/packages/12/1c/0337c016bdc00a77a3326d12f10ee836401dd28f27db6fd5b7734bfb21ed/tree_sitter_cpp-0.23.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc3c404d9f0cbd87951213a85440afbf4c31e718f8d907fa9ee12bea4b8d276f", size = 315513, upload-time = "2024-11-11T06:59:16.679Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7b/dd38c049b10ed7fda118b903a1d28a8b55a36b98c30606ef90e8f374c6de/tree_sitter_cpp-0.23.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc43ddf1279d5d5a4ef190373f4cb16522801bec4492bcd4754edf2aeba2b7b", size = 334813, upload-time = "2024-11-11T06:59:18.253Z" }, + { url = "https://files.pythonhosted.org/packages/6a/4d/23e390234d2acd351f5563b1079c515d7c1fe13ddb7392cee543be74dda3/tree_sitter_cpp-0.23.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:773d2cafc08bbc0f998687fa33f42f378c1a371cdb582870c4d13abb06092706", size = 316110, upload-time = "2024-11-11T06:59:19.823Z" }, + { url = "https://files.pythonhosted.org/packages/32/c7/b94a7e0e803af9d3bd4608fb4f0cfb2e9e233abaf0a38c928bfb0b1a025d/tree_sitter_cpp-0.23.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:247d127f0eb6574b0f6b30c0151e0bd0774e2e7acf9c558bdf9fbb8adc2e80c0", size = 308242, upload-time = "2024-11-11T06:59:21.466Z" }, + { url = "https://files.pythonhosted.org/packages/37/7e/909e52b3dec09c475140b0e175511e275d0d00ba2dbd7c68102d377ae0f6/tree_sitter_cpp-0.23.4-cp39-abi3-win_amd64.whl", hash = "sha256:68606a45bea92669d155399e1239f771a7767d8683cd8f8e30e7d813107030ca", size = 290997, upload-time = "2024-11-11T06:59:22.432Z" }, + { url = "https://files.pythonhosted.org/packages/d4/6a/65435d4d1f4c735be7ffe52d7c2e7b8a7f7c2790343a2719c60c548611c8/tree_sitter_cpp-0.23.4-cp39-abi3-win_arm64.whl", hash = "sha256:712f84f18be94cbe2a148fa4fdf40fcf4a8c25a8f7670efb9f8a47ddec2fc281", size = 288203, upload-time = "2024-11-11T06:59:23.404Z" }, +] + +[[package]] +name = "tree-sitter-elixir" +version = "0.3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/83/0501ee426bcd40cf5f765ce66ff2e7136d438ff4e65aeb08991f9826d4e5/tree_sitter_elixir-0.3.5.tar.gz", hash = "sha256:ead089393b1ce732304e6b6fb0bc0ab79e3295663d697be025bd49f0f367b74d", size = 445087, upload-time = "2026-03-02T13:31:09.378Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/29/c2c2b028c49f3c08270dd01ee72a9e735d59c59499d0b7ed09f45157f6b8/tree_sitter_elixir-0.3.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:514078a2f68d27da9a1e6b6e9601b8456faba6260ecfa252e898a848c4f8584d", size = 163335, upload-time = "2026-03-02T13:31:00.053Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d7/f0ad3de0b359a8a1f694268855bb34134c88774fa2276cb33413163c0403/tree_sitter_elixir-0.3.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:015f537731af690cfa238b0fb76a8af4f0d1a2c54a38563f159926d2967ce650", size = 174644, upload-time = "2026-03-02T13:31:01.198Z" }, + { url = "https://files.pythonhosted.org/packages/31/35/78c94e164542ad08098b83cb7e046261f3ab2edade96e29727dd209bfa35/tree_sitter_elixir-0.3.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ebfe3491a3d00ac50b12a3bfcabb1c564f3809ed8a095099fe87f49d6b3987e6", size = 182857, upload-time = "2026-03-02T13:31:02.512Z" }, + { url = "https://files.pythonhosted.org/packages/3c/50/69ed38e335d1228f6eb1c12707269fefb349710aaf0b6d4a730ea88b95c2/tree_sitter_elixir-0.3.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1159057f914d4468fc53cb9d7e8369f8a7826e1d07765bb53fbf391e6058863", size = 184199, upload-time = "2026-03-02T13:31:03.512Z" }, + { url = "https://files.pythonhosted.org/packages/82/8a/8233648868bf2432cb7ab85ffc4ac4b2b1cf4addf75d6a62bacd2dba6f73/tree_sitter_elixir-0.3.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d6187b4d592bfb31760799ac6ddbb5a2457ba0a612de43d77bcbcd5f00cc49bf", size = 183571, upload-time = "2026-03-02T13:31:04.728Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4a/f78454d228835a619db173f816090ab0c86f865987e2504280ced7fdbd5c/tree_sitter_elixir-0.3.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5d5d8aa077ff244d24406b1fb5a17c03a2919c5183c51ca35654870d08b239b", size = 182618, upload-time = "2026-03-02T13:31:06.018Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a5/634b505a4c349becc753c1faef5350f32ca027297c16a45fb0942967db2a/tree_sitter_elixir-0.3.5-cp39-abi3-win_amd64.whl", hash = "sha256:c0b5df229405d42ba5c94254d92e414b1f200be8422561d243ae5b3558e84f76", size = 167219, upload-time = "2026-03-02T13:31:07.071Z" }, + { url = "https://files.pythonhosted.org/packages/77/f2/711baae88f98e3a30efee9383fbcb603a3188c20941643c71d3d3b936d66/tree_sitter_elixir-0.3.5-cp39-abi3-win_arm64.whl", hash = "sha256:fee42b90962e1e131cc31720f3038410291b2196ed231e00c1721597fc0567df", size = 164003, upload-time = "2026-03-02T13:31:08.013Z" }, +] + +[[package]] +name = "tree-sitter-go" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/05/727308adbbc79bcb1c92fc0ea10556a735f9d0f0a5435a18f59d40f7fd77/tree_sitter_go-0.25.0.tar.gz", hash = "sha256:a7466e9b8d94dda94cae8d91629f26edb2d26166fd454d4831c3bf6dfa2e8d68", size = 93890, upload-time = "2025-08-29T06:20:25.044Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/aa/0984707acc2b9bb461fe4a41e7e0fc5b2b1e245c32820f0c83b3c602957c/tree_sitter_go-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b852993063a3429a443e7bd0aa376dd7dd329d595819fabf56ac4cf9d7257b54", size = 47117, upload-time = "2025-08-29T06:20:14.286Z" }, + { url = "https://files.pythonhosted.org/packages/32/16/dd4cb124b35e99239ab3624225da07d4cb8da4d8564ed81d03fcb3a6ba9f/tree_sitter_go-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:503b81a2b4c31e302869a1de3a352ad0912ccab3df9ac9950197b0a9ceeabd8f", size = 48674, upload-time = "2025-08-29T06:20:17.557Z" }, + { url = "https://files.pythonhosted.org/packages/86/fb/b30d63a08044115d8b8bd196c6c2ab4325fb8db5757249a4ef0563966e2e/tree_sitter_go-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04b3b3cb4aff18e74e28d49b716c6f24cb71ddfdd66768987e26e4d0fa812f74", size = 66418, upload-time = "2025-08-29T06:20:18.345Z" }, + { url = "https://files.pythonhosted.org/packages/26/21/d3d88a30ad007419b2c97b3baeeef7431407faf9f686195b6f1cad0aedf9/tree_sitter_go-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:148255aca2f54b90d48c48a9dbb4c7faad6cad310a980b2c5a5a9822057ed145", size = 72006, upload-time = "2025-08-29T06:20:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d0/0dd6442353ced8a88bbda9e546f4ea29e381b59b5a40b122e5abb586bb6c/tree_sitter_go-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4d338116cdf8a6c6ff990d2441929b41323ef17c710407abe0993c13417d6aad", size = 70603, upload-time = "2025-08-29T06:20:21.544Z" }, + { url = "https://files.pythonhosted.org/packages/01/e2/ee5e09f63504fc286539535d374d2eaa0e7d489b80f8f744bb3962aff22a/tree_sitter_go-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5608e089d2a29fa8d2b327abeb2ad1cdb8e223c440a6b0ceab0d3fa80bdeebae", size = 66088, upload-time = "2025-08-29T06:20:22.336Z" }, + { url = "https://files.pythonhosted.org/packages/6e/b6/d9142583374720e79aca9ccb394b3795149a54c012e1dfd80738df2d984e/tree_sitter_go-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:30d4ada57a223dfc2c32d942f44d284d40f3d1215ddcf108f96807fd36d53022", size = 48152, upload-time = "2025-08-29T06:20:23.089Z" }, + { url = "https://files.pythonhosted.org/packages/9e/00/9a2638e7339236f5b01622952a4d71c1474dd3783d1982a89555fc1f03b1/tree_sitter_go-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:d5d62362059bf79997340773d47cc7e7e002883b527a05cca829c46e40b70ded", size = 46752, upload-time = "2025-08-29T06:20:24.235Z" }, +] + +[[package]] +name = "tree-sitter-html" +version = "0.23.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/06/ad1c53c79da15bef85939aa022d72301e12a9773e9bb9a5e6a6f65b7753a/tree_sitter_html-0.23.2.tar.gz", hash = "sha256:bc9922defe23144d9146bc1509fcd00d361bf6b3303f9effee6532c6a0296961", size = 13977, upload-time = "2024-11-11T05:58:07.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/27/b846852b567601c4df765bcb4636085a3260e9f03ae21e0ef2e7c7f957fc/tree_sitter_html-0.23.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e1641d5edf5568a246c6c47b947ed524b5bf944664e6473b21d4ae568e28ee9", size = 14787, upload-time = "2024-11-11T05:57:58.684Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/827c315deb156bb8cac541da800c4bd62878f50a28b7498fbb722bddd225/tree_sitter_html-0.23.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:3d0a83dd6cd1c7d4bcf6287b5145c92140f0194f8516f329ae8b9e952fbfa8ff", size = 15232, upload-time = "2024-11-11T05:58:00.139Z" }, + { url = "https://files.pythonhosted.org/packages/91/cb/2028fe446d0e18edf3737d91edcb6430f2c97f2296b8cd760702dfa13d90/tree_sitter_html-0.23.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b3775732fffc0abd275a419ef018fd4c1ad4044b2a2e422f3378d93c30eded", size = 39109, upload-time = "2024-11-11T05:58:00.986Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/b24f5e66be51447cf7e9bcce3d9440a6b4f17021da85779a51566646a7c7/tree_sitter_html-0.23.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bdaa7ac5030d416aea0c512d4810ef847bbbd62d61e3d213f370b64ce147293", size = 39630, upload-time = "2024-11-11T05:58:02.424Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d5/31b46cb362ad9679af21ff8b75d846fb7522ecf949beea4fddc86e97815d/tree_sitter_html-0.23.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d2e9631b66041a4fd792d7f79a0c4128adb3bfc71f3dcb7e1a3eab5dbee77d67", size = 37440, upload-time = "2024-11-11T05:58:03.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/30/03910b7c037105f33166439f0518dd0aa4f1b7ef8c9d7367c6e9cc6b5681/tree_sitter_html-0.23.2-cp39-abi3-win_amd64.whl", hash = "sha256:85095f49f9e57f0ac9087a3e830783352c8447fdda55b1c1139aa47e5eaa0e21", size = 17765, upload-time = "2024-11-11T05:58:05.163Z" }, + { url = "https://files.pythonhosted.org/packages/20/32/63761055b03c69202a0e67b6e9a5cb3578da23aeefb62ee3e7ec2c1b0ff2/tree_sitter_html-0.23.2-cp39-abi3-win_arm64.whl", hash = "sha256:0f65ed9e877144d0f04ade5644e5b0e88bf98a9e60bce65235c99905623e2f1a", size = 15576, upload-time = "2024-11-11T05:58:06.577Z" }, +] + +[[package]] +name = "tree-sitter-java" +version = "0.23.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/dc/eb9c8f96304e5d8ae1663126d89967a622a80937ad2909903569ccb7ec8f/tree_sitter_java-0.23.5.tar.gz", hash = "sha256:f5cd57b8f1270a7f0438878750d02ccc79421d45cca65ff284f1527e9ef02e38", size = 138121, upload-time = "2024-12-21T18:24:26.936Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/21/b3399780b440e1567a11d384d0ebb1aea9b642d0d98becf30fa55c0e3a3b/tree_sitter_java-0.23.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:355ce0308672d6f7013ec913dee4a0613666f4cda9044a7824240d17f38209df", size = 58926, upload-time = "2024-12-21T18:24:12.53Z" }, + { url = "https://files.pythonhosted.org/packages/57/ef/6406b444e2a93bc72a04e802f4107e9ecf04b8de4a5528830726d210599c/tree_sitter_java-0.23.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:24acd59c4720dedad80d548fe4237e43ef2b7a4e94c8549b0ca6e4c4d7bf6e69", size = 62288, upload-time = "2024-12-21T18:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6c/74b1c150d4f69c291ab0b78d5dd1b59712559bbe7e7daf6d8466d483463f/tree_sitter_java-0.23.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9401e7271f0b333df39fc8a8336a0caf1b891d9a2b89ddee99fae66b794fc5b7", size = 85533, upload-time = "2024-12-21T18:24:16.695Z" }, + { url = "https://files.pythonhosted.org/packages/29/09/e0d08f5c212062fd046db35c1015a2621c2631bc8b4aae5740d7adb276ad/tree_sitter_java-0.23.5-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:370b204b9500b847f6d0c5ad584045831cee69e9a3e4d878535d39e4a7e4c4f1", size = 84033, upload-time = "2024-12-21T18:24:18.758Z" }, + { url = "https://files.pythonhosted.org/packages/43/56/7d06b23ddd09bde816a131aa504ee11a1bbe87c6b62ab9b2ed23849a3382/tree_sitter_java-0.23.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:aae84449e330363b55b14a2af0585e4e0dae75eb64ea509b7e5b0e1de536846a", size = 82564, upload-time = "2024-12-21T18:24:20.493Z" }, + { url = "https://files.pythonhosted.org/packages/da/d6/0528c7e1e88a18221dbd8ccee3825bf274b1fa300f745fd74eb343878043/tree_sitter_java-0.23.5-cp39-abi3-win_amd64.whl", hash = "sha256:1ee45e790f8d31d416bc84a09dac2e2c6bc343e89b8a2e1d550513498eedfde7", size = 60650, upload-time = "2024-12-21T18:24:22.902Z" }, + { url = "https://files.pythonhosted.org/packages/72/57/5bab54d23179350356515526fff3cc0f3ac23bfbc1a1d518a15978d4880e/tree_sitter_java-0.23.5-cp39-abi3-win_arm64.whl", hash = "sha256:402efe136104c5603b429dc26c7e75ae14faaca54cfd319ecc41c8f2534750f4", size = 59059, upload-time = "2024-12-21T18:24:24.934Z" }, +] + +[[package]] +name = "tree-sitter-javascript" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/e0/e63103c72a9d3dfd89a31e02e660263ad84b7438e5f44ee82e443e65bbde/tree_sitter_javascript-0.25.0.tar.gz", hash = "sha256:329b5414874f0588a98f1c291f1b28138286617aa907746ffe55adfdcf963f38", size = 132338, upload-time = "2025-09-01T07:13:44.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/df/5106ac250cd03661ebc3cc75da6b3d9f6800a3606393a0122eca58038104/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b70f887fb269d6e58c349d683f59fa647140c410cfe2bee44a883b20ec92e3dc", size = 64052, upload-time = "2025-09-01T07:13:36.865Z" }, + { url = "https://files.pythonhosted.org/packages/b1/8f/6b4b2bc90d8ab3955856ce852cc9d1e82c81d7ab9646385f0e75ffd5b5d3/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:8264a996b8845cfce06965152a013b5d9cbb7d199bc3503e12b5682e62bb1de1", size = 66440, upload-time = "2025-09-01T07:13:37.962Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c4/7da74ecdcd8a398f88bd003a87c65403b5fe0e958cdd43fbd5fd4a398fcf/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dc04ba91fc8583344e57c1f1ed5b2c97ecaaf47480011b92fbeab8dda96db75", size = 99728, upload-time = "2025-09-01T07:13:38.755Z" }, + { url = "https://files.pythonhosted.org/packages/96/c8/97da3af4796495e46421e9344738addb3602fa6426ea695be3fcbadbee37/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:199d09985190852e0912da2b8d26c932159be314bc04952cf917ed0e4c633e6b", size = 106072, upload-time = "2025-09-01T07:13:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/13/be/c964e8130be08cc9bd6627d845f0e4460945b158429d39510953bbcb8fcc/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dfcf789064c58dc13c0a4edb550acacfc6f0f280577f1e7a00de3e89fc7f8ddc", size = 104388, upload-time = "2025-09-01T07:13:40.866Z" }, + { url = "https://files.pythonhosted.org/packages/ee/89/9b773dee0f8961d1bb8d7baf0a204ab587618df19897c1ef260916f318ec/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b852d3aee8a36186dbcc32c798b11b4869f9b5041743b63b65c2ef793db7a54", size = 98377, upload-time = "2025-09-01T07:13:41.838Z" }, + { url = "https://files.pythonhosted.org/packages/3b/dc/d90cb1790f8cec9b4878d278ad9faf7c8f893189ce0f855304fd704fc274/tree_sitter_javascript-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:e5ed840f5bd4a3f0272e441d19429b26eedc257abe5574c8546da6b556865e3c", size = 62975, upload-time = "2025-09-01T07:13:42.828Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1f/f9eba1038b7d4394410f3c0a6ec2122b590cd7acb03f196e52fa57ebbe72/tree_sitter_javascript-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:622a69d677aa7f6ee2931d8c77c981a33f0ebb6d275aa9d43d3397c879a9bb0b", size = 61668, upload-time = "2025-09-01T07:13:43.803Z" }, +] + +[[package]] +name = "tree-sitter-lua" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/07/98d7c5f60c9a79a1d40f85e59b7c25a0102d2eebcc5a83608c7c308edf22/tree_sitter_lua-0.5.0.tar.gz", hash = "sha256:0e46356038ccb8ce1049289104c56230003448309a335f2e353f1edc7b373552", size = 36829, upload-time = "2026-02-26T17:07:33.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/b2/d1ffd919692b217d257222cbfa1705268dfea073b91ffb81726da0e27fe8/tree_sitter_lua-0.5.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cc4f2eb734dc9223bf96c0eeffa78a9485db207d00841e27e52c8b036f2164f7", size = 22781, upload-time = "2026-02-26T17:07:26.412Z" }, + { url = "https://files.pythonhosted.org/packages/de/0c/6bc3228d01419e8b5af664bf328d174b02a64736ffa23a335c778c8cda68/tree_sitter_lua-0.5.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c14714ad395c4166566f3e4dd0cc0979411684cbcd23702e3c631c3e6eae84fd", size = 23437, upload-time = "2026-02-26T17:07:27.504Z" }, + { url = "https://files.pythonhosted.org/packages/45/2b/1edfd9bef9a1cc11047cd87ca9c60707b8425080cfc0498a7d3bc762d783/tree_sitter_lua-0.5.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ec448c854fea32414a0449147d648bc5baddf7a0357008c4abe3269db35370a", size = 41743, upload-time = "2026-02-26T17:07:28.433Z" }, + { url = "https://files.pythonhosted.org/packages/bf/7f/53bbfde347e5d9a34e0a9ed367d340dd876cf987c6ce8478c0597e1cf608/tree_sitter_lua-0.5.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b02f057a997e618c5b1b03a5cef9dd6c2673043d396ca86edba372728f17ef53", size = 44405, upload-time = "2026-02-26T17:07:29.662Z" }, + { url = "https://files.pythonhosted.org/packages/f9/63/989c0bcde97280cb7938aa2797ce310735c907ad372f6adc4645ef8dfb86/tree_sitter_lua-0.5.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a048571f55a3dd30c94e2313091274338284cab23e757c181e4961c185ba9d0", size = 43208, upload-time = "2026-02-26T17:07:30.612Z" }, + { url = "https://files.pythonhosted.org/packages/6d/da/d9ce9a35c3042b2fd7453ba69d543d32c5d09563277a099b0859ce53d919/tree_sitter_lua-0.5.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:922a5a3d0fec8af373cab504cbcd9abeeebb212d454f54163591c50c183466be", size = 41357, upload-time = "2026-02-26T17:07:31.408Z" }, + { url = "https://files.pythonhosted.org/packages/25/20/8973f4049d81b2920ef496cf61b9b947ccee63dfb1aa89cb73810cb22784/tree_sitter_lua-0.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:ace3dd61218124ee08410a55601cb5fbbb00be3ee004b30e705cef9ef25165a9", size = 24755, upload-time = "2026-02-26T17:07:32.128Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/3104ecfa3c34320411bcad9b4f2823956487b6e222edcc83689819badc9d/tree_sitter_lua-0.5.0-cp310-abi3-win_arm64.whl", hash = "sha256:8488f3bea40779896f5771bcfcdc26900eb21e94f6658eb68a848fc37dd39221", size = 23506, upload-time = "2026-02-26T17:07:32.775Z" }, +] + +[[package]] +name = "tree-sitter-php" +version = "0.24.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/c8/1a499038cb4036bea1d560ffbc807a6fb940261aa22296bd49a62ed8bcba/tree_sitter_php-0.24.1-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:d56e2dcf025450f84a2cdbf4b18a09e6cb88b92e9e6858e63de3d4133ab2e43e", size = 219550, upload-time = "2025-08-16T22:14:30.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5e/b52f2599acb29f6899470f7137d3d491c752b88df3950fb7408aea57ddca/tree_sitter_php-0.24.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:29759c67d4c27a68c227ed82c0b7e4699617b1bd23757d50c081f81a12b4f80d", size = 229632, upload-time = "2025-08-16T22:14:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/6b/58/ca290da45380bd6ba7c6b0b98cc5fc30325c32c7f14f0c93196a451b19c4/tree_sitter_php-0.24.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94b89832ac09f078eed2acd88598838bc51012224cbcebb916dbb6a37e74357e", size = 325351, upload-time = "2025-08-16T22:14:33Z" }, + { url = "https://files.pythonhosted.org/packages/9a/c6/fd863a7a779d0ab67688939eba0e08bff7b1ffe731288d3d3610df21217b/tree_sitter_php-0.24.1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a1404a30f2972498ace040b0029738b8dac45d0a12932ccb8b605eb94bafbe4", size = 313021, upload-time = "2025-08-16T22:14:34.394Z" }, + { url = "https://files.pythonhosted.org/packages/48/ed/aace12f30c4f5474a9ad0e9da85c060174e3764342c9860974bb0feb02fc/tree_sitter_php-0.24.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3e96f61462a960c78e5389c7ba6c16c25e66b465c763b8e63ad66423326c2fa7", size = 305905, upload-time = "2025-08-16T22:14:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c4/6c690c33b1ae9cae9505c0a2896f046fda174d72c46bdafce6aab3b2f2e7/tree_sitter_php-0.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:1a1b65b72a8410d421f914ee13d38fd546a94d01cb834f69b27c78ba7589a5b5", size = 208014, upload-time = "2025-08-16T22:14:37.206Z" }, + { url = "https://files.pythonhosted.org/packages/7b/69/54c670d725c092b89e76ca6984582b6a768b128ac1859ed48141b124da1d/tree_sitter_php-0.24.1-cp310-abi3-win_arm64.whl", hash = "sha256:56a70c5ef1bddb15f220a479b2f2edf3042c764b6c443921fbd7ca9174d664e3", size = 206033, upload-time = "2025-08-16T22:14:38.632Z" }, +] + +[[package]] +name = "tree-sitter-python" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b8/8b/c992ff0e768cb6768d5c96234579bf8842b3a633db641455d86dd30d5dac/tree_sitter_python-0.25.0.tar.gz", hash = "sha256:b13e090f725f5b9c86aa455a268553c65cadf325471ad5b65cd29cac8a1a68ac", size = 159845, upload-time = "2025-09-11T06:47:58.159Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/64/a4e503c78a4eb3ac46d8e72a29c1b1237fa85238d8e972b063e0751f5a94/tree_sitter_python-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:14a79a47ddef72f987d5a2c122d148a812169d7484ff5c75a3db9609d419f361", size = 73790, upload-time = "2025-09-11T06:47:47.652Z" }, + { url = "https://files.pythonhosted.org/packages/e6/1d/60d8c2a0cc63d6ec4ba4e99ce61b802d2e39ef9db799bdf2a8f932a6cd4b/tree_sitter_python-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:480c21dbd995b7fe44813e741d71fed10ba695e7caab627fb034e3828469d762", size = 76691, upload-time = "2025-09-11T06:47:49.038Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cb/d9b0b67d037922d60cbe0359e0c86457c2da721bc714381a63e2c8e35eba/tree_sitter_python-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:86f118e5eecad616ecdb81d171a36dde9bef5a0b21ed71ea9c3e390813c3baf5", size = 108133, upload-time = "2025-09-11T06:47:50.499Z" }, + { url = "https://files.pythonhosted.org/packages/40/bd/bf4787f57e6b2860f3f1c8c62f045b39fb32d6bac4b53d7a9e66de968440/tree_sitter_python-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be71650ca2b93b6e9649e5d65c6811aad87a7614c8c1003246b303f6b150f61b", size = 110603, upload-time = "2025-09-11T06:47:51.985Z" }, + { url = "https://files.pythonhosted.org/packages/5d/25/feff09f5c2f32484fbce15db8b49455c7572346ce61a699a41972dea7318/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6d5b5799628cc0f24691ab2a172a8e676f668fe90dc60468bee14084a35c16d", size = 108998, upload-time = "2025-09-11T06:47:53.046Z" }, + { url = "https://files.pythonhosted.org/packages/75/69/4946da3d6c0df316ccb938316ce007fb565d08f89d02d854f2d308f0309f/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:71959832fc5d9642e52c11f2f7d79ae520b461e63334927e93ca46cd61cd9683", size = 107268, upload-time = "2025-09-11T06:47:54.388Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a2/996fc2dfa1076dc460d3e2f3c75974ea4b8f02f6bc925383aaae519920e8/tree_sitter_python-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:9bcde33f18792de54ee579b00e1b4fe186b7926825444766f849bf7181793a76", size = 76073, upload-time = "2025-09-11T06:47:55.773Z" }, + { url = "https://files.pythonhosted.org/packages/07/19/4b5569d9b1ebebb5907d11554a96ef3fa09364a30fcfabeff587495b512f/tree_sitter_python-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:0fbf6a3774ad7e89ee891851204c2e2c47e12b63a5edbe2e9156997731c128bb", size = 74169, upload-time = "2025-09-11T06:47:56.747Z" }, +] + +[[package]] +name = "tree-sitter-ruby" +version = "0.23.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/5b/6d24be4fde4743481bd8e3fd24b434870cb6612238c8544b71fe129ed850/tree_sitter_ruby-0.23.1.tar.gz", hash = "sha256:886ed200bfd1f3ca7628bf1c9fefd42421bbdba70c627363abda67f662caa21e", size = 489602, upload-time = "2024-11-11T04:51:30.328Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/2e/2717b9451c712b60f833827a696baf29d8e50a0f7dccbf22a8d7006cc19e/tree_sitter_ruby-0.23.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:39f391322d2210843f07081182dbf00f8f69cfbfa4687b9575cac6d324bae443", size = 177959, upload-time = "2024-11-11T04:51:19.958Z" }, + { url = "https://files.pythonhosted.org/packages/e7/38/c41ecf7692b8ecccd26861d3293a88150a4a52fc081abe60f837030d7315/tree_sitter_ruby-0.23.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:aa4ee7433bd42fac22e2dad4a3c0f332292ecf482e610316828c711a0bb7f794", size = 195069, upload-time = "2024-11-11T04:51:21.82Z" }, + { url = "https://files.pythonhosted.org/packages/d8/01/14ef2d5107e6f42b64a400c3bbc3dd3b8fd24c3cef5306004ae03668f231/tree_sitter_ruby-0.23.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b36813a56006b7569db7868f6b762caa3f4e419bd0f8cf9ccbb4abb1b6254c", size = 226761, upload-time = "2024-11-11T04:51:23.021Z" }, + { url = "https://files.pythonhosted.org/packages/23/dd/1171b5dd25da10f768732a20fb62d2e3ae66e3b42329351f2ce5bf723abb/tree_sitter_ruby-0.23.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7bcd93972b4ca2803856d4fe0fbd04123ff29c4592bbb9f12a27528bd252341", size = 214427, upload-time = "2024-11-11T04:51:24.854Z" }, + { url = "https://files.pythonhosted.org/packages/60/bc/de76c877a90fd8a62cd60f496d7832efddc1b18a148593d9aa9b4a9ce5e0/tree_sitter_ruby-0.23.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66c65d6c2a629783ca4ab2bab539bd6f271ce6f77cacb62845831e11665b5bd3", size = 210409, upload-time = "2024-11-11T04:51:26.093Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4a/f5bcca350b84cdf75a53e918b8efa06c46ed650d99d3ef22195e9d8020cc/tree_sitter_ruby-0.23.1-cp39-abi3-win_amd64.whl", hash = "sha256:02e2c19ebefe29226c14aa63e11e291d990f5b5c20a99940ab6e7eda44e744e5", size = 179843, upload-time = "2024-11-11T04:51:27.265Z" }, + { url = "https://files.pythonhosted.org/packages/71/5c/a2e068ad4b2c4ba9b774a88b24149168d3bcd94f58b964e49dcabfe5fd24/tree_sitter_ruby-0.23.1-cp39-abi3-win_arm64.whl", hash = "sha256:ed042007e89f2cceeb1cbdd8b0caa68af1e2ce54c7eb2053ace760f90657ac9f", size = 178025, upload-time = "2024-11-11T04:51:29.051Z" }, +] + +[[package]] +name = "tree-sitter-rust" +version = "0.24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/87/75cbd22b927267d310f76cca1ab3c1d9d41035dfa3eb9cc95f96ee199440/tree_sitter_rust-0.24.2.tar.gz", hash = "sha256:54fb02a5911e345308b405174465112479f56dc39e3f1e7744d7568595f00db9", size = 339341, upload-time = "2026-03-27T21:08:55.629Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/24/2b2d33af5e27c84a4fde4e8cd2594bb4ab1e1cf48756a9f40dadc84956cc/tree_sitter_rust-0.24.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3620cfd12340efa43082d45df76349ff511893a9c361da2f8d6d51e307020a59", size = 129507, upload-time = "2026-03-27T21:08:47.585Z" }, + { url = "https://files.pythonhosted.org/packages/78/2a/cf39f881a545360b5a86bb1accba1f4acc713daab01fb9edd35b6e84f473/tree_sitter_rust-0.24.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:01a46622735498493f29f3e628a90de95c96a07bfbeb88996243eb986b1cee36", size = 136812, upload-time = "2026-03-27T21:08:48.761Z" }, + { url = "https://files.pythonhosted.org/packages/ca/45/a051bbd3045a61182dde25b93ae9a33d2677c935b16952283e12eaf46051/tree_sitter_rust-0.24.2-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e033c5a93b57c88e0a835880de39fc802909ff69f57aaff6000211c196ea5190", size = 164706, upload-time = "2026-03-27T21:08:49.605Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f6/a5a146df5c0a5daea3ffcd5d7245775fe7f084357770d5a313dd6245ae78/tree_sitter_rust-0.24.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d76d1208c3638b871236090759dfc13d478921320653a6c9da5336e7c58f65a", size = 170310, upload-time = "2026-03-27T21:08:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/95/a8/f85b1ca75e01361ca5f92d226593ca4857cea49551b9f6c8fa6fc08ea917/tree_sitter_rust-0.24.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:87930163a462408c49ab62c667e74029bc26b4cc7123dd1bdc7352215786c64a", size = 168668, upload-time = "2026-03-27T21:08:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/a2/e1/3519f866a4679ca36acd9f5a06a779ecb8a92b18887c5546458d521df557/tree_sitter_rust-0.24.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:da2b86099028fd42c6cd32878b7b16b01f8aac0f7b0e98742b7fa6bc3cf09b89", size = 162403, upload-time = "2026-03-27T21:08:52.588Z" }, + { url = "https://files.pythonhosted.org/packages/34/71/7ef609894dbfe5699eb16f7471f9b8af1d958d8ba3e29c238d7607e8cb47/tree_sitter_rust-0.24.2-cp39-abi3-win_amd64.whl", hash = "sha256:4529c125d928882ddfb879fdc6bc0704913261ecc078b6fa7902559e0daf200d", size = 129422, upload-time = "2026-03-27T21:08:54.031Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d8/050a781172745bc345f98abb7c56e72022ea0790f8e793de981c83c2ef15/tree_sitter_rust-0.24.2-cp39-abi3-win_arm64.whl", hash = "sha256:66ba90f61bd54f4c4f5d30434957daf64507c16b0313df76becb37d63f70a227", size = 128245, upload-time = "2026-03-27T21:08:54.803Z" }, +] + +[[package]] +name = "tree-sitter-scala" +version = "0.26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/1b/7c6eab24034b4b0ed5f5af47b210e5e91e58ad885425e1a8e8404fcf951c/tree_sitter_scala-0.26.2.tar.gz", hash = "sha256:2f6c38288c08f8c69bcbd87f4c6904287651e3d2ff4d7730d7154177e9115fda", size = 1115537, upload-time = "2026-08-08T03:54:45.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/81/d959b1e4f65f5818b7edc6def7efa2ba84b3b8a572123fa878a01e2c9e3c/tree_sitter_scala-0.26.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:beab6a0397d4f45cecaed715f224f444652d6bb1c5318d46c641893cd91de98d", size = 452389, upload-time = "2026-08-08T03:54:37.394Z" }, + { url = "https://files.pythonhosted.org/packages/ec/5e/1b318ea477a578cdd00ce0d38417d5d0571d4632b108cd77931cc53244be/tree_sitter_scala-0.26.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:54d2e92824c7908b7e688f218dc1d65c5684c365cd7a3e8028e8860847aeabd4", size = 484372, upload-time = "2026-08-08T03:54:38.691Z" }, + { url = "https://files.pythonhosted.org/packages/18/27/9d7427ef7197db2e605abc88f1cd1a33a250f38f63ca45ec73d0f5b532c2/tree_sitter_scala-0.26.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:679bb420771e236d6bcc60c2c7f6096f344cf07d829a7f401250735ad4f4a695", size = 524943, upload-time = "2026-08-08T03:54:39.901Z" }, + { url = "https://files.pythonhosted.org/packages/9d/55/9eb4b71083ab492a6ce0d52380f8d3b431aa7dcbd42cdbffbcd744aa3d42/tree_sitter_scala-0.26.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e68e55c50fa7e7f2866ce7ca590df8df6407dd7a85e484e9f20e974cbc6d8f2", size = 508783, upload-time = "2026-08-08T03:54:41.116Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a7/d1539a33de9841facb01821c5bc05b4562c4f9f6fc6c28c528b07380054c/tree_sitter_scala-0.26.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a2ba6e45827e01f11790b24cdae357db51ede59ee7ee5c8b7eccc61e9a7782ea", size = 498561, upload-time = "2026-08-08T03:54:42.106Z" }, + { url = "https://files.pythonhosted.org/packages/af/b0/89e63b1f66dbdc6d51d927a1c64685fd0d03527cdcd354f6e312938bd1c3/tree_sitter_scala-0.26.2-cp39-abi3-win_amd64.whl", hash = "sha256:eba630fc41cee1093005883fa70e275ecb26351e3ca6471ac2f6f83779478d07", size = 460912, upload-time = "2026-08-08T03:54:43.3Z" }, + { url = "https://files.pythonhosted.org/packages/e0/07/3bc158469095b1b872b3a462860b223113f7a6bd7cf180f2cbfc9eb1089c/tree_sitter_scala-0.26.2-cp39-abi3-win_arm64.whl", hash = "sha256:0ac121c9afd813e0820c9f0e90c2d028ca90e096298cbcab2f139ba5f4a8aaaa", size = 464751, upload-time = "2026-08-08T03:54:44.285Z" }, +] + +[[package]] +name = "tree-sitter-swift" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/aa/8e7b789bb74ad7b9efb784bfb7d42bbcf064288d7716a72b68211ac6c3d4/tree_sitter_swift-0.7.3.tar.gz", hash = "sha256:a87f1dba3050a346ee3442aad8d727afd74555dea258e31c71c7934d8c04af9b", size = 1015814, upload-time = "2026-06-01T00:42:20.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/9d/df190b08548dcfa67790d3197442989b3dd5e46d31ee61a1b9ecea35d57b/tree_sitter_swift-0.7.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2531ec866c22ea52384e2786e07f3b2bb396c6446428a2df02cc74af3f7e6b6a", size = 357955, upload-time = "2026-06-01T00:42:10.954Z" }, + { url = "https://files.pythonhosted.org/packages/5d/37/84e2bc7826eb9007c531f47e5557461c5a48fd14bd3ea82424afa3d06b5f/tree_sitter_swift-0.7.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ee627e027d0868c552beca13dcdfa9944662b126f642464c5038ee3204e68340", size = 381009, upload-time = "2026-06-01T00:42:12.182Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9a/55f6cc9aad9079facf166d616472fd8e05007cbee9c62b749e153bf0521d/tree_sitter_swift-0.7.3-cp38-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f38feeb4f7350c8b30d567a0dc08bf1eeaa67c241b6888d72a45a8b1a4aa7187", size = 386994, upload-time = "2026-06-01T00:42:13.609Z" }, + { url = "https://files.pythonhosted.org/packages/ff/38/0b7c4d195d03396c19a7968a13342c89cb8322d97c4882bb7c4240adf419/tree_sitter_swift-0.7.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eee02fecb60a07267edd123148c583d6ec9efc5d7fcb25e53da4e56869fd4cf3", size = 381113, upload-time = "2026-06-01T00:42:14.776Z" }, + { url = "https://files.pythonhosted.org/packages/81/34/48014e4cee1e2cf194675beeb435612a781f5cfa3c6f0e14b023b70c5cd7/tree_sitter_swift-0.7.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f30c30831f090ebe245f54ddcd280d2c5f7020ba17d6bbec1662bbfae140c467", size = 380282, upload-time = "2026-06-01T00:42:15.818Z" }, + { url = "https://files.pythonhosted.org/packages/89/1c/7ed9e76f14918106a27c548efc64f123af4b8e6424fcae13481683bb09a4/tree_sitter_swift-0.7.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01c1e812289a2f7f01f63627a5d94a0b57d69332e8b52624becfe79ee8061651", size = 385590, upload-time = "2026-06-01T00:42:16.92Z" }, + { url = "https://files.pythonhosted.org/packages/6b/bb/e4e12fa0523c1acb2f9c4cebc454cd5415e94c915ad7f0b4b151ad13bc30/tree_sitter_swift-0.7.3-cp38-abi3-win_amd64.whl", hash = "sha256:4b1de6122cbd82b2cea6d3a295f9f5f9297601b829061119e161da17a7ba7d17", size = 365047, upload-time = "2026-06-01T00:42:18.02Z" }, + { url = "https://files.pythonhosted.org/packages/70/7b/faf0fa8a99a217952b57aa43ed1b85ede798b3e8af51344cb5234766f718/tree_sitter_swift-0.7.3-cp38-abi3-win_arm64.whl", hash = "sha256:af44acc50d16f284abb607ae0cf7f81011d5566283d6c62a045a549a9331a653", size = 359248, upload-time = "2026-06-01T00:42:19.135Z" }, +] + +[[package]] +name = "tree-sitter-typescript" +version = "0.23.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/fc/bb52958f7e399250aee093751e9373a6311cadbe76b6e0d109b853757f35/tree_sitter_typescript-0.23.2.tar.gz", hash = "sha256:7b167b5827c882261cb7a50dfa0fb567975f9b315e87ed87ad0a0a3aedb3834d", size = 773053, upload-time = "2024-11-11T02:36:11.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/95/4c00680866280e008e81dd621fd4d3f54aa3dad1b76b857a19da1b2cc426/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3cd752d70d8e5371fdac6a9a4df9d8924b63b6998d268586f7d374c9fba2a478", size = 286677, upload-time = "2024-11-11T02:35:58.839Z" }, + { url = "https://files.pythonhosted.org/packages/8f/2f/1f36fda564518d84593f2740d5905ac127d590baf5c5753cef2a88a89c15/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c7cc1b0ff5d91bac863b0e38b1578d5505e718156c9db577c8baea2557f66de8", size = 302008, upload-time = "2024-11-11T02:36:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/96/2d/975c2dad292aa9994f982eb0b69cc6fda0223e4b6c4ea714550477d8ec3a/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b1eed5b0b3a8134e86126b00b743d667ec27c63fc9de1b7bb23168803879e31", size = 351987, upload-time = "2024-11-11T02:36:02.669Z" }, + { url = "https://files.pythonhosted.org/packages/49/d1/a71c36da6e2b8a4ed5e2970819b86ef13ba77ac40d9e333cb17df6a2c5db/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e96d36b85bcacdeb8ff5c2618d75593ef12ebaf1b4eace3477e2bdb2abb1752c", size = 344960, upload-time = "2024-11-11T02:36:04.443Z" }, + { url = "https://files.pythonhosted.org/packages/7f/cb/f57b149d7beed1a85b8266d0c60ebe4c46e79c9ba56bc17b898e17daf88e/tree_sitter_typescript-0.23.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8d4f0f9bcb61ad7b7509d49a1565ff2cc363863644a234e1e0fe10960e55aea0", size = 340245, upload-time = "2024-11-11T02:36:06.473Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ab/dd84f0e2337296a5f09749f7b5483215d75c8fa9e33738522e5ed81f7254/tree_sitter_typescript-0.23.2-cp39-abi3-win_amd64.whl", hash = "sha256:3f730b66396bc3e11811e4465c41ee45d9e9edd6de355a58bbbc49fa770da8f9", size = 278015, upload-time = "2024-11-11T02:36:07.631Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e4/81f9a935789233cf412a0ed5fe04c883841d2c8fb0b7e075958a35c65032/tree_sitter_typescript-0.23.2-cp39-abi3-win_arm64.whl", hash = "sha256:05db58f70b95ef0ea126db5560f3775692f609589ed6f8dd0af84b7f19f1cbb7", size = 274052, upload-time = "2024-11-11T02:36:09.514Z" }, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20260815" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/72/b56089aeee6c496d969bac42376bedb6e3eeab4682e1018fa3137122f94b/types_pyyaml-6.0.12.20260815.tar.gz", hash = "sha256:28764110c9cf35846e733da32d8d734df7473c5dde9ef67c3b7332ec0e819858", size = 18545, upload-time = "2026-08-15T02:41:51.532Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/52/eefeba09be4ef2a1eb989eb92934561e8e502a6ee3c32654996e4be7e399/types_pyyaml-6.0.12.20260815-py3-none-any.whl", hash = "sha256:6f332212b7e191f3afd5016a713c510b6340593b7ebec573c7d5d20aa5386d3b", size = 21148, upload-time = "2026-08-15T02:41:50.555Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.52.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/0f/3f86e61397dd33bf2ccf28188c40db6a740658aeebbbf6e7dbc101a1f487/uvicorn-0.52.4.tar.gz", hash = "sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86", size = 100627, upload-time = "2026-08-19T06:27:41.821Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl", hash = "sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1", size = 79871, upload-time = "2026-08-19T06:27:40.36Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.7.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/60/fc54e876e34f94dd0cf0185aaecfd4bfa906653f003d9b2fb21428642fca/virtualenv-21.7.5.tar.gz", hash = "sha256:a73c4246fba3c8901ff9717399f466e00eeca5a3834981f1a6ebb4f1e94de2f8", size = 5346743, upload-time = "2026-08-25T05:39:16.14Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/d8/401141bf45637be916c86d325bd821c5838c7eff83294b934cd94e774e4f/virtualenv-21.7.5-py3-none-any.whl", hash = "sha256:e36ca889510ab6cb0b1dca93c59e5431dd4422a3c88f487358d470c90af8c07a", size = 5324697, upload-time = "2026-08-25T05:39:14.229Z" }, +] From 4792fb37e3af1d6ccbc2aa3316902ed0f814b686 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 25 Aug 2026 22:21:42 +0200 Subject: [PATCH 59/73] fix(deps): pip increase-if-necessary ends the weekly numpy/scipy crash --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2d47fd4f5..b3ecbce04 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -27,6 +27,16 @@ updates: - package-ecosystem: "pip" directory: "/" + # Raise a floor only when the declared range genuinely cannot admit the new + # version. The default (`increase`) rewrites the floor to the newest + # resolvable version on every run, and when that version already IS the + # floor the rewrite is a no-op that dependabot-core raises + # `Expected content to change!` on — numpy and scipy in + # requirements-eval.txt hit exactly that (their newest release supporting + # this project's `requires-python = ">=3.10"` floor is the version already + # written there), failing every weekly pip run since 2026-08-15. Security + # updates still get through: a fix that the range excludes IS necessary. + versioning-strategy: "increase-if-necessary" schedule: interval: "weekly" day: "saturday" From 2a29366f7b0ff7e316dfd43fc02a7cebb656aaea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 22:39:06 +0200 Subject: [PATCH 60/73] chore(deps)(deps): bump tree-sitter-graphql from 0.1.0 to 0.2.0 (#236) tree-sitter-graphql 0.2.0 is a grammar bump, so it can change GraphQL fragment extraction. The node types LANG_CONFIGS names for graphql (object_type_definition, interface_type_definition, enum_type_definition, ...) still resolve: the tree_sitter_strategy unit test that fragments 'type Foo { bar: String }' into FragmentKind::Type passes on this branch, as does the full yaml_cases corpus gate. --- Cargo.lock | 4 ++-- crates/diffctx-native/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55a0c5c89..fe769b892 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1046,9 +1046,9 @@ dependencies = [ [[package]] name = "tree-sitter-graphql" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efedc4cac157161cc23a0adc4553a2cedc908e1cd754b6cd033a919bb81ce5d6" +checksum = "bfea063b7fa0e07529c2ca9cecf59d490fbc0259987493728596c16932ab2027" dependencies = [ "cc", "tree-sitter-language", diff --git a/crates/diffctx-native/Cargo.toml b/crates/diffctx-native/Cargo.toml index 882629c0f..59a666911 100644 --- a/crates/diffctx-native/Cargo.toml +++ b/crates/diffctx-native/Cargo.toml @@ -109,7 +109,7 @@ tree-sitter-cmake = { version = "0.7", optional = true } tree-sitter-make = { version = "1.1", optional = true } tree-sitter-hcl = { version = "1.1", optional = true } tree-sitter-clojure = { version = "0.1", optional = true } -tree-sitter-graphql = { version = "0.1", optional = true } +tree-sitter-graphql = { version = "0.2", optional = true } tree-sitter-dart = { version = "0.2", optional = true } tree-sitter-prisma-io = { version = "1.6", optional = true } tree-sitter-svelte-ng = { version = "1.0", optional = true } From 0ce4db0fc2cc800cc870bfd18063010af36f0a06 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 26 Aug 2026 09:21:55 +0000 Subject: [PATCH 61/73] chore(deps): update pre-commit hook astral-sh/ruff-pre-commit to v0.16.4 (#19) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bac73d00c..2f997c201 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -120,7 +120,7 @@ repos: # LINTING (Ruff for speed + correctness) # ============================================================================ - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.14 + rev: v0.16.4 hooks: - id: ruff name: ruff (correctness-focused checks) From c3b2132dadb772c03ca8a33bf960cea5f447c665 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 26 Aug 2026 09:21:55 +0000 Subject: [PATCH 62/73] chore(deps): update pre-commit hook adrienverge/yamllint to v1.38.0 (#18) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2f997c201..ab8d74ab6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -226,7 +226,7 @@ repos: # YAML LINTING # ============================================================================ - repo: https://github.com/adrienverge/yamllint - rev: v1.37.1 + rev: v1.38.0 hooks: - id: yamllint args: From 9cad1898d41fa3d0c1925fca4b17bccbb27c7cfd Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 26 Aug 2026 09:21:56 +0000 Subject: [PATCH 63/73] chore(deps): update pre-commit hook abravalheri/validate-pyproject to v0.26 (#17) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ab8d74ab6..1c97e7b82 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,7 +53,7 @@ repos: - id: detect-private-key - repo: https://github.com/abravalheri/validate-pyproject - rev: "v0.25" + rev: "0.26" hooks: - id: validate-pyproject name: validate-pyproject (PEP 621 schema) From 51f3bc98eb3a6ceedcd586d592a0b7ff327322e5 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 26 Aug 2026 09:21:57 +0000 Subject: [PATCH 64/73] chore(deps): update docker/setup-buildx-action action to v4.3.0 (#16) --- .github/workflows/cd.yml | 4 ++-- .github/workflows/eval-image.yml | 2 +- .github/workflows/publish-extras.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index ba069d3d0..5ec4d6d03 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -825,7 +825,7 @@ jobs: ref: ${{ needs.prepare-version.outputs.tag_name }} - name: Set up Buildx - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0 - name: Login to ghcr uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 @@ -875,7 +875,7 @@ jobs: merge-multiple: true - name: Set up Buildx - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0 - name: Login to ghcr uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 diff --git a/.github/workflows/eval-image.yml b/.github/workflows/eval-image.yml index 11a38eac8..f1d4ecba6 100644 --- a/.github/workflows/eval-image.yml +++ b/.github/workflows/eval-image.yml @@ -39,7 +39,7 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + - uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0 - name: Login to ghcr uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 diff --git a/.github/workflows/publish-extras.yml b/.github/workflows/publish-extras.yml index 163e49e28..6c3649509 100644 --- a/.github/workflows/publish-extras.yml +++ b/.github/workflows/publish-extras.yml @@ -175,7 +175,7 @@ jobs: fi - name: Set up Buildx - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0 - name: Login to Docker Hub uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 From 622b86e5e0d956a023d27d2683068f0a06e058d2 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Wed, 26 Aug 2026 09:21:58 +0000 Subject: [PATCH 65/73] chore(deps): update dependency python (#15) --- .mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mise.toml b/.mise.toml index 15aa78407..f6c1d247d 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -python = "3.12" +python = "3.13.15" [env] _.python.venv = { path = ".venv", create = true } From 3d067ab43698bac7dc754056493fe108e9ca42f9 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 25 Aug 2026 22:29:27 +0200 Subject: [PATCH 66/73] ci: uv sync --no-build so no dependency setup script runs (S8541) --- .github/workflows/ci.yml | 10 +++++----- .github/workflows/sensitivity-check.yml | 2 +- CONTRIBUTING.md | 13 ++++++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 153393078..bc18fc7b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: - name: Install dependencies run: | - uv sync --locked --extra dev + uv sync --locked --no-build --extra dev echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run pre-commit @@ -186,7 +186,7 @@ jobs: - name: Install Linters and Type Checker run: | - uv sync --locked --extra dev + uv sync --locked --no-build --extra dev echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run Linters and Formatters Check @@ -299,7 +299,7 @@ jobs: # Editable install of the project plus every extra the suite needs. # uv provisions maturin in its own build environment, so the build # backend is not a separate step and cannot drift from pyproject. - uv sync --locked --extra dev --extra full --extra mcp + uv sync --locked --no-build --extra dev --extra full --extra mcp echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run Tests with Coverage @@ -359,7 +359,7 @@ jobs: - name: Install dependencies run: | - uv sync --locked --extra dev + uv sync --locked --no-build --extra dev echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Check cyclomatic complexity @@ -404,7 +404,7 @@ jobs: - name: Install dependencies run: | - uv sync --locked --extra dev + uv sync --locked --no-build --extra dev echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Check import contracts diff --git a/.github/workflows/sensitivity-check.yml b/.github/workflows/sensitivity-check.yml index 99498d800..30462cd05 100644 --- a/.github/workflows/sensitivity-check.yml +++ b/.github/workflows/sensitivity-check.yml @@ -39,7 +39,7 @@ jobs: - name: Install diffctx with dev extras run: | - uv sync --locked --extra dev --extra tree-sitter + uv sync --locked --no-build --extra dev --extra tree-sitter echo "$PWD/.venv/bin" >> "$GITHUB_PATH" - name: Run sensitivity check diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fd352b531..dec67231d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,15 +6,18 @@ git clone https://github.com/nikolay-e/diffctx.git cd diffctx rustup component add rustfmt clippy -uv sync --locked --extra dev --extra full --extra mcp +uv sync --locked --no-build --extra dev --extra full --extra mcp source .venv/bin/activate pre-commit install && pre-commit install --hook-type commit-msg ``` -`uv.lock` is the resolved dependency set every CI job installs, via the same -`uv sync --locked` — `--locked` fails instead of re-resolving, so a pyproject -edit that was not locked cannot reach a green build. Regenerate with -`uv lock` and commit the result in the same change. +`uv.lock` is the resolved dependency set every CI job installs, via this exact +command — `--locked` fails instead of re-resolving, so a pyproject edit that was +not locked cannot reach a green build. Regenerate with `uv lock` and commit the +result in the same change. `--no-build` takes every dependency from a wheel, so +no third-party `setup.py` executes during install; the root project is exempt +and still compiles through maturin, which is the one build this repo means to +run. The package builds the Rust extension via maturin; uv provisions the build backend in its own isolated environment, so nothing has to be installed before From 6735d2578ff4a78d47e91d6f54bbfb203b8498c7 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 25 Aug 2026 22:36:55 +0200 Subject: [PATCH 67/73] =?UTF-8?q?docs(site):=20stumble=20fixes=20=E2=80=94?= =?UTF-8?q?=20budget/tau=20flags,=20stage=20click,=20hero=20counters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QA.md | 72 +++++++++++++++++++++++++++++++++++++++++++++---- docs/index.html | 50 +++++++++++++++++++++++++++------- 2 files changed, 108 insertions(+), 14 deletions(-) diff --git a/QA.md b/QA.md index 9e7fae8c8..22a38d3ac 100644 --- a/QA.md +++ b/QA.md @@ -8,14 +8,27 @@ Project-specific facts for `/qa`. Generic methodology lives in | Check | Applies | Notes | |---|---|---| | CI | yes | GitHub Actions on the mirror (ci.yml, action-smoke, CodeQL per push; cd.yml/publish-* manual dispatch; nightly-full-eval cron). "Rust diffctx tests" is ~6 min on a warm cargo cache; a Rust-touching commit invalidates it (+~10 min compile). Beyond ~30 min on "Build and test" = stuck runner — `gh run cancel` + `gh run rerun --failed` (an 85-min hang resolved to a 6-min green rerun with zero changes). A re-run stuck in `queued` can be API-unrecoverable: cancel AND force-cancel 409 with "re-run that has not yet queued", and an all-jobs-cancelled CodeQL run later reports "cannot be retried" — don't fight it; the next push supersedes, verify the corpus gate on the new SHA | -| CD / K8s / ArgoCD | no | CLI+library; ships to PyPI, npm, crates.io, Docker Hub via cd.yml/publish-extras.yml | -| Browser QA | no | no web frontend | -| Post-deploy autoqa | no | no deployed service; probes are the publish smokes inside cd.yml/publish-extras.yml | +| Browser QA / stumble | yes | **there IS a deployed surface**: the GitHub Pages landing page (`nikolay-e.github.io/diffctx/`, built by the `pages build and deployment` run on every push). This row read "no web frontend" until 2026-08-26 and it was simply wrong — the page is where a stranger decides whether to adopt the tool, which is exactly what the stumble probe measures. It is ONE page: only `demo/` and `llms.txt` are additionally published; the `docs/` subdirectories (product, engineering, architecture, benchmarks) are repo-read `.md`, 404 on Pages by design and linked from nowhere on the site, so that 404 is not a finding | +| Post-deploy autoqa | no sensor | nothing runs the crawler against the Pages site, so the link sweep is done in-pass (fetch the page, follow same-origin links, HEAD every external). The `fonts.googleapis.com` / `fonts.gstatic.com` bare hosts are `rel=preconnect` hints and 404 on a bare GET — always false positives, never file them | +| CD / K8s / ArgoCD | no | ships to PyPI, npm, crates.io, Docker Hub via cd.yml/publish-extras.yml; those workflows' publish smokes are the probes | | Backend smoke | no | — | | SonarCloud | yes | project key is `nikolay-e_TreeMapper` (legacy name, never renamed) | -The `no` rows describe the current CLI/library shape — they flip the day -a deployed/web surface ships; re-derive then, don't trust this table. +## Stumble probe tasks + +Fixed wording — the number is only a trend if the task never moves. Alternate +across passes; `STUMBLE_GOAL` is the Ultimate Goal sentence from `CLAUDE.md`, +verbatim. `STUMBLE_URL` is the Pages landing page. + +1. *(entry)* "You have a git repository and a pull request that touches about + 40 files. Using only this site, work out the exact command that would give + you a review-ready context of that pull request, including how to point it + at the right commit range and how to control how much output you get. Then + decide, from evidence on this site, whether you would trust that output + instead of reading the raw diff." +2. *(uncomfortable)* "Decide whether this tool would beat simply pasting + `git diff` into your model, and find the number on this site that settles + it. Say what that number was measured on." ## Forge @@ -49,6 +62,36 @@ a deployed/web surface ships; re-derive then, don't trust this table. Released state is read from the registry (PyPI upload date/version), not from the tag. +## Dependency channels (who owns which file) + +Three lock/manifest pairs, and mixing them up is how a channel breaks +silently: + +- **`pyproject.toml` + `uv.lock`** — every CI job installs with + `uv sync --locked --no-build`. `--locked` refuses to re-resolve, so a + pyproject edit landed without `uv lock` turns CI red instead of drifting; + that IS the drift gate, there is no separate check. `--no-build` keeps every + dependency on a wheel (no third-party `setup.py` runs); the root project is + exempt and still compiles through maturin. Dependabot's `uv` entry is + `lockfile-only` on purpose — the `pip` entry owns pyproject's ranges, and + without the split both ecosystems open the same PR twice. +- **`requirements-eval.txt` + `requirements-eval.lock`** — the research + harness, hash-pinned via `uv pip compile`, installed only by + `Dockerfile.eval`. Not part of `uv.lock`, deliberately: the paper's + reproducibility claim names that lock. `tests/eval/test_image_inputs.py` + checks the two agree by package NAME only, so a version bump in one does not + fail anything. +- **`Cargo.toml` + `Cargo.lock`** — Dependabot's `cargo` entry. + +The pip entry runs `versioning-strategy: increase-if-necessary`. The default +(`increase`) rewrites a floor to the newest resolvable version every run, and +when that version already IS the floor the rewrite is a no-op that +dependabot-core aborts on (`Expected content to change!`) — numpy and scipy hit +that for weeks because their newest release supporting `requires-python = +">=3.10"` is the version already written. A whole ecosystem's weekly run dies on +one such dependency, so a red "Dependabot Updates" run is worth reading, not +dismissing as bot noise. + ## Tests - `pytest` — integration-only (the run prints the count; don't pin it @@ -164,6 +207,25 @@ a deployed/web surface ships; re-derive then, don't trust this table. - `gated` label = blocked on a pre-registered experiment or eval-cycle boundary. +## SonarCloud: reading the gate honestly + +- **The gate is not checked at push time — it is checked after the analysis of + the pushed commit.** A fix verified locally proves nothing about + `new_security_rating`; the number only moves once CI's Sonar step has run on + that SHA. Re-fetch `api/qualitygates/project_status` afterwards, every time. +- **A fix for one rule can raise another, and the gate will not distinguish + them.** Restoring `uv.lock` cleared `text:S8565` (FIXED) and the gate stayed + ERROR — the six `uv sync` lines the same commit added each raised + `githubactions:S8541` ("omitting `--no-build` can execute setup scripts"). + Same rating, entirely different cause. Never read "still C" as "the fix did + not land". +- **Fetch without a status filter.** `issueStatuses=OPEN,CONFIRMED` returned one + issue while the project held six open ones a minute later; the unfiltered + search plus a status histogram is the only view that shows what is genuinely + open versus what a past pass ACCEPTED or marked FALSE_POSITIVE. Those + resolutions live in SonarCloud and are not mirrored here — this file records + only the ones with reasoning a reader could not reconstruct. + ## Known false positives - import-linter local failures are REAL — the old excuse ("fails locally diff --git a/docs/index.html b/docs/index.html index 6423fb3b6..f96da7e17 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1112,11 +1112,11 @@

-
0
+
48,210
tokens — changed files pasted whole
-
0
+
6,930
tokens — diffctx selection, same review
@@ -1440,6 +1440,20 @@

Thirty seconds.

>$ diffctx . --diff main..feature -cbranch context → clipboard → any LLM
+
+ $ diffctx . --diff main..feature --budget + 8000the budget dial above, as a flag — hard token ceiling +
+
+ $ diffctx . --diff main..feature --tau + 0.05the τ dial above — stop admitting weak context +
$ diffctx graph . --summarycycles, hotspots, coupling @@ -1966,11 +1980,22 @@

Thirty seconds.

updateReadout(sel, budget); } - document - .querySelectorAll(".stage") - .forEach((b) => - b.addEventListener("click", () => applyStage(+b.dataset.stage)), - ); + // Autoplay owns the stage for ~7s after the lab scrolls in. Its queued + // timers used to keep firing over a click, so picking a stage mid-intro + // snapped straight back to stage 0 and read as a dead control. Any + // deliberate interaction ends the intro. + let autoplayTimers = []; + function stopAutoplay() { + autoplayTimers.forEach(clearTimeout); + autoplayTimers = []; + } + + document.querySelectorAll(".stage").forEach((b) => + b.addEventListener("click", () => { + stopAutoplay(); + applyStage(+b.dataset.stage); + }), + ); [ ["alpha", "alpha-v", (v) => (v / 100).toFixed(2)], @@ -1978,6 +2003,7 @@

Thirty seconds.

["budget", "budget-v", (v) => (+v).toLocaleString("en-US")], ].forEach(([id, out, fmt]) => { document.getElementById(id).addEventListener("input", (e) => { + stopAutoplay(); document.getElementById(out).textContent = fmt(e.target.value); if (currentStage >= 3) applyStage(currentStage); }); @@ -1990,7 +2016,7 @@

Thirty seconds.

(entries) => { if (entries[0].isIntersecting && !played) { played = true; - [0, 1, 2, 3, 4].forEach((s, i) => + autoplayTimers = [0, 1, 2, 3, 4].map((s, i) => setTimeout(() => applyStage(s), 400 + i * 1600), ); } @@ -2078,14 +2104,20 @@

${name}

})(); /* ============ counters + reveals ============ */ + // The final value is what the markup ships, so a viewer whose observer + // never fires still reads the real number instead of a "0" that makes the + // page's whole claim look broken. The count-up only overwrites it once it + // is actually running, and restores the exact text at the end. function animateCount(el) { const target = +el.dataset.count, + final = el.textContent, dur = 1400, t0 = performance.now(); const step = (t) => { const k = Math.min(1, (t - t0) / dur), e = 1 - Math.pow(1 - k, 3); - el.textContent = Math.round(target * e).toLocaleString("en-US"); + el.textContent = + k < 1 ? Math.round(target * e).toLocaleString("en-US") : final; if (k < 1) requestAnimationFrame(step); }; requestAnimationFrame(step); From 95fe64dd463fde6fa495ebfecf850626c0eaf007 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 11:38:46 +0200 Subject: [PATCH 68/73] chore(deps)(deps): bump similar from 3.1.2 to 3.2.0 (#235) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit similar 3.2.0 changes Myers output (git-style bounded splits instead of shortest-edit-script). The crate is used only in memory_pipeline.rs — the in-memory corpus harness, not the product path, which shells out to git diff — so this moves how the corpus synthesises hunks, not how a user's run selects. The full 2725-case yaml_cases gate is green on this branch, which is the evidence that matters for a Q-class dependency bump. --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cee36ff26..55a0c5c89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -748,9 +748,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "similar" -version = "3.1.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ee016af5d736b69fc89e19254540fa4b5f5492853fb5503920f084011c78b6" +checksum = "4f66ca1f7aca2474dc10c942eb22feffc897735f54cd1db90138c2fddb490987" dependencies = [ "bstr", ] From 0285023bddfd8e6461635b00f69d06336ee3d757 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 11:39:06 +0200 Subject: [PATCH 69/73] chore(deps)(deps): bump tree-sitter-graphql from 0.1.0 to 0.2.0 (#236) tree-sitter-graphql 0.2.0 is a grammar bump, so it can change GraphQL fragment extraction. The node types LANG_CONFIGS names for graphql (object_type_definition, interface_type_definition, enum_type_definition, ...) still resolve: the tree_sitter_strategy unit test that fragments 'type Foo { bar: String }' into FragmentKind::Type passes on this branch, as does the full yaml_cases corpus gate. --- Cargo.lock | 4 ++-- crates/diffctx-native/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55a0c5c89..fe769b892 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1046,9 +1046,9 @@ dependencies = [ [[package]] name = "tree-sitter-graphql" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efedc4cac157161cc23a0adc4553a2cedc908e1cd754b6cd033a919bb81ce5d6" +checksum = "bfea063b7fa0e07529c2ca9cecf59d490fbc0259987493728596c16932ab2027" dependencies = [ "cc", "tree-sitter-language", diff --git a/crates/diffctx-native/Cargo.toml b/crates/diffctx-native/Cargo.toml index 882629c0f..59a666911 100644 --- a/crates/diffctx-native/Cargo.toml +++ b/crates/diffctx-native/Cargo.toml @@ -109,7 +109,7 @@ tree-sitter-cmake = { version = "0.7", optional = true } tree-sitter-make = { version = "1.1", optional = true } tree-sitter-hcl = { version = "1.1", optional = true } tree-sitter-clojure = { version = "0.1", optional = true } -tree-sitter-graphql = { version = "0.1", optional = true } +tree-sitter-graphql = { version = "0.2", optional = true } tree-sitter-dart = { version = "0.2", optional = true } tree-sitter-prisma-io = { version = "1.6", optional = true } tree-sitter-svelte-ng = { version = "1.0", optional = true } From dc3ea638aef616bdf41510eba58a35c1bc47a123 Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Tue, 25 Aug 2026 22:43:46 +0200 Subject: [PATCH 70/73] QA.md: the cargo --lib count here was 171, the real one is 250 --- QA.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/QA.md b/QA.md index 22a38d3ac..6df3509e3 100644 --- a/QA.md +++ b/QA.md @@ -102,7 +102,9 @@ dismissing as bot noise. varying tests. Timeout-only failures with a changing set across runs = oversubscription, not a regression; never run `cargo test` concurrently with pytest, it makes this worse. -- `cargo test --lib` in `crates/diffctx-native` — inline units, ~171. +- `cargo test --lib` in `crates/diffctx-native` — inline units (the run + prints the count; it was written here as "~171" while the real number was + 250, so it is not written here any more). - YAML corpus: CI gates the FULL 2725-case corpus on every push (`cargo test --profile release-unwind --test yaml_cases`), per-case against `known_below_threshold.txt`, enforced bidirectionally; From 7bb8421e4a8aa0d6fbb63e52ecfc3adc6a1fbe2f Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Wed, 26 Aug 2026 19:15:28 +0200 Subject: [PATCH 71/73] meta: link the author's site from the PyPI sidebar --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index a017e3783..137da98ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,6 +109,7 @@ optional-dependencies.tree-sitter = [ "tree-sitter-swift>=0.0.1,<1.0", "tree-sitter-typescript>=0.21,<1.0", ] +urls.Author = "https://nikolay-eremeev.com" urls.Changelog = "https://github.com/nikolay-e/diffctx/blob/main/CHANGELOG.md" urls.Documentation = "https://nikolay-e.github.io/diffctx/" urls.Homepage = "https://nikolay-e.github.io/diffctx/" From cccd80c1779ea4f038f555dd39de93cab8f9937a Mon Sep 17 00:00:00 2001 From: Nikolay Eremeev Date: Wed, 26 Aug 2026 19:28:33 +0200 Subject: [PATCH 72/73] docs: unpin the rotted corpus count; gate commit-subject length --- .pre-commit-config.yaml | 14 ++++++++++++++ CONTRIBUTING.md | 2 +- QA.md | 25 ++++--------------------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1c97e7b82..9d281cd13 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -338,3 +338,17 @@ repos: hooks: - id: commitizen stages: [commit-msg] + + # commitizen validates the conventional-commit FORM, not the length. Counted + # in CHARACTERS, not bytes: subjects here routinely carry an em-dash (3 bytes) + # or Cyrillic, so `awk length` and `wc -c` both overstate — a subject measured + # by eye as 74 was 72. Subject line only; a body may carry a long URL. + - repo: local + hooks: + - id: commit-subject-length + name: commit subject fits 72 chars + entry: >- + bash -c 'n=$(head -1 "$1" | wc -m); n=$((n-1)); + [ "$n" -le 72 ] || { echo "subject is $n chars, limit 72"; exit 1; }' -- + language: system + stages: [commit-msg] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dec67231d..8042aaf9e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ cargo test --lib # Rust inline units DIFFCTX_YAML_CASES_LIMIT=20 cargo test --test yaml_cases # sampled YAML corpus ``` -CI gates the full 2725-case YAML corpus per-case against +CI gates the full YAML corpus per-case against `crates/diffctx-native/tests/known_below_threshold.txt` (bidirectional: a listed case that starts passing also fails — claim improvements by removing the entry in the same commit). diff --git a/QA.md b/QA.md index 6df3509e3..6b56f9480 100644 --- a/QA.md +++ b/QA.md @@ -105,7 +105,9 @@ dismissing as bot noise. - `cargo test --lib` in `crates/diffctx-native` — inline units (the run prints the count; it was written here as "~171" while the real number was 250, so it is not written here any more). -- YAML corpus: CI gates the FULL 2725-case corpus on every push +- YAML corpus: CI gates the FULL corpus on every push (the run prints the + case count; pinning it here rotted — it read 2725 while the corpus had grown + to 2902) (`cargo test --profile release-unwind --test yaml_cases`), per-case against `known_below_threshold.txt`, enforced bidirectionally; nightly re-runs with `DIFFCTX_YAML_IGNORE_BASELINE=1` to track @@ -161,7 +163,7 @@ dismissing as bot noise. every cell hits the 300s deadline. A wide range at the default budget is the reviewable artifact. - This repo's own `.diffctx/ignore` excludes `*.yaml`/`*.yml` (the - 2725-case corpus would drown every self-eat) **and `tests`** — so the + corpus would drown every self-eat) **and `tests`** — so the entire `tests/` tree, `crates/diffctx-native/tests/`, every oracle case and all CI/workflow YAML are invisible to self-eat, hidden even from `changed_files` by the security contract. A range that touches @@ -209,25 +211,6 @@ dismissing as bot noise. - `gated` label = blocked on a pre-registered experiment or eval-cycle boundary. -## SonarCloud: reading the gate honestly - -- **The gate is not checked at push time — it is checked after the analysis of - the pushed commit.** A fix verified locally proves nothing about - `new_security_rating`; the number only moves once CI's Sonar step has run on - that SHA. Re-fetch `api/qualitygates/project_status` afterwards, every time. -- **A fix for one rule can raise another, and the gate will not distinguish - them.** Restoring `uv.lock` cleared `text:S8565` (FIXED) and the gate stayed - ERROR — the six `uv sync` lines the same commit added each raised - `githubactions:S8541` ("omitting `--no-build` can execute setup scripts"). - Same rating, entirely different cause. Never read "still C" as "the fix did - not land". -- **Fetch without a status filter.** `issueStatuses=OPEN,CONFIRMED` returned one - issue while the project held six open ones a minute later; the unfiltered - search plus a status histogram is the only view that shows what is genuinely - open versus what a past pass ACCEPTED or marked FALSE_POSITIVE. Those - resolutions live in SonarCloud and are not mirrored here — this file records - only the ones with reasoning a reader could not reconstruct. - ## Known false positives - import-linter local failures are REAL — the old excuse ("fails locally From 82d54ad11ae20fa4037a3426bddd38aada9398d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 08:04:30 +0000 Subject: [PATCH 73/73] chore(deps)(deps-dev): update maturin requirement Updates the requirements on [maturin](https://github.com/pyo3/maturin) to permit the latest version. Updates `maturin` to 1.15.0 - [Release notes](https://github.com/pyo3/maturin/releases) - [Changelog](https://github.com/PyO3/maturin/blob/main/Changelog.md) - [Commits](https://github.com/pyo3/maturin/compare/v1.10.0...v1.15.0) --- updated-dependencies: - dependency-name: maturin dependency-version: 1.15.0 dependency-type: direct:development dependency-group: all-dependencies ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 137da98ca..f2e09f690 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ # pyproject.toml [build-system] build-backend = "maturin" -requires = [ "maturin>=1.10,<1.15" ] +requires = [ "maturin>=1.10,<1.16" ] [project] name = "diffctx"