Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-langgraph-checkpoint for 
openSUSE:Factory checked in at 2026-08-09 21:44:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langgraph-checkpoint (Old)
 and      /work/SRC/openSUSE:Factory/.python-langgraph-checkpoint.new.16738 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-langgraph-checkpoint"

Sun Aug  9 21:44:03 2026 rev:2 rq:1370301 version:4.2.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-langgraph-checkpoint/python-langgraph-checkpoint.changes
  2026-07-01 16:35:58.207666808 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-langgraph-checkpoint.new.16738/python-langgraph-checkpoint.changes
       2026-08-09 21:46:06.580309160 +0200
@@ -1,0 +2,7 @@
+Sat Aug  8 04:41:37 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 4.2.0:
+  * Add an opt-in omit_expired option to skip expired rows on read
+  * Collect writes at the plain-value seed in delta channel history
+
+-------------------------------------------------------------------

Old:
----
  langgraph_checkpoint-4.1.1.tar.gz

New:
----
  langgraph_checkpoint-4.2.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-langgraph-checkpoint.spec ++++++
--- /var/tmp/diff_new_pack.3ivsPC/_old  2026-08-09 21:46:07.088326501 +0200
+++ /var/tmp/diff_new_pack.3ivsPC/_new  2026-08-09 21:46:07.092326637 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-langgraph-checkpoint
 #
-# Copyright (c) 2026 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           python-langgraph-checkpoint
-Version:        4.1.1
+Version:        4.2.0
 Release:        0
 Summary:        Library with base interfaces for LangGraph checkpoint savers
 License:        MIT

++++++ langgraph_checkpoint-4.1.1.tar.gz -> langgraph_checkpoint-4.2.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/Makefile 
new/langgraph_checkpoint-4.2.0/Makefile
--- old/langgraph_checkpoint-4.1.1/Makefile     2020-02-02 01:00:00.000000000 
+0100
+++ new/langgraph_checkpoint-4.2.0/Makefile     2020-02-02 01:00:00.000000000 
+0100
@@ -18,22 +18,19 @@
 
 # Define a variable for Python and notebook files.
 PYTHON_FILES=.
-MYPY_CACHE=.mypy_cache
 lint format: PYTHON_FILES=.
 lint_diff format_diff: PYTHON_FILES=$(shell git diff --name-only --relative 
--diff-filter=d main . | grep -E '\.py$$|\.ipynb$$')
 lint_package: PYTHON_FILES=langgraph
 lint_tests: PYTHON_FILES=tests
-lint_tests: MYPY_CACHE=.mypy_cache_test
 
 lint lint_diff lint_package lint_tests:
        uv run ruff check .
        [ "$(PYTHON_FILES)" = "" ] || uv run ruff format $(PYTHON_FILES) --diff
        [ "$(PYTHON_FILES)" = "" ] || uv run ruff check --select I 
$(PYTHON_FILES)
-       [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE)
-       [ "$(PYTHON_FILES)" = "" ] || uv run mypy $(PYTHON_FILES) --cache-dir 
$(MYPY_CACHE)
+       [ "$(PYTHON_FILES)" = "" ] || uv run ty check $(PYTHON_FILES)
 
 type:
-       mkdir -p $(MYPY_CACHE) && uv run mypy $(PYTHON_FILES) --cache-dir 
$(MYPY_CACHE)
+       uv run ty check $(PYTHON_FILES)
 
 format format_diff:
        uv run ruff format $(PYTHON_FILES)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/PKG-INFO 
new/langgraph_checkpoint-4.2.0/PKG-INFO
--- old/langgraph_checkpoint-4.1.1/PKG-INFO     2020-02-02 01:00:00.000000000 
+0100
+++ new/langgraph_checkpoint-4.2.0/PKG-INFO     2020-02-02 01:00:00.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: langgraph-checkpoint
-Version: 4.1.1
+Version: 4.2.0
 Summary: Library with base interfaces for LangGraph checkpoint savers.
 Project-URL: Source, 
https://github.com/langchain-ai/langgraph/tree/main/libs/checkpoint
 Project-URL: Twitter, https://x.com/langchain_oss
@@ -15,7 +15,27 @@
 
 # LangGraph Checkpoint
 
-This library defines the base interface for LangGraph checkpointers. 
Checkpointers provide a persistence layer for LangGraph. They allow you to 
interact with and manage the graph's state. When you use a graph with a 
checkpointer, the checkpointer saves a _checkpoint_ of the graph state at every 
superstep, enabling several powerful capabilities like human-in-the-loop, 
"memory" between interactions and more.
+[![PyPI - 
Version](https://img.shields.io/pypi/v/langgraph-checkpoint?label=%20)](https://pypi.org/project/langgraph-checkpoint/#history)
+[![PyPI - 
License](https://img.shields.io/pypi/l/langgraph-checkpoint)](https://opensource.org/licenses/MIT)
+[![PyPI - 
Downloads](https://img.shields.io/pepy/dt/langgraph-checkpoint)](https://pypistats.org/packages/langgraph-checkpoint)
+[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
+
+To help you ship LangGraph apps to production faster, check out 
[LangSmith](https://www.langchain.com/langsmith).
+[LangSmith](https://www.langchain.com/langsmith) is a unified developer 
platform for building, testing, and monitoring LLM applications.
+
+## Quick Install
+
+```bash
+uv add langgraph-checkpoint
+```
+
+## πŸ€” What is this?
+
+This library defines the base interface for LangGraph checkpointers. 
Checkpointers provide a persistence layer for LangGraph: they save graph state 
at every superstep, enabling human-in-the-loop, memory between interactions, 
durable execution, and more.
+
+## πŸ“– Documentation
+
+For full documentation, see the [API 
reference](https://reference.langchain.com/python/langgraph.checkpoint). For 
conceptual guides on persistence and memory, see the [LangGraph 
Docs](https://docs.langchain.com/oss/python/langgraph/overview).
 
 ## Key concepts
 
@@ -39,7 +59,7 @@
 
 ### Serde
 
-`langgraph_checkpoint` also defines protocol for serialization/deserialization 
(serde) and provides an default implementation 
(`langgraph.checkpoint.serde.jsonplus.JsonPlusSerializer`) that handles a wide 
variety of types, including LangChain and LangGraph primitives, datetimes, 
enums and more.
+`langgraph-checkpoint` also defines protocol for serialization/deserialization 
(serde) and provides a default implementation 
(`langgraph.checkpoint.serde.jsonplus.JsonPlusSerializer`) that handles a wide 
variety of types, including LangChain and LangGraph primitives, datetimes, 
enums and more.
 
 > [!IMPORTANT]
 > **Checkpoint deserialization security:** By default the serializer allows 
 > any Python type found in checkpoint data. New applications should set the 
 > environment variable `LANGGRAPH_STRICT_MSGPACK=true` or pass an explicit 
 > `allowed_msgpack_modules` list to `JsonPlusSerializer` to restrict 
 > deserialization to known-safe types.
@@ -104,3 +124,13 @@
 # list checkpoints
 list(checkpointer.list(read_config))
 ```
+
+## πŸ“• Releases & Versioning
+
+See our [Releases](https://docs.langchain.com/oss/python/release-policy) and 
[Versioning](https://docs.langchain.com/oss/python/versioning) policies.
+
+## πŸ’ Contributing
+
+As an open-source project in a rapidly developing field, we are extremely open 
to contributions, whether it be in the form of a new feature, improved 
infrastructure, or better documentation.
+
+For detailed information on how to contribute, see the [Contributing 
Guide](https://docs.langchain.com/oss/python/contributing/overview).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/README.md 
new/langgraph_checkpoint-4.2.0/README.md
--- old/langgraph_checkpoint-4.1.1/README.md    2020-02-02 01:00:00.000000000 
+0100
+++ new/langgraph_checkpoint-4.2.0/README.md    2020-02-02 01:00:00.000000000 
+0100
@@ -1,6 +1,26 @@
 # LangGraph Checkpoint
 
-This library defines the base interface for LangGraph checkpointers. 
Checkpointers provide a persistence layer for LangGraph. They allow you to 
interact with and manage the graph's state. When you use a graph with a 
checkpointer, the checkpointer saves a _checkpoint_ of the graph state at every 
superstep, enabling several powerful capabilities like human-in-the-loop, 
"memory" between interactions and more.
+[![PyPI - 
Version](https://img.shields.io/pypi/v/langgraph-checkpoint?label=%20)](https://pypi.org/project/langgraph-checkpoint/#history)
+[![PyPI - 
License](https://img.shields.io/pypi/l/langgraph-checkpoint)](https://opensource.org/licenses/MIT)
+[![PyPI - 
Downloads](https://img.shields.io/pepy/dt/langgraph-checkpoint)](https://pypistats.org/packages/langgraph-checkpoint)
+[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
+
+To help you ship LangGraph apps to production faster, check out 
[LangSmith](https://www.langchain.com/langsmith).
+[LangSmith](https://www.langchain.com/langsmith) is a unified developer 
platform for building, testing, and monitoring LLM applications.
+
+## Quick Install
+
+```bash
+uv add langgraph-checkpoint
+```
+
+## πŸ€” What is this?
+
+This library defines the base interface for LangGraph checkpointers. 
Checkpointers provide a persistence layer for LangGraph: they save graph state 
at every superstep, enabling human-in-the-loop, memory between interactions, 
durable execution, and more.
+
+## πŸ“– Documentation
+
+For full documentation, see the [API 
reference](https://reference.langchain.com/python/langgraph.checkpoint). For 
conceptual guides on persistence and memory, see the [LangGraph 
Docs](https://docs.langchain.com/oss/python/langgraph/overview).
 
 ## Key concepts
 
@@ -24,7 +44,7 @@
 
 ### Serde
 
-`langgraph_checkpoint` also defines protocol for serialization/deserialization 
(serde) and provides an default implementation 
(`langgraph.checkpoint.serde.jsonplus.JsonPlusSerializer`) that handles a wide 
variety of types, including LangChain and LangGraph primitives, datetimes, 
enums and more.
+`langgraph-checkpoint` also defines protocol for serialization/deserialization 
(serde) and provides a default implementation 
(`langgraph.checkpoint.serde.jsonplus.JsonPlusSerializer`) that handles a wide 
variety of types, including LangChain and LangGraph primitives, datetimes, 
enums and more.
 
 > [!IMPORTANT]
 > **Checkpoint deserialization security:** By default the serializer allows 
 > any Python type found in checkpoint data. New applications should set the 
 > environment variable `LANGGRAPH_STRICT_MSGPACK=true` or pass an explicit 
 > `allowed_msgpack_modules` list to `JsonPlusSerializer` to restrict 
 > deserialization to known-safe types.
@@ -89,3 +109,13 @@
 # list checkpoints
 list(checkpointer.list(read_config))
 ```
+
+## πŸ“• Releases & Versioning
+
+See our [Releases](https://docs.langchain.com/oss/python/release-policy) and 
[Versioning](https://docs.langchain.com/oss/python/versioning) policies.
+
+## πŸ’ Contributing
+
+As an open-source project in a rapidly developing field, we are extremely open 
to contributions, whether it be in the form of a new feature, improved 
infrastructure, or better documentation.
+
+For detailed information on how to contribute, see the [Contributing 
Guide](https://docs.langchain.com/oss/python/contributing/overview).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langgraph_checkpoint-4.1.1/langgraph/checkpoint/memory/__init__.py 
new/langgraph_checkpoint-4.2.0/langgraph/checkpoint/memory/__init__.py
--- old/langgraph_checkpoint-4.1.1/langgraph/checkpoint/memory/__init__.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/langgraph/checkpoint/memory/__init__.py      
2020-02-02 01:00:00.000000000 +0100
@@ -148,17 +148,16 @@
         whose stored blob is non-empty. Other channels keep walking until
         they find their own terminator or hit the root.
 
-        Pre-delta plain-value blobs subsume their ancestor's pending
-        writes (the value already includes them); `_DeltaSnapshot` blobs
-        do not (snapshot is the value AT that ancestor, prior to its own
-        pending writes that produce the child).
+        A blob is the value AT its ancestor, prior to the writes stored
+        under that same ancestor (those writes produce its child, which
+        is on the path to the target). This holds for `_DeltaSnapshot`
+        blobs and for pre-delta plain values alike, so the seed
+        ancestor's own writes are always collected. Writes at ancestors
+        older than the seed are subsumed by the seed value and are never
+        reached β€” the walk terminates there.
         """
         if not channels:
             return {}
-        # Imported lazily to avoid a hard checkpoint→serde-types coupling at
-        # module import; only this override needs the runtime check.
-        from langgraph.checkpoint.serde.types import _DeltaSnapshot
-
         thread_id = config["configurable"]["thread_id"]
         checkpoint_ns = config["configurable"].get("checkpoint_ns", "")
         checkpoint_id = config["configurable"].get("checkpoint_id", "")
@@ -205,11 +204,6 @@
             ):
                 if ch not in remaining:
                     continue
-                blob_value = blob_value_by_ch.get(ch)
-                if blob_value is not None and not isinstance(
-                    blob_value, _DeltaSnapshot
-                ):
-                    continue
                 collected_by_ch[ch].append(
                     (tid, ch, self.serde.loads_typed(serialized))
                 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langgraph_checkpoint-4.1.1/langgraph/store/base/__init__.py 
new/langgraph_checkpoint-4.2.0/langgraph/store/base/__init__.py
--- old/langgraph_checkpoint-4.1.1/langgraph/store/base/__init__.py     
2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/langgraph/store/base/__init__.py     
2020-02-02 01:00:00.000000000 +0100
@@ -552,6 +552,14 @@
     This can be overridden per-operation by explicitly setting `refresh_ttl`.
     Defaults to `True` if not configured.
     """
+    omit_expired: bool
+    """Whether to omit expired items from read operations.
+
+    If `True`, and if the store supports this option, expired items will not be
+    returned by `GET` or `SEARCH`, or included in namespace listings, even 
before
+    a TTL sweep deletes them.
+    Defaults to `False` if not configured.
+    """
     default_ttl: float | None
     """Default TTL (time-to-live) in minutes for new items.
     
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/pyproject.toml 
new/langgraph_checkpoint-4.2.0/pyproject.toml
--- old/langgraph_checkpoint-4.1.1/pyproject.toml       2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/pyproject.toml       2020-02-02 
01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
 
 [project]
 name = "langgraph-checkpoint"
-version = "4.1.1"
+version = "4.2.0"
 description = "Library with base interfaces for LangGraph checkpoint savers."
 authors = []
 requires-python = ">=3.10"
@@ -37,7 +37,7 @@
 lint = [
   "ruff",
   "codespell",
-  "mypy",
+  "ty",
 ]
 dev = [
   {include-group = "test"},
@@ -59,23 +59,33 @@
   "UP", # pyupgrade
   "B",  # flake8-bugbear
   "I",  # isort
+  "PLC0415",  # import-outside-top-level
+  "RUF100",  # unused noqa directive
   "UP", # pyupgrade
 ]
 lint.ignore = ["E501", "B008"]
+# PLC0415 (import-outside-top-level) is enforced in tests only. Library code
+# still has deferred imports that have not been reviewed, so it stays exempt
+# for now.
+lint.per-file-ignores = { "langgraph/**" = ["PLC0415"] }
 target-version = "py310"
 
+[tool.ty.rules]
+deprecated = "ignore"
+invalid-argument-type = "ignore"
+invalid-assignment = "ignore"
+invalid-key = "ignore"
+invalid-method-override = "ignore"
+invalid-return-type = "ignore"
+invalid-type-form = "ignore"
+redundant-cast = "ignore"
+unused-type-ignore-comment = "ignore"
+unresolved-attribute = "ignore"
+unresolved-import = "ignore"
+unsupported-operator = "ignore"
+
 [tool.pytest-watcher]
 now = true
 delay = 0.1
 runner_args = ["--ff", "-v", "--tb", "short"]
 patterns = ["*.py"]
-
-[tool.mypy]
-# https://mypy.readthedocs.io/en/stable/config_file.html
-disallow_untyped_defs = "True"
-explicit_package_bases = "True"
-warn_no_return = "False"
-warn_unused_ignores = "True"
-warn_redundant_casts = "True"
-allow_redefinition = "True"
-disable_error_code = "typeddict-item, return-value"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langgraph_checkpoint-4.1.1/tests/test_conformance_delta.py 
new/langgraph_checkpoint-4.2.0/tests/test_conformance_delta.py
--- old/langgraph_checkpoint-4.1.1/tests/test_conformance_delta.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/tests/test_conformance_delta.py      
2020-02-02 01:00:00.000000000 +0100
@@ -12,10 +12,14 @@
 
 @pytest.mark.asyncio
 async def test_delta_channel_conformance():
-    from langgraph.checkpoint.conformance import validate
-    from langgraph.checkpoint.conformance.initializer import checkpointer_test
+    # Imported inside the test: the module-level importorskip above is what
+    # makes these safe, so they cannot move to the top of the file.
+    from langgraph.checkpoint.conformance import validate  # noqa: PLC0415
+    from langgraph.checkpoint.conformance.initializer import (  # noqa: PLC0415
+        checkpointer_test,
+    )
 
-    from langgraph.checkpoint.memory import InMemorySaver
+    from langgraph.checkpoint.memory import InMemorySaver  # noqa: PLC0415
 
     @checkpointer_test(name="InMemorySaver")
     async def mem_saver():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/tests/test_encrypted.py 
new/langgraph_checkpoint-4.2.0/tests/test_encrypted.py
--- old/langgraph_checkpoint-4.1.1/tests/test_encrypted.py      2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/tests/test_encrypted.py      2020-02-02 
01:00:00.000000000 +0100
@@ -307,8 +307,6 @@
             def loads_typed(self, data: tuple[str, bytes]) -> None:
                 return None
 
-        from langgraph.checkpoint.serde.base import CipherProtocol
-
         class DummyCipher(CipherProtocol):
             def encrypt(self, plaintext: bytes) -> tuple[str, bytes]:
                 return "dummy", plaintext
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/tests/test_jsonplus.py 
new/langgraph_checkpoint-4.2.0/tests/test_jsonplus.py
--- old/langgraph_checkpoint-4.1.1/tests/test_jsonplus.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/tests/test_jsonplus.py       2020-02-02 
01:00:00.000000000 +0100
@@ -1,9 +1,12 @@
 import dataclasses
 import json
 import logging
+import os
 import pathlib
+import pickle
 import re
 import sys
+import tempfile
 import uuid
 from collections import deque
 from datetime import date, datetime, time, timezone
@@ -18,7 +21,7 @@
 import pandas as pd
 import pytest
 from langchain_core.documents.base import Document
-from langchain_core.messages import HumanMessage
+from langchain_core.messages import AIMessage, HumanMessage
 from pydantic import BaseModel, SecretStr
 from pydantic.v1 import BaseModel as BaseModelV1
 from pydantic.v1 import SecretStr as SecretStrV1
@@ -341,7 +344,6 @@
     constructor dicts. Resuming those threads must reconstruct proper 
BaseMessage objects
     rather than returning raw dicts that cause MESSAGE_COERCION_FAILURE in 
add_messages.
     """
-    from langchain_core.messages import AIMessage
 
     serde = JsonPlusSerializer()  # default: _allowed_json_modules=None
 
@@ -410,7 +412,6 @@
     to that method: the result is whatever ``AIMessage(*args, **kwargs)`` would
     produce, which proves the default constructor ran instead of ``parse_raw``.
     """
-    from langchain_core.messages import AIMessage
 
     serde = JsonPlusSerializer()
     load = {
@@ -436,7 +437,6 @@
     method dispatch as a side effect. Revival is restricted to the default
     constructor regardless of how the class reached the revival path.
     """
-    from langchain_core.messages import AIMessage
 
     serde = JsonPlusSerializer(
         allowed_json_modules=[("langchain_core.messages.ai", "AIMessage")]
@@ -455,7 +455,6 @@
 
 def test_lc2_json_safe_type_init_still_works() -> None:
     """SAFE-type lc=2 revival without a `method` field still constructs the 
class."""
-    from langchain_core.messages import AIMessage
 
     serde = JsonPlusSerializer()
     load = {
@@ -479,7 +478,6 @@
     this shape continue to revive correctly as long as the default constructor
     accepts the serialized kwargs.
     """
-    from langchain_core.messages import AIMessage
 
     serde = JsonPlusSerializer()
     load = {
@@ -551,9 +549,6 @@
     With method dispatch removed from `_revive_lc2`, the gadget bytes are never
     passed to `parse_raw` and therefore never reach `pickle.loads`.
     """
-    import os
-    import pickle
-    import tempfile
 
     marker = tempfile.NamedTemporaryFile(
         prefix="lc2_block_proof_", suffix=".out", delete=False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/tests/test_memory.py 
new/langgraph_checkpoint-4.2.0/tests/test_memory.py
--- old/langgraph_checkpoint-4.1.1/tests/test_memory.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/tests/test_memory.py 2020-02-02 
01:00:00.000000000 +0100
@@ -1,3 +1,4 @@
+import asyncio
 import logging
 from typing import Any
 
@@ -523,7 +524,6 @@
         `threading.local()` guard would let whichever task set it first
         short-circuit the other to `writes=[]`.
         """
-        import asyncio
 
         saver, thread_id, ns = self._build_saver_with_chain()
 
@@ -577,9 +577,19 @@
     """
 
     def _build_mixed_thread(self) -> tuple[InMemorySaver, str, str, str, str]:
-        """Three-checkpoint chain: cp1 (pre-delta, blob=[A]), cp2 (delta,
-        write=B), cp3 (delta, write=C). Reconstructing at cp3 must yield
-        seed=[A] + writes=[B, C].
+        """Four-checkpoint chain spanning the migration boundary:
+
+        * `cp0` β€” pre-delta ancestor OLDER than the seed. Its write
+          (`OLDER-WRITE`) is already folded into `cp1`'s stored value, so the
+          walk must terminate at `cp1` and never reach it.
+        * `cp1` β€” pre-delta, blob `["A"]`. That value is the state ENTERING
+          `cp1`; the write stored under `cp1` (`PRE-DELTA-WRITE`) is what
+          produced `cp2` and is NOT subsumed by the blob.
+        * `cp2` β€” delta-era, no stored value, write `B`.
+        * `cp3` β€” target, delta-era, write `PENDING-AT-TARGET`.
+
+        Reconstructing at `cp3` must yield seed `["A"]` plus writes
+        `["PRE-DELTA-WRITE", "B"]`.
 
         Returns `(saver, thread_id, ns, channel, cp3_id)`.
         """
@@ -587,16 +597,21 @@
         serde = JsonPlusSerializer()
         thread_id, ns, channel = "t1", "", "messages"
 
+        v0 = "00000000000000000000000000000000.0"
         v1 = "00000000000000000000000000000001.0"
         v2 = "00000000000000000000000000000002.0"
         v3 = "00000000000000000000000000000003.0"
 
-        # Pre-delta: cp1 stored a real blob for the channel.
+        # Pre-delta: cp0 and cp1 stored real blobs for the channel.
+        saver.blobs[(thread_id, ns, channel, v0)] = serde.dumps_typed([])
         saver.blobs[(thread_id, ns, channel, v1)] = serde.dumps_typed(["A"])
         # Delta-era: cp2 and cp3 store "empty"; real writes in 
checkpoint_writes.
         saver.blobs[(thread_id, ns, channel, v2)] = ("empty", b"")
         saver.blobs[(thread_id, ns, channel, v3)] = ("empty", b"")
 
+        cp0 = empty_checkpoint()
+        cp0["id"] = "cp0"
+        cp0["channel_versions"][channel] = v0
         cp1 = empty_checkpoint()
         cp1["id"] = "cp1"
         cp1["channel_versions"][channel] = v1
@@ -608,16 +623,24 @@
         cp3["channel_versions"][channel] = v3
 
         saver.storage[thread_id][ns] = {
-            "cp1": (serde.dumps_typed(cp1), serde.dumps_typed({}), None),
+            "cp0": (serde.dumps_typed(cp0), serde.dumps_typed({}), None),
+            "cp1": (serde.dumps_typed(cp1), serde.dumps_typed({}), "cp0"),
             "cp2": (serde.dumps_typed(cp2), serde.dumps_typed({}), "cp1"),
             "cp3": (serde.dumps_typed(cp3), serde.dumps_typed({}), "cp2"),
         }
-        # Write under cp1 would be from the pre-delta era and MUST be ignored
-        # (the blob already captures it). We add one and assert it is not
-        # folded into the reconstructed result.
-        saver.writes[(thread_id, ns, "cp1")][("task0", 0)] = (
+        # Write under cp0 is older than the seed β€” cp1's blob already folded
+        # it in, and the terminator must stop before reaching it.
+        saver.writes[(thread_id, ns, "cp0")][("task0", 0)] = (
             "task0",
             channel,
+            serde.dumps_typed("OLDER-WRITE"),
+            "",
+        )
+        # Write under cp1 postdates cp1's blob (it is what produced cp2, which
+        # stores no value of its own) and MUST be replayed.
+        saver.writes[(thread_id, ns, "cp1")][("task1", 0)] = (
+            "task1",
+            channel,
             serde.dumps_typed("PRE-DELTA-WRITE"),
             "",
         )
@@ -651,15 +674,19 @@
 
         # Seed came from the pre-delta blob at cp1.
         assert result["seed"] == ["A"]
-        # Delta-era writes from cp2 replay through the reducer on top of seed.
-        # cp3 is the target β€” its own write is pending for the NEXT step and
-        # must be excluded.
+        # The seed ancestor's own write and the delta-era write from cp2 both
+        # replay through the reducer on top of the seed, oldest first. cp3 is
+        # the target β€” its own write is pending for the NEXT step and must be
+        # excluded.
         values = [v for _, _, v in result["writes"]]
-        assert values == ["B"]
+        assert values == ["PRE-DELTA-WRITE", "B"]
 
-    def test_pre_delta_blob_terminates_walk_before_older_writes(self) -> None:
-        """Writes stored at the pre-delta ancestor itself must not be replayed
-        (the blob subsumes them)."""
+    def test_seed_bounds_walk_without_dropping_its_own_writes(self) -> None:
+        """The seed terminator bounds the walk: writes at ancestors OLDER than
+        the seed are already folded into the seed value and must not be
+        replayed. The seed ancestor's own write is not one of them β€” it
+        postdates the stored value and produced the next checkpoint.
+        """
         saver, thread_id, ns, channel, target = self._build_mixed_thread()
         config: RunnableConfig = {
             "configurable": {
@@ -674,7 +701,9 @@
         ]
 
         values = [v for _, _, v in result["writes"]]
-        # The pre-delta write under cp1 must not appear (the blob subsumes it).
-        assert "PRE-DELTA-WRITE" not in values
+        # Older than the seed β€” subsumed by cp1's blob, so the walk stops 
first.
+        assert "OLDER-WRITE" not in values
+        # Stored AT the seed ancestor β€” not subsumed, so it must be replayed.
+        assert "PRE-DELTA-WRITE" in values
         # And the pending write at the target is never folded in.
         assert "PENDING-AT-TARGET" not in values
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/tests/test_store.py 
new/langgraph_checkpoint-4.2.0/tests/test_store.py
--- old/langgraph_checkpoint-4.1.1/tests/test_store.py  2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_checkpoint-4.2.0/tests/test_store.py  2020-02-02 
01:00:00.000000000 +0100
@@ -1,4 +1,3 @@
-# mypy: disable-error-code="operator"
 import asyncio
 import json
 from collections.abc import Iterable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_checkpoint-4.1.1/uv.lock 
new/langgraph_checkpoint-4.2.0/uv.lock
--- old/langgraph_checkpoint-4.1.1/uv.lock      2020-02-02 01:00:00.000000000 
+0100
+++ new/langgraph_checkpoint-4.2.0/uv.lock      2020-02-02 01:00:00.000000000 
+0100
@@ -149,11 +149,11 @@
 
 [[package]]
 name = "codespell"
-version = "2.4.2"
+version = "2.4.3"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/2d/9d/1d0903dff693160f893ca6abcabad545088e7a2ee0a6deae7c24e958be69/codespell-2.4.2.tar.gz";,
 hash = 
"sha256:3c33be9ae34543807f088aeb4832dfad8cb2dae38da61cac0a7045dd376cfdf3", size 
= 352058, upload-time = "2026-03-05T18:10:42.936Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/80/19/45e941380f69c042b43423513d201e6592346f992394347f5e7174c31407/codespell-2.4.3.tar.gz";,
 hash = 
"sha256:cbe085e331227b37bb86ef8bddd08dc768c704ee9a07ca869852c093fa2793e2", size 
= 352773, upload-time = "2026-07-15T11:51:54.159Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/42/a1/52fa05533e95fe45bcc09bcf8a503874b1c08f221a4e35608017e0938f55/codespell-2.4.2-py3-none-any.whl";,
 hash = 
"sha256:97e0c1060cf46bd1d5db89a936c98db8c2b804e1fdd4b5c645e82a1ec6b1f886", size 
= 353715, upload-time = "2026-03-05T18:10:41.398Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8b/bf/bdb951d34eb169140b546f44be9ec4525d1acefb9eb5572071f5492b19fc/codespell-2.4.3-py3-none-any.whl";,
 hash = 
"sha256:af2505b335e8573dbd2d384d1c4ef498f4006f4ba2d6fceca01e55b91f52628a", size 
= 340736, upload-time = "2026-07-15T11:51:52.925Z" },
 ]
 
 [[package]]
@@ -268,7 +268,7 @@
 
 [[package]]
 name = "langchain-core"
-version = "1.3.3"
+version = "1.5.2"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "jsonpatch" },
@@ -281,26 +281,26 @@
     { name = "typing-extensions" },
     { name = "uuid-utils" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/d3/ae/8b74458fc3850ec3d150eb9f45e857db129dafa801fb5cf173dfc9f8bbf3/langchain_core-1.3.3.tar.gz";,
 hash = 
"sha256:fa510a5db8efdc0c6ff41c0939fb5c00a0183c11f6b84233e892e3227ff69182", size 
= 915041, upload-time = "2026-05-05T19:02:36.612Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/6e/58/3ad53096eee1e07728e8219ded30ae308b0f2b8b7b26b8ebb6371917c0f5/langchain_core-1.5.2.tar.gz";,
 hash = 
"sha256:2d13ab35b42eec63d4669a483776b8cdd778ee764107149369fb369d84c08c41", size 
= 972322, upload-time = "2026-07-28T16:38:37.977Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/1f/01/4771b7ab2af1d1aba5b710bd8f13d9225c609425214b357590a17b01be77/langchain_core-1.3.3-py3-none-any.whl";,
 hash = 
"sha256:18aae8506f37da7f74398492279a7d6efcee4f8e23c4c41c7af080eeb7ef7bd1", size 
= 543857, upload-time = "2026-05-05T19:02:34.52Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ca/e4/024e402a65f5ee2eb6ae9667b5ffc5f08776cb4e712f5a11ee1997d56083/langchain_core-1.5.2-py3-none-any.whl";,
 hash = 
"sha256:a687dd7c3b22c6c1294e1c1eeb61fb6f3a308e6015a1d75b576b3836ad5b5aed", size 
= 561643, upload-time = "2026-07-28T16:38:36.38Z" },
 ]
 
 [[package]]
 name = "langchain-protocol"
-version = "0.0.15"
+version = "0.0.18"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "typing-extensions" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/4f/24/9777489d6fbbee64af0c8f96d4f840239c408cf694f3394672807dafc490/langchain_protocol-0.0.15.tar.gz";,
 hash = 
"sha256:9ab2d11ee73944754f10e037e717098d3a6796f0e58afa9cadda6154e7655ade", size 
= 5862, upload-time = "2026-05-01T22:30:04.748Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/d2/59/b5959aea96faa9146e2e49a7a22882b3528c62efafe9a6a95beab30c2305/langchain_protocol-0.0.18.tar.gz";,
 hash = 
"sha256:ec3e11782f1ed0c9db38e5a9ed01b0e7a0d3fba406faa8aef6594b73c56a63e6", size 
= 6150, upload-time = "2026-06-18T17:08:26.959Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/1d/7a/9c97a7b9cbe4c5dc6a44cdb1545450c28f0c8ce89b9c1f0ee7fbad896263/langchain_protocol-0.0.15-py3-none-any.whl";,
 hash = 
"sha256:461eb794358f83d5e42635a5797799ffec7b4702314e34edf73ac21e75d3ef79", size 
= 6982, upload-time = "2026-05-01T22:30:03.877Z" },
+    { url = 
"https://files.pythonhosted.org/packages/99/2e/d82db9eec13ad0f72e7aaad5c4bc730ab111934fdc83c85523206eb9b0a0/langchain_protocol-0.0.18-py3-none-any.whl";,
 hash = 
"sha256:70b53a86fbf9cedc863555effe44da192ab02d556ddbf2cf95b8873adcf41b5a", size 
= 7221, upload-time = "2026-06-18T17:08:25.996Z" },
 ]
 
 [[package]]
 name = "langgraph-checkpoint"
-version = "4.1.1"
+version = "4.2.0"
 source = { editable = "." }
 dependencies = [
     { name = "langchain-core" },
@@ -311,7 +311,6 @@
 dev = [
     { name = "codespell" },
     { name = "dataclasses-json" },
-    { name = "mypy" },
     { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
     { name = "numpy", version = "2.4.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.11'" },
     { name = "pandas" },
@@ -323,11 +322,12 @@
     { name = "pytest-watcher" },
     { name = "redis" },
     { name = "ruff" },
+    { name = "ty" },
 ]
 lint = [
     { name = "codespell" },
-    { name = "mypy" },
     { name = "ruff" },
+    { name = "ty" },
 ]
 test = [
     { name = "dataclasses-json" },
@@ -352,7 +352,6 @@
 dev = [
     { name = "codespell" },
     { name = "dataclasses-json" },
-    { name = "mypy" },
     { name = "numpy" },
     { name = "pandas" },
     { name = "pandas-stubs", specifier = ">=2.2.2.240807" },
@@ -363,11 +362,12 @@
     { name = "pytest-watcher" },
     { name = "redis" },
     { name = "ruff" },
+    { name = "ty" },
 ]
 lint = [
     { name = "codespell" },
-    { name = "mypy" },
     { name = "ruff" },
+    { name = "ty" },
 ]
 test = [
     { name = "dataclasses-json" },
@@ -383,7 +383,7 @@
 
 [[package]]
 name = "langsmith"
-version = "0.8.0"
+version = "0.8.18"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "httpx" },
@@ -393,97 +393,13 @@
     { name = "requests" },
     { name = "requests-toolbelt" },
     { name = "uuid-utils" },
+    { name = "websockets" },
     { name = "xxhash" },
     { name = "zstandard" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/a8/64/95f1f013531395f4e8ed73caeee780f65c7c58fe028cb543f8937b45611b/langsmith-0.8.0.tar.gz";,
 hash = 
"sha256:59fe5b2a56bbbe14a08aa76691f84b49e8675dd21e11b57d80c6db8c08bac2e3", size 
= 4432996, upload-time = "2026-04-30T22:13:07.341Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/9a/d9/a6681aa9847bbbc5ec21abe20a5e233b94e5edcfe39624db607ac7e8ccb4/langsmith-0.8.18.tar.gz";,
 hash = 
"sha256:32dde9c0e67e053e0fb738921fc8ced768af7b8fa83d7a0e3fd63597cf8776dd", size 
= 4526988, upload-time = "2026-06-19T13:12:17.123Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/f3/e1/a4be2e696c9473bb53298df398237da5674704d781d4b748ed35aeef592a/langsmith-0.8.0-py3-none-any.whl";,
 hash = 
"sha256:12cc4bc5622b835a6d841964d6034df3617bdb912dae0c1381fd0a68a9b3a3ef", size 
= 393268, upload-time = "2026-04-30T22:13:05.56Z" },
-]
-
-[[package]]
-name = "librt"
-version = "0.8.1"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/56/9c/b4b0c54d84da4a94b37bd44151e46d5e583c9534c7e02250b961b1b6d8a8/librt-0.8.1.tar.gz";,
 hash = 
"sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", size 
= 177471, upload-time = "2026-02-17T16:13:06.101Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/7c/5f/63f5fa395c7a8a93558c0904ba8f1c8d1b997ca6a3de61bc7659970d66bf/librt-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:81fd938344fecb9373ba1b155968c8a329491d2ce38e7ddb76f30ffb938f12dc", size 
= 65697, upload-time = "2026-02-17T16:11:06.903Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ff/e0/0472cf37267b5920eff2f292ccfaede1886288ce35b7f3203d8de00abfe6/librt-0.8.1-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5db05697c82b3a2ec53f6e72b2ed373132b0c2e05135f0696784e97d7f5d48e7", size 
= 68376, upload-time = "2026-02-17T16:11:08.395Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c8/be/8bd1359fdcd27ab897cd5963294fa4a7c83b20a8564678e4fd12157e56a5/librt-0.8.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:d56bc4011975f7460bea7b33e1ff425d2f1adf419935ff6707273c77f8a4ada6", size 
= 197084, upload-time = "2026-02-17T16:11:09.774Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e2/fe/163e33fdd091d0c2b102f8a60cc0a61fd730ad44e32617cd161e7cd67a01/librt-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:5cdc0f588ff4b663ea96c26d2a230c525c6fc62b28314edaaaca8ed5af931ad0", size 
= 207337, upload-time = "2026-02-17T16:11:11.311Z" },
-    { url = 
"https://files.pythonhosted.org/packages/01/99/f85130582f05dcf0c8902f3d629270231d2f4afdfc567f8305a952ac7f14/librt-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:97c2b54ff6717a7a563b72627990bec60d8029df17df423f0ed37d56a17a176b", size 
= 219980, upload-time = "2026-02-17T16:11:12.499Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6f/54/cb5e4d03659e043a26c74e08206412ac9a3742f0477d96f9761a55313b5f/librt-0.8.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:8f1125e6bbf2f1657d9a2f3ccc4a2c9b0c8b176965bb565dd4d86be67eddb4b6", size 
= 212921, upload-time = "2026-02-17T16:11:14.484Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b1/81/a3a01e4240579c30f3487f6fed01eb4bc8ef0616da5b4ebac27ca19775f3/librt-0.8.1-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:8f4bb453f408137d7581be309b2fbc6868a80e7ef60c88e689078ee3a296ae71", size 
= 221381, upload-time = "2026-02-17T16:11:17.459Z" },
-    { url = 
"https://files.pythonhosted.org/packages/08/b0/fc2d54b4b1c6fb81e77288ff31ff25a2c1e62eaef4424a984f228839717b/librt-0.8.1-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:c336d61d2fe74a3195edc1646d53ff1cddd3a9600b09fa6ab75e5514ba4862a7", size 
= 216714, upload-time = "2026-02-17T16:11:19.197Z" },
-    { url = 
"https://files.pythonhosted.org/packages/96/96/85daa73ffbd87e1fb287d7af6553ada66bf25a2a6b0de4764344a05469f6/librt-0.8.1-cp310-cp310-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:eb5656019db7c4deacf0c1a55a898c5bb8f989be904597fcb5232a2f4828fa05", size 
= 214777, upload-time = "2026-02-17T16:11:20.443Z" },
-    { url = 
"https://files.pythonhosted.org/packages/12/9c/c3aa7a2360383f4bf4f04d98195f2739a579128720c603f4807f006a4225/librt-0.8.1-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:c25d9e338d5bed46c1632f851babf3d13c78f49a225462017cf5e11e845c5891", size 
= 237398, upload-time = "2026-02-17T16:11:22.083Z" },
-    { url = 
"https://files.pythonhosted.org/packages/61/19/d350ea89e5274665185dabc4bbb9c3536c3411f862881d316c8b8e00eb66/librt-0.8.1-cp310-cp310-win32.whl";,
 hash = 
"sha256:aaab0e307e344cb28d800957ef3ec16605146ef0e59e059a60a176d19543d1b7", size 
= 54285, upload-time = "2026-02-17T16:11:23.27Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4f/d6/45d587d3d41c112e9543a0093d883eb57a24a03e41561c127818aa2a6bcc/librt-0.8.1-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:56e04c14b696300d47b3bc5f1d10a00e86ae978886d0cee14e5714fafb5df5d2", size 
= 61352, upload-time = "2026-02-17T16:11:24.207Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1d/01/0e748af5e4fee180cf7cd12bd12b0513ad23b045dccb2a83191bde82d168/librt-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:681dc2451d6d846794a828c16c22dc452d924e9f700a485b7ecb887a30aad1fd", size 
= 65315, upload-time = "2026-02-17T16:11:25.152Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9d/4d/7184806efda571887c798d573ca4134c80ac8642dcdd32f12c31b939c595/librt-0.8.1-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a3b4350b13cc0e6f5bec8fa7caf29a8fb8cdc051a3bae45cfbfd7ce64f009965", size 
= 68021, upload-time = "2026-02-17T16:11:26.129Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ae/88/c3c52d2a5d5101f28d3dc89298444626e7874aa904eed498464c2af17627/librt-0.8.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:ac1e7817fd0ed3d14fd7c5df91daed84c48e4c2a11ee99c0547f9f62fdae13da", size 
= 194500, upload-time = "2026-02-17T16:11:27.177Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d6/5d/6fb0a25b6a8906e85b2c3b87bee1d6ed31510be7605b06772f9374ca5cb3/librt-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:747328be0c5b7075cde86a0e09d7a9196029800ba75a1689332348e998fb85c0", size 
= 205622, upload-time = "2026-02-17T16:11:28.242Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/a6/8006ae81227105476a45691f5831499e4d936b1c049b0c1feb17c11b02d1/librt-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:f0af2bd2bc204fa27f3d6711d0f360e6b8c684a035206257a81673ab924aa11e", size 
= 218304, upload-time = "2026-02-17T16:11:29.344Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ee/19/60e07886ad16670aae57ef44dada41912c90906a6fe9f2b9abac21374748/librt-0.8.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:d480de377f5b687b6b1bc0c0407426da556e2a757633cc7e4d2e1a057aa688f3", size 
= 211493, upload-time = "2026-02-17T16:11:30.445Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9c/cf/f666c89d0e861d05600438213feeb818c7514d3315bae3648b1fc145d2b6/librt-0.8.1-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:d0ee06b5b5291f609ddb37b9750985b27bc567791bc87c76a569b3feed8481ac", size 
= 219129, upload-time = "2026-02-17T16:11:32.021Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8f/ef/f1bea01e40b4a879364c031476c82a0dc69ce068daad67ab96302fed2d45/librt-0.8.1-cp311-cp311-musllinux_1_2_i686.whl";,
 hash = 
"sha256:9e2c6f77b9ad48ce5603b83b7da9ee3e36b3ab425353f695cba13200c5d96596", size 
= 213113, upload-time = "2026-02-17T16:11:33.192Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9b/80/cdab544370cc6bc1b72ea369525f547a59e6938ef6863a11ab3cd24759af/librt-0.8.1-cp311-cp311-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:439352ba9373f11cb8e1933da194dcc6206daf779ff8df0ed69c5e39113e6a99", size 
= 212269, upload-time = "2026-02-17T16:11:34.373Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9d/9c/48d6ed8dac595654f15eceab2035131c136d1ae9a1e3548e777bb6dbb95d/librt-0.8.1-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:82210adabbc331dbb65d7868b105185464ef13f56f7f76688565ad79f648b0fe", size 
= 234673, upload-time = "2026-02-17T16:11:36.063Z" },
-    { url = 
"https://files.pythonhosted.org/packages/16/01/35b68b1db517f27a01be4467593292eb5315def8900afad29fabf56304ba/librt-0.8.1-cp311-cp311-win32.whl";,
 hash = 
"sha256:52c224e14614b750c0a6d97368e16804a98c684657c7518752c356834fff83bb", size 
= 54597, upload-time = "2026-02-17T16:11:37.544Z" },
-    { url = 
"https://files.pythonhosted.org/packages/71/02/796fe8f02822235966693f257bf2c79f40e11337337a657a8cfebba5febc/librt-0.8.1-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:c00e5c884f528c9932d278d5c9cbbea38a6b81eb62c02e06ae53751a83a4d52b", size 
= 61733, upload-time = "2026-02-17T16:11:38.691Z" },
-    { url = 
"https://files.pythonhosted.org/packages/28/ad/232e13d61f879a42a4e7117d65e4984bb28371a34bb6fb9ca54ec2c8f54e/librt-0.8.1-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:f7cdf7f26c2286ffb02e46d7bac56c94655540b26347673bea15fa52a6af17e9", size 
= 52273, upload-time = "2026-02-17T16:11:40.308Z" },
-    { url = 
"https://files.pythonhosted.org/packages/95/21/d39b0a87ac52fc98f621fb6f8060efb017a767ebbbac2f99fbcbc9ddc0d7/librt-0.8.1-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", size 
= 66516, upload-time = "2026-02-17T16:11:41.604Z" },
-    { url = 
"https://files.pythonhosted.org/packages/69/f1/46375e71441c43e8ae335905e069f1c54febee63a146278bcee8782c84fd/librt-0.8.1-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", size 
= 68634, upload-time = "2026-02-17T16:11:43.268Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0a/33/c510de7f93bf1fa19e13423a606d8189a02624a800710f6e6a0a0f0784b3/librt-0.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", size 
= 198941, upload-time = "2026-02-17T16:11:44.28Z" },
-    { url = 
"https://files.pythonhosted.org/packages/dd/36/e725903416409a533d92398e88ce665476f275081d0d7d42f9c4951999e5/librt-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", size 
= 209991, upload-time = "2026-02-17T16:11:45.462Z" },
-    { url = 
"https://files.pythonhosted.org/packages/30/7a/8d908a152e1875c9f8eac96c97a480df425e657cdb47854b9efaa4998889/librt-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", size 
= 224476, upload-time = "2026-02-17T16:11:46.542Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a8/b8/a22c34f2c485b8903a06f3fe3315341fe6876ef3599792344669db98fcff/librt-0.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", size 
= 217518, upload-time = "2026-02-17T16:11:47.746Z" },
-    { url = 
"https://files.pythonhosted.org/packages/79/6f/5c6fea00357e4f82ba44f81dbfb027921f1ab10e320d4a64e1c408d035d9/librt-0.8.1-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", size 
= 225116, upload-time = "2026-02-17T16:11:49.298Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f2/a0/95ced4e7b1267fe1e2720a111685bcddf0e781f7e9e0ce59d751c44dcfe5/librt-0.8.1-cp312-cp312-musllinux_1_2_i686.whl";,
 hash = 
"sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", size 
= 217751, upload-time = "2026-02-17T16:11:50.49Z" },
-    { url = 
"https://files.pythonhosted.org/packages/93/c2/0517281cb4d4101c27ab59472924e67f55e375bc46bedae94ac6dc6e1902/librt-0.8.1-cp312-cp312-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", size 
= 218378, upload-time = "2026-02-17T16:11:51.783Z" },
-    { url = 
"https://files.pythonhosted.org/packages/43/e8/37b3ac108e8976888e559a7b227d0ceac03c384cfd3e7a1c2ee248dbae79/librt-0.8.1-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", size 
= 241199, upload-time = "2026-02-17T16:11:53.561Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4b/5b/35812d041c53967fedf551a39399271bbe4257e681236a2cf1a69c8e7fa1/librt-0.8.1-cp312-cp312-win32.whl";,
 hash = 
"sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", size 
= 54917, upload-time = "2026-02-17T16:11:54.758Z" },
-    { url = 
"https://files.pythonhosted.org/packages/de/d1/fa5d5331b862b9775aaf2a100f5ef86854e5d4407f71bddf102f4421e034/librt-0.8.1-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444", size 
= 62017, upload-time = "2026-02-17T16:11:55.748Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c7/7c/c614252f9acda59b01a66e2ddfd243ed1c7e1deab0293332dfbccf862808/librt-0.8.1-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", size 
= 52441, upload-time = "2026-02-17T16:11:56.801Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c5/3c/f614c8e4eaac7cbf2bbdf9528790b21d89e277ee20d57dc6e559c626105f/librt-0.8.1-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", size 
= 66529, upload-time = "2026-02-17T16:11:57.809Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/96/5836544a45100ae411eda07d29e3d99448e5258b6e9c8059deb92945f5c2/librt-0.8.1-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", size 
= 68669, upload-time = "2026-02-17T16:11:58.843Z" },
-    { url = 
"https://files.pythonhosted.org/packages/06/53/f0b992b57af6d5531bf4677d75c44f095f2366a1741fb695ee462ae04b05/librt-0.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", size 
= 199279, upload-time = "2026-02-17T16:11:59.862Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f3/ad/4848cc16e268d14280d8168aee4f31cea92bbd2b79ce33d3e166f2b4e4fc/librt-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", size 
= 210288, upload-time = "2026-02-17T16:12:00.954Z" },
-    { url = 
"https://files.pythonhosted.org/packages/52/05/27fdc2e95de26273d83b96742d8d3b7345f2ea2bdbd2405cc504644f2096/librt-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", size 
= 224809, upload-time = "2026-02-17T16:12:02.108Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7a/d0/78200a45ba3240cb042bc597d6f2accba9193a2c57d0356268cbbe2d0925/librt-0.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", size 
= 218075, upload-time = "2026-02-17T16:12:03.631Z" },
-    { url = 
"https://files.pythonhosted.org/packages/af/72/a210839fa74c90474897124c064ffca07f8d4b347b6574d309686aae7ca6/librt-0.8.1-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", size 
= 225486, upload-time = "2026-02-17T16:12:04.725Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a3/c1/a03cc63722339ddbf087485f253493e2b013039f5b707e8e6016141130fa/librt-0.8.1-cp313-cp313-musllinux_1_2_i686.whl";,
 hash = 
"sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", size 
= 218219, upload-time = "2026-02-17T16:12:05.828Z" },
-    { url = 
"https://files.pythonhosted.org/packages/58/f5/fff6108af0acf941c6f274a946aea0e484bd10cd2dc37610287ce49388c5/librt-0.8.1-cp313-cp313-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", size 
= 218750, upload-time = "2026-02-17T16:12:07.09Z" },
-    { url = 
"https://files.pythonhosted.org/packages/71/67/5a387bfef30ec1e4b4f30562c8586566faf87e47d696768c19feb49e3646/librt-0.8.1-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", size 
= 241624, upload-time = "2026-02-17T16:12:08.43Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl";,
 hash = 
"sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size 
= 54969, upload-time = "2026-02-17T16:12:09.633Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size 
= 62000, upload-time = "2026-02-17T16:12:10.632Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size 
= 52495, upload-time = "2026-02-17T16:12:11.633Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size 
= 66081, upload-time = "2026-02-17T16:12:12.766Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size 
= 68309, upload-time = "2026-02-17T16:12:13.756Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size 
= 196804, upload-time = "2026-02-17T16:12:14.818Z" },
-    { url = 
"https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size 
= 206907, upload-time = "2026-02-17T16:12:16.513Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size 
= 221217, upload-time = "2026-02-17T16:12:17.906Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size 
= 214622, upload-time = "2026-02-17T16:12:19.108Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size 
= 221987, upload-time = "2026-02-17T16:12:20.331Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl";,
 hash = 
"sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size 
= 215132, upload-time = "2026-02-17T16:12:21.54Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size 
= 215195, upload-time = "2026-02-17T16:12:23.073Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size 
= 237946, upload-time = "2026-02-17T16:12:24.275Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl";,
 hash = 
"sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size 
= 50689, upload-time = "2026-02-17T16:12:25.766Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size 
= 57875, upload-time = "2026-02-17T16:12:27.465Z" },
-    { url = 
"https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size 
= 48058, upload-time = "2026-02-17T16:12:28.556Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size 
= 68313, upload-time = "2026-02-17T16:12:29.659Z" },
-    { url = 
"https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size 
= 70994, upload-time = "2026-02-17T16:12:31.516Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size 
= 220770, upload-time = "2026-02-17T16:12:33.294Z" },
-    { url = 
"https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size 
= 235409, upload-time = "2026-02-17T16:12:35.443Z" },
-    { url = 
"https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size 
= 246473, upload-time = "2026-02-17T16:12:36.656Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size 
= 238866, upload-time = "2026-02-17T16:12:37.849Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size 
= 250248, upload-time = "2026-02-17T16:12:39.445Z" },
-    { url = 
"https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl";,
 hash = 
"sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size 
= 240629, upload-time = "2026-02-17T16:12:40.889Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size 
= 239615, upload-time = "2026-02-17T16:12:42.446Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size 
= 263001, upload-time = "2026-02-17T16:12:43.627Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl";,
 hash = 
"sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size 
= 51328, upload-time = "2026-02-17T16:12:45.148Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size 
= 58722, upload-time = "2026-02-17T16:12:46.85Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl";,
 hash = 
"sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size 
= 48755, upload-time = "2026-02-17T16:12:47.943Z" },
+    { url = 
"https://files.pythonhosted.org/packages/03/70/0e0cc80a3b064c8d6c8d697c3125ed86e39d5a7393ec6dc8b07cb1cf13c4/langsmith-0.8.18-py3-none-any.whl";,
 hash = 
"sha256:3940183349993faef48e6c7d08e4822ee9cefd906b362d0e3c2d650314d2f282", size 
= 508108, upload-time = "2026-06-19T13:12:15.348Z" },
 ]
 
 [[package]]
@@ -499,64 +415,6 @@
 ]
 
 [[package]]
-name = "mypy"
-version = "1.20.2"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { 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/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz";,
 hash = 
"sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665", size 
= 3817349, upload-time = "2026-04-21T17:12:28.473Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/76/97/ce2502df2cecf2ef997b6c6527c4a223b92feb9e7b790cdc8dcd683f3a8a/mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:cf5a4db6dca263010e2c7bff081c89383c72d187ba2cf4c44759aac970e2f0c4", size 
= 14457059, upload-time = "2026-04-21T17:06:14.935Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c9/34/417ee60b822cc80c0f3dc9f495ad7fd8dbb8d8b2cf4baf22d4046d25d01d/mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:7b0e817b518bff7facd7f85ea05b643ad8bdcce684cf29784987b0a7c8e1f997", size 
= 13346816, upload-time = "2026-04-21T17:10:41.433Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4a/85/e20951978702df58379d0bcc2e8f7ccdca4e78cd7dc66dd3ddbf9b29d517/mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:97d7b9a485b40f8ca425460e89bf1da2814625b2da627c0dcc6aa46c92631d14", size 
= 13772593, upload-time = "2026-04-21T17:08:11.24Z" },
-    { url = 
"https://files.pythonhosted.org/packages/63/a5/5441a13259ec516c56fd5de0fd96a69a9590ae6c5e5d3e5174aa84b97973/mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:1e1c12f6d2db3d78b909b5f77513c11eb7f2dd2782b96a3ab6dffc7d44575c99", size 
= 14656635, upload-time = "2026-04-21T17:09:54.042Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3b/51/b89c69157c5e1f19fd125a65d991166a26906e7902f026f00feebbcfa2b9/mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:89dce27e142d25ffbc154c1819383b69f2e9234dc4ed4766f42e0e8cb264ab5c", size 
= 14943278, upload-time = "2026-04-21T17:09:15.599Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e9/44/6b0eeecfe96d7cce1d71c66b8e03cb304aa70ec11f1955dc1d6b46aca3c3/mypy-1.20.2-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:f376e37f9bf2a946872fc5fd1199c99310748e3c26c7a26683f13f8bdb756cbd", size 
= 10851915, upload-time = "2026-04-21T17:06:03.5Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3c/36/6593dc88545d75fb96416184be5392da5e2a8e8c2802a8597913e16ae25c/mypy-1.20.2-cp310-cp310-win_arm64.whl";,
 hash = 
"sha256:6e2b469efd811707bc530fd1effef0f5d6eebcb7fe376affae69025da4b979a2", size 
= 9786676, upload-time = "2026-04-21T17:07:02.035Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1f/4d/9ebeae211caccbdaddde7ed5e31dfcf57faac66be9b11deb1dc6526c8078/mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c", size 
= 14371307, upload-time = "2026-04-21T17:08:56.442Z" },
-    { url = 
"https://files.pythonhosted.org/packages/95/d7/93473d34b61f04fac1aecc01368485c89c5c4af7a4b9a0cab5d77d04b63f/mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3", size 
= 13258917, upload-time = "2026-04-21T17:05:50.978Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e2/30/3dd903e8bafb7b5f7bf87fcd58f8382086dea2aa19f0a7b357f21f63071b/mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254", size 
= 13700516, upload-time = "2026-04-21T17:11:33.161Z" },
-    { url = 
"https://files.pythonhosted.org/packages/07/05/c61a140aba4c729ac7bc99ae26fc627c78a6e08f5b9dd319244ea71a3d7e/mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98", size 
= 14562889, upload-time = "2026-04-21T17:05:27.674Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fd/87/da78243742ffa8a36d98c3010f0d829f93d5da4e6786f1a1a6f2ad616502/mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac", size 
= 14803844, upload-time = "2026-04-21T17:10:06.2Z" },
-    { url = 
"https://files.pythonhosted.org/packages/37/52/10a1ddf91b40f843943a3c6db51e2df59c9e237f29d355e95eaab427461f/mypy-1.20.2-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67", size 
= 10846300, upload-time = "2026-04-21T17:12:23.886Z" },
-    { url = 
"https://files.pythonhosted.org/packages/20/02/f9a4415b664c53bd34d6709be59da303abcae986dc4ac847b402edb6fa1e/mypy-1.20.2-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100", size 
= 9779498, upload-time = "2026-04-21T17:09:23.695Z" },
-    { url = 
"https://files.pythonhosted.org/packages/71/4e/7560e4528db9e9b147e4c0f22660466bf30a0a1fe3d63d1b9d3b0fd354ee/mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b", size 
= 14539393, upload-time = "2026-04-21T17:07:12.52Z" },
-    { url = 
"https://files.pythonhosted.org/packages/32/d9/34a5efed8124f5a9234f55ac6a4ced4201e2c5b81e1109c49ad23190ec8c/mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4", size 
= 13361642, upload-time = "2026-04-21T17:06:53.742Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/14/eb377acf78c03c92d566a1510cda8137348215b5335085ef662ab82ecd3a/mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6", size 
= 13740347, upload-time = "2026-04-21T17:12:04.73Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b9/94/7e4634a32b641aa1c112422eed1bbece61ee16205f674190e8b536f884de/mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066", size 
= 14734042, upload-time = "2026-04-21T17:07:43.16Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7a/f3/f7e62395cb7f434541b4491a01149a4439e28ace4c0c632bbf5431e92d1f/mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102", size 
= 14964958, upload-time = "2026-04-21T17:11:00.665Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3e/0d/47e3c3a0ec2a876e35aeac365df3cac7776c36bbd4ed18cc521e1b9d255b/mypy-1.20.2-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9", size 
= 10911340, upload-time = "2026-04-21T17:10:49.179Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d6/b2/6c852d72e0ea8b01f49da817fb52539993cde327e7d010e0103dc12d0dac/mypy-1.20.2-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58", size 
= 9833947, upload-time = "2026-04-21T17:09:05.267Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026", size 
= 14524670, upload-time = "2026-04-21T17:10:30.737Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943", size 
= 13336218, upload-time = "2026-04-21T17:08:44.069Z" },
-    { url = 
"https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517", size 
= 13724906, upload-time = "2026-04-21T17:08:01.02Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15", size 
= 14726046, upload-time = "2026-04-21T17:11:22.354Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee", size 
= 14955587, upload-time = "2026-04-21T17:12:16.033Z" },
-    { url = 
"https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f", size 
= 10922681, upload-time = "2026-04-21T17:06:35.842Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330", size 
= 9830560, upload-time = "2026-04-21T17:07:51.023Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30", size 
= 14524561, upload-time = "2026-04-21T17:06:27.325Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924", size 
= 13363883, upload-time = "2026-04-21T17:11:11.239Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb", size 
= 13742945, upload-time = "2026-04-21T17:08:34.181Z" },
-    { url = 
"https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc", size 
= 14706163, upload-time = "2026-04-21T17:05:15.51Z" },
-    { url = 
"https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558", size 
= 14938677, upload-time = "2026-04-21T17:05:39.562Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8", size 
= 11089322, upload-time = "2026-04-21T17:06:44.29Z" },
-    { url = 
"https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3", size 
= 10017775, upload-time = "2026-04-21T17:07:20.732Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609", size 
= 15549002, upload-time = "2026-04-21T17:08:23.107Z" },
-    { url = 
"https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2", size 
= 14401942, upload-time = "2026-04-21T17:07:31.837Z" },
-    { url = 
"https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c", size 
= 15041649, upload-time = "2026-04-21T17:09:34.653Z" },
-    { url = 
"https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744", size 
= 15864588, upload-time = "2026-04-21T17:11:44.936Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6", size 
= 16093956, upload-time = "2026-04-21T17:10:17.683Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec", size 
= 12568661, upload-time = "2026-04-21T17:11:54.473Z" },
-    { url = 
"https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl";,
 hash = 
"sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382", size 
= 10389240, upload-time = "2026-04-21T17:09:42.719Z" },
-    { url = 
"https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl";,
 hash = 
"sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563", size 
= 2637314, upload-time = "2026-04-21T17:05:54.5Z" },
-]
-
-[[package]]
 name = "mypy-extensions"
 version = "1.1.0"
 source = { registry = "https://pypi.org/simple"; }
@@ -937,15 +795,6 @@
 ]
 
 [[package]]
-name = "pathspec"
-version = "1.0.3"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/4c/b2/bb8e495d5262bfec41ab5cb18f522f1012933347fb5d9e62452d446baca2/pathspec-1.0.3.tar.gz";,
 hash = 
"sha256:bac5cf97ae2c2876e2d25ebb15078eb04d76e4b98921ee31c6f85ade8b59444d", size 
= 130841, upload-time = "2026-01-09T15:46:46.009Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/32/2b/121e912bd60eebd623f873fd090de0e84f322972ab25a7f9044c056804ed/pathspec-1.0.3-py3-none-any.whl";,
 hash = 
"sha256:e80767021c1cc524aa3fb14bedda9c34406591343cc42797b386ce7b9354fb6c", size 
= 55021, upload-time = "2026-01-09T15:46:44.652Z" },
-]
-
-[[package]]
 name = "pluggy"
 version = "1.6.0"
 source = { registry = "https://pypi.org/simple"; }
@@ -1133,7 +982,7 @@
 
 [[package]]
 name = "pytest"
-version = "9.0.3"
+version = "9.1.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -1144,23 +993,23 @@
     { 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" }
+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/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl";,
 hash = 
"sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size 
= 375249, upload-time = "2026-04-07T17:16:16.13Z" },
+    { 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.3.0"
+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/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz";,
 hash = 
"sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size 
= 50087, upload-time = "2025-11-10T16:07:47.256Z" }
+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/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl";,
 hash = 
"sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size 
= 15075, upload-time = "2025-11-10T16:07:45.537Z" },
+    { 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]]
@@ -1275,14 +1124,14 @@
 
 [[package]]
 name = "redis"
-version = "7.4.0"
+version = "8.0.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "async-timeout", marker = "python_full_version < '3.11.3'" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/7b/7f/3759b1d0d72b7c92f0d70ffd9dc962b7b7b5ee74e135f9d7d8ab06b8a318/redis-7.4.0.tar.gz";,
 hash = 
"sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad", size 
= 4943913, upload-time = "2026-03-24T09:14:37.53Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/cc/c3/928b290c2c0ca99ab96eea5b4ff8f30be8112b075301a7d3ba214a3c8c12/redis-8.0.1.tar.gz";,
 hash = 
"sha256:afc5a7a2f5a084f5b1880dec548dd45be17db7e43c82a30d84f952aefb05cfb0", size 
= 5114170, upload-time = "2026-06-23T14:52:37.728Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl";,
 hash = 
"sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec", size 
= 409772, upload-time = "2026-03-24T09:14:35.968Z" },
+    { url = 
"https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl";,
 hash = 
"sha256:47daa35a058c23468d6437f17a8c76882cb316b838ef763036af99b96cedd743", size 
= 502406, upload-time = "2026-06-23T14:52:36.137Z" },
 ]
 
 [[package]]
@@ -1314,27 +1163,27 @@
 
 [[package]]
 name = "ruff"
-version = "0.15.12"
+version = "0.16.0"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz";,
 hash = 
"sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size 
= 4643852, upload-time = "2026-04-24T18:17:14.305Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz";,
 hash = 
"sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size 
= 4790557, upload-time = "2026-07-23T19:11:30.981Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size 
= 10640713, upload-time = "2026-04-24T18:17:22.841Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size 
= 11069267, upload-time = "2026-04-24T18:17:30.105Z" },
-    { url = 
"https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size 
= 10397182, upload-time = "2026-04-24T18:17:07.177Z" },
-    { url = 
"https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size 
= 10758012, upload-time = "2026-04-24T18:16:55.759Z" },
-    { url = 
"https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size 
= 10447479, upload-time = "2026-04-24T18:16:51.677Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size 
= 11234040, upload-time = "2026-04-24T18:17:16.529Z" },
-    { url = 
"https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size 
= 12087377, upload-time = "2026-04-24T18:17:04.944Z" },
-    { url = 
"https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size 
= 11367784, upload-time = "2026-04-24T18:17:25.409Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size 
= 11344088, upload-time = "2026-04-24T18:17:12.258Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size 
= 11271770, upload-time = "2026-04-24T18:17:02.457Z" },
-    { url = 
"https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size 
= 10719355, upload-time = "2026-04-24T18:17:27.648Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size 
= 10462758, upload-time = "2026-04-24T18:17:32.347Z" },
-    { url = 
"https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl";,
 hash = 
"sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size 
= 10953498, upload-time = "2026-04-24T18:17:20.674Z" },
-    { url = 
"https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size 
= 11447765, upload-time = "2026-04-24T18:17:09.755Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl";,
 hash = 
"sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size 
= 10657277, upload-time = "2026-04-24T18:17:18.591Z" },
-    { url = 
"https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl";,
 hash = 
"sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size 
= 11837758, upload-time = "2026-04-24T18:17:00.113Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl";,
 hash = 
"sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size 
= 11120821, upload-time = "2026-04-24T18:16:57.979Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size 
= 10754633, upload-time = "2026-07-23T19:10:46.415Z" },
+    { url = 
"https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size 
= 10969164, upload-time = "2026-07-23T19:10:50.271Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size 
= 10488846, upload-time = "2026-07-23T19:10:52.639Z" },
+    { url = 
"https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size 
= 10889729, upload-time = "2026-07-23T19:10:54.89Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size 
= 10568275, upload-time = "2026-07-23T19:10:56.993Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size 
= 11385112, upload-time = "2026-07-23T19:10:59.615Z" },
+    { url = 
"https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size 
= 12207008, upload-time = "2026-07-23T19:11:02.154Z" },
+    { url = 
"https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size 
= 11650842, upload-time = "2026-07-23T19:11:04.557Z" },
+    { url = 
"https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size 
= 11400718, upload-time = "2026-07-23T19:11:09.233Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size 
= 11426177, upload-time = "2026-07-23T19:11:11.994Z" },
+    { url = 
"https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size 
= 10856126, upload-time = "2026-07-23T19:11:14.221Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size 
= 10571208, upload-time = "2026-07-23T19:11:16.378Z" },
+    { url = 
"https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl";,
 hash = 
"sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size 
= 11063329, upload-time = "2026-07-23T19:11:19.173Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size 
= 11489751, upload-time = "2026-07-23T19:11:21.74Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl";,
 hash = 
"sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size 
= 10785885, upload-time = "2026-07-23T19:11:23.947Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl";,
 hash = 
"sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size 
= 11923141, upload-time = "2026-07-23T19:11:26.409Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl";,
 hash = 
"sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size 
= 11273407, upload-time = "2026-07-23T19:11:28.705Z" },
 ]
 
 [[package]]
@@ -1410,6 +1259,31 @@
 ]
 
 [[package]]
+name = "ty"
+version = "0.0.64"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/8e/aa/14c9965d3b173105692473897cc89c34cd91241368b2044e43167e1c17ff/ty-0.0.64.tar.gz";,
 hash = 
"sha256:d12ddbb05f15158bb518af619378b385486450def95fb06f8ab98037febe9f2c", size 
= 6350966, upload-time = "2026-07-27T18:32:45.403Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/ae/4c/c54937e4ff3fa7b34a99ea3387ec766bf0ad98dc8df8d792e89b388e658e/ty-0.0.64-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:3830a6675ab43635ced1c4c557f380ac4a49e9414e03975e4e4e8db644c64944", size 
= 12118357, upload-time = "2026-07-27T18:32:08.702Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ce/aa/a839ee2bc78e943d079e6abe199a97b4eeffb7e5c9a57326d69de452186a/ty-0.0.64-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:3ff07d7bc32a2135f58afe57393789a32ea2fed1a66216129a8e535e76043903", size 
= 11790882, upload-time = "2026-07-27T18:32:10.997Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4c/de/19f14357888a7198438926303753cf749428e3d62e8980ff1e9a72a78402/ty-0.0.64-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:4f6d1c7f897cca05d12bacbf1435150d5ffa496099515aa6ed303c8b29e1d0bb", size 
= 11317394, upload-time = "2026-07-27T18:32:13.162Z" },
+    { url = 
"https://files.pythonhosted.org/packages/08/2f/f54462300535ab99b551eda733177be2eef5dbc2997d3fdb357c4ddd760a/ty-0.0.64-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:138d6c37ad4bf8583aa7a9b29d90954151d7856f9910a03eae3eb34b34c57215", size 
= 11863042, upload-time = "2026-07-27T18:32:15.307Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5e/95/dbecf745520ebe8bd7b02fc55eee6441c9be312ebf6addce605eb52740dd/ty-0.0.64-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:1ed9719d1b7b66fb8efe073d860208a44c40af1f6cd5c2364aa9b323a1e579b4", size 
= 11910730, upload-time = "2026-07-27T18:32:17.467Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3b/26/12cfd40028e51ceed7b3cb645281c61c02eb64ff9fb0c09231d65c30ff25/ty-0.0.64-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:d68b23e5169e2137b5f1de7169ab0cebecab6c8eda374c34c1f6394308f58242", size 
= 12631936, upload-time = "2026-07-27T18:32:19.533Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a0/d0/65ffc2b0a686347193c6f98e9421a7fc2a96fc3cd0b1001cf7cf284baff9/ty-0.0.64-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:f41cb07d89d32626fcaf3ed4d262778fcb28b2628b6ed1e172cd7b18820668d8", size 
= 13171049, upload-time = "2026-07-27T18:32:22.026Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f6/a4/975a5961842dcd6fa60f0770a102c0bba7509da909ab652919bfcdcd4fc7/ty-0.0.64-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:5f24e1504ab9e212f92356b82fe088fdeb3a39f9a2f4ff25e505d2e1d0db9056", size 
= 12826438, upload-time = "2026-07-27T18:32:24.178Z" },
+    { url = 
"https://files.pythonhosted.org/packages/af/ef/dfb9b7f9bcc032d3b540b0d1f55f532a336e2fb41b1bd539c05ae81a151a/ty-0.0.64-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:86db830cb914bb33bb8247b66ccea58de4496c2391bd42658aba744b439f3290", size 
= 12440880, upload-time = "2026-07-27T18:32:26.341Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ee/d0/bedac20505e8a8f5501ad73d7d15d8e421a563fef59993909a23036929a4/ty-0.0.64-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:652ee3d6d03bea76cd2fe8949c78bb5970394ebd7c5fd270e9518c0dee1b931d", size 
= 12782439, upload-time = "2026-07-27T18:32:28.642Z" },
+    { url = 
"https://files.pythonhosted.org/packages/79/d5/795733f13ceff1378f08b3de0c49d0f518df220ed856b0dfac869f3b7c81/ty-0.0.64-py3-none-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:4838768295774a86e95f9ec5633e739d016adbbb69dcbdc62f3549578a11f624", size 
= 11814821, upload-time = "2026-07-27T18:32:30.632Z" },
+    { url = 
"https://files.pythonhosted.org/packages/52/3e/9d99cd1e1831003434f508ed9f258a56543194afc3bbe051eba2545fa676/ty-0.0.64-py3-none-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:5a3d700669868599edf39ce5125196682f15a8880cc8c669bc2a83b99984d99b", size 
= 11928678, upload-time = "2026-07-27T18:32:32.888Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b8/3d/448f49a3503fb119a34348a5714bb92001f252fadbbb12d645f2e744b557/ty-0.0.64-py3-none-musllinux_1_2_i686.whl";,
 hash = 
"sha256:b161f0a82a8e2f2432db3bf7702b4d3924fa9486ba0014f6710a160fc157df0d", size 
= 12202249, upload-time = "2026-07-27T18:32:34.905Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dd/9b/75768e562cec990d189dc05807ae72890b20ffbd1e1f43597bb98db63c60/ty-0.0.64-py3-none-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:39b9dd42908df47c2dc57dda87e656fab97097ffd2618474bbdea986af0d6a9d", size 
= 12548817, upload-time = "2026-07-27T18:32:36.995Z" },
+    { url = 
"https://files.pythonhosted.org/packages/34/89/44cc276ea6ca0245495014758ffeadde1798fb0b5840c9cf36d8d2ed3250/ty-0.0.64-py3-none-win32.whl";,
 hash = 
"sha256:d0676ab0e0935795e5843baa28dd5e366dc343d7c0945a996df9eab8e0644885", size 
= 11545474, upload-time = "2026-07-27T18:32:39.389Z" },
+    { url = 
"https://files.pythonhosted.org/packages/01/7e/d1c8a871a38d17c8f168b9a6975f6247f7660f8334e517656a5e4b4a4858/ty-0.0.64-py3-none-win_amd64.whl";,
 hash = 
"sha256:dcb9bd31f54097e362b776c26ab4564d4564cdd1355cb883481167a26c03cc3f", size 
= 12542987, upload-time = "2026-07-27T18:32:41.412Z" },
+    { url = 
"https://files.pythonhosted.org/packages/35/4d/6d18640d0204cacd69abbaca95ad6a34c6d7e9169e9051d0117b17b827ec/ty-0.0.64-py3-none-win_arm64.whl";,
 hash = 
"sha256:82cc34c1ad9a8feb6059aef193bebcecc656e548f6fab3d518bcd8b57d198d39", size 
= 11899263, upload-time = "2026-07-27T18:32:43.366Z" },
+]
+
+[[package]]
 name = "types-pytz"
 version = "2025.2.0.20251108"
 source = { registry = "https://pypi.org/simple"; }
@@ -1532,6 +1406,74 @@
 ]
 
 [[package]]
+name = "websockets"
+version = "16.0"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz";,
 hash = 
"sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size 
= 179346, upload-time = "2026-01-10T09:23:47.181Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl";,
 hash = 
"sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size 
= 177343, upload-time = "2026-01-10T09:22:21.28Z" },
+    { url = 
"https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size 
= 175021, upload-time = "2026-01-10T09:22:22.696Z" },
+    { url = 
"https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size 
= 175320, upload-time = "2026-01-10T09:22:23.94Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size 
= 183815, upload-time = "2026-01-10T09:22:25.469Z" },
+    { url = 
"https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size 
= 185054, upload-time = "2026-01-10T09:22:27.101Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size 
= 184565, upload-time = "2026-01-10T09:22:28.293Z" },
+    { url = 
"https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size 
= 183848, upload-time = "2026-01-10T09:22:30.394Z" },
+    { url = 
"https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl";,
 hash = 
"sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size 
= 178249, upload-time = "2026-01-10T09:22:32.083Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size 
= 178685, upload-time = "2026-01-10T09:22:33.345Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl";,
 hash = 
"sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size 
= 177340, upload-time = "2026-01-10T09:22:34.539Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size 
= 175022, upload-time = "2026-01-10T09:22:36.332Z" },
+    { url = 
"https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size 
= 175319, upload-time = "2026-01-10T09:22:37.602Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size 
= 184631, upload-time = "2026-01-10T09:22:38.789Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size 
= 185870, upload-time = "2026-01-10T09:22:39.893Z" },
+    { url = 
"https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size 
= 185361, upload-time = "2026-01-10T09:22:41.016Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size 
= 184615, upload-time = "2026-01-10T09:22:42.442Z" },
+    { url = 
"https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl";,
 hash = 
"sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size 
= 178246, upload-time = "2026-01-10T09:22:43.654Z" },
+    { url = 
"https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size 
= 178684, upload-time = "2026-01-10T09:22:44.941Z" },
+    { url = 
"https://files.pythonhosted.org/packages/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl";,
 hash = 
"sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00", size 
= 177365, upload-time = "2026-01-10T09:22:46.787Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79", size 
= 175038, upload-time = "2026-01-10T09:22:47.999Z" },
+    { url = 
"https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39", size 
= 175328, upload-time = "2026-01-10T09:22:49.809Z" },
+    { url = 
"https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c", size 
= 184915, upload-time = "2026-01-10T09:22:51.071Z" },
+    { url = 
"https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size 
= 186152, upload-time = "2026-01-10T09:22:52.224Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size 
= 185583, upload-time = "2026-01-10T09:22:53.443Z" },
+    { url = 
"https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size 
= 184880, upload-time = "2026-01-10T09:22:55.033Z" },
+    { url = 
"https://files.pythonhosted.org/packages/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl";,
 hash = 
"sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", size 
= 178261, upload-time = "2026-01-10T09:22:56.251Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea", size 
= 178693, upload-time = "2026-01-10T09:22:57.478Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl";,
 hash = 
"sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9", size 
= 177364, upload-time = "2026-01-10T09:22:59.333Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230", size 
= 175039, upload-time = "2026-01-10T09:23:01.171Z" },
+    { url = 
"https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c", size 
= 175323, upload-time = "2026-01-10T09:23:02.341Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size 
= 184975, upload-time = "2026-01-10T09:23:03.756Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size 
= 186203, upload-time = "2026-01-10T09:23:05.01Z" },
+    { url = 
"https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size 
= 185653, upload-time = "2026-01-10T09:23:06.301Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f", size 
= 184920, upload-time = "2026-01-10T09:23:07.492Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl";,
 hash = 
"sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size 
= 178255, upload-time = "2026-01-10T09:23:09.245Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size 
= 178689, upload-time = "2026-01-10T09:23:10.483Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl";,
 hash = 
"sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0", size 
= 177406, upload-time = "2026-01-10T09:23:12.178Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904", size 
= 175085, upload-time = "2026-01-10T09:23:13.511Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4", size 
= 175328, upload-time = "2026-01-10T09:23:14.727Z" },
+    { url = 
"https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e", size 
= 185044, upload-time = "2026-01-10T09:23:15.939Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size 
= 186279, upload-time = "2026-01-10T09:23:17.148Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size 
= 185711, upload-time = "2026-01-10T09:23:18.372Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3", size 
= 184982, upload-time = "2026-01-10T09:23:19.652Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl";,
 hash = 
"sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", size 
= 177915, upload-time = "2026-01-10T09:23:21.458Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d", size 
= 178381, upload-time = "2026-01-10T09:23:22.715Z" },
+    { url = 
"https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl";,
 hash = 
"sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244", size 
= 177737, upload-time = "2026-01-10T09:23:24.523Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e", size 
= 175268, upload-time = "2026-01-10T09:23:25.781Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641", size 
= 175486, upload-time = "2026-01-10T09:23:27.033Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8", size 
= 185331, upload-time = "2026-01-10T09:23:28.259Z" },
+    { url = 
"https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size 
= 186501, upload-time = "2026-01-10T09:23:29.449Z" },
+    { url = 
"https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size 
= 186062, upload-time = "2026-01-10T09:23:31.368Z" },
+    { url = 
"https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206", size 
= 185356, upload-time = "2026-01-10T09:23:32.627Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl";,
 hash = 
"sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", size 
= 178085, upload-time = "2026-01-10T09:23:33.816Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd", size 
= 178531, upload-time = "2026-01-10T09:23:35.016Z" },
+    { url = 
"https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size 
= 174947, upload-time = "2026-01-10T09:23:36.166Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl";,
 hash = 
"sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size 
= 175260, upload-time = "2026-01-10T09:23:37.409Z" },
+    { url = 
"https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size 
= 176071, upload-time = "2026-01-10T09:23:39.158Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size 
= 176968, upload-time = "2026-01-10T09:23:41.031Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl";,
 hash = 
"sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size 
= 178735, upload-time = "2026-01-10T09:23:42.259Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl";,
 hash = 
"sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size 
= 171598, upload-time = "2026-01-10T09:23:45.395Z" },
+]
+
+[[package]]
 name = "xxhash"
 version = "3.6.0"
 source = { registry = "https://pypi.org/simple"; }

Reply via email to