This is an automated email from the ASF dual-hosted git repository.

weilee pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new 2d95940031d [v3-1-test] Fix airflow-ctl image generation failing with 
latest prek version (#58732) (#58799)
2d95940031d is described below

commit 2d95940031df3991e7e761ba43f56fa4855b461a
Author: Wei Lee <[email protected]>
AuthorDate: Fri Nov 28 12:18:44 2025 +0800

    [v3-1-test] Fix airflow-ctl image generation failing with latest prek 
version (#58732) (#58799)
---
 .github/actions/breeze/action.yml                  |   2 +-
 .github/actions/install-prek/action.yml            |   2 +-
 .github/workflows/airflow-distributions-tests.yml  |   2 +-
 .github/workflows/basic-tests.yml                  |   2 +-
 .github/workflows/ci-image-checks.yml              |   2 +-
 .github/workflows/release_dockerhub_image.yml      |   2 +-
 Dockerfile                                         |   2 +-
 Dockerfile.ci                                      |   6 +-
 dev/breeze/doc/ci/02_images.md                     |   2 +-
 dev/breeze/pyproject.toml                          |   2 +-
 .../commands/release_management_commands.py        |   4 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |   2 +-
 .../src/airflow_breeze/params/shell_params.py      |  64 +++--
 .../airflow_breeze/utils/docker_command_utils.py   |   2 -
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |  21 ++
 dev/breeze/uv.lock                                 | 267 +++++++++++----------
 pyproject.toml                                     |   2 +-
 .../enable-tty.yml}                                |  34 +--
 scripts/ci/prek/capture_airflowctl_help.py         |   4 +-
 scripts/ci/prek/common_prek_utils.py               |  24 +-
 scripts/docker/entrypoint_ci.sh                    |   4 +-
 .../in_container/run_capture_airflowctl_help.py    |  27 ++-
 scripts/tools/setup_breeze                         |   2 +-
 23 files changed, 262 insertions(+), 219 deletions(-)

diff --git a/.github/actions/breeze/action.yml 
b/.github/actions/breeze/action.yml
index 6381580246b..3862a75cda9 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -24,7 +24,7 @@ inputs:
     default: "3.10"
   uv-version:
     description: 'uv version to use'
-    default: "0.9.12"  # Keep this comment to allow automatic replacement of 
uv version
+    default: "0.9.13"  # Keep this comment to allow automatic replacement of 
uv version
 outputs:
   host-python-version:
     description: Python version used in host
diff --git a/.github/actions/install-prek/action.yml 
b/.github/actions/install-prek/action.yml
index 2872bfd4493..39d36de44b7 100644
--- a/.github/actions/install-prek/action.yml
+++ b/.github/actions/install-prek/action.yml
@@ -24,7 +24,7 @@ inputs:
     default: "3.10"
   uv-version:
     description: 'uv version to use'
-    default: "0.9.12"  # Keep this comment to allow automatic replacement of 
uv version
+    default: "0.9.13"  # Keep this comment to allow automatic replacement of 
uv version
   prek-version:
     description: 'prek version to use'
     default: "0.2.19"  # Keep this comment to allow automatic replacement of 
prek version
diff --git a/.github/workflows/airflow-distributions-tests.yml 
b/.github/workflows/airflow-distributions-tests.yml
index 8a76f5cf067..3f0cbeff08c 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -113,7 +113,7 @@ jobs:
           USE_LOCAL_HATCH: "${{ inputs.use-local-venv }}"
         run: |
           uv tool uninstall hatch || true
-          uv tool install hatch==1.15.1
+          uv tool install hatch==1.16.0
           breeze release-management "${DISTRIBUTION_TYPE}" 
--distribution-format wheel
         if: ${{ matrix.python-version == inputs.default-python-version }}
       - name: "Verify wheel packages with twine"
diff --git a/.github/workflows/basic-tests.yml 
b/.github/workflows/basic-tests.yml
index 628f42b8369..b1e4ccea65a 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -66,7 +66,7 @@ on:  # yamllint disable-line rule:truthy
         type: string
       uv-version:
         description: 'uv version to use'
-        default: "0.9.12"  # Keep this comment to allow automatic replacement 
of uv version
+        default: "0.9.13"  # Keep this comment to allow automatic replacement 
of uv version
         type: string
       platform:
         description: 'Platform for the build - linux/amd64 or linux/arm64'
diff --git a/.github/workflows/ci-image-checks.yml 
b/.github/workflows/ci-image-checks.yml
index 6bd4d16d985..f4e302ab170 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -157,7 +157,7 @@ jobs:
       - name: "Static checks"
         run: prek --all-files --show-diff-on-failure --color always
         env:
-          VERBOSE: "false"
+          VERBOSE: "true"
           SKIP: ${{ inputs.skip-prek-hooks }}
           COLUMNS: "202"
           SKIP_GROUP_OUTPUT: "true"
diff --git a/.github/workflows/release_dockerhub_image.yml 
b/.github/workflows/release_dockerhub_image.yml
index d5ab9e38ac8..f561beea344 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -58,7 +58,7 @@ jobs:
       AIRFLOW_VERSION: ${{ github.event.inputs.airflowVersion }}
       AMD_ONLY: ${{ github.event.inputs.amdOnly }}
       LIMIT_PYTHON_VERSIONS: ${{ github.event.inputs.limitPythonVersions }}
-      UV_VERSION: "0.9.12"  # Keep this comment to allow automatic replacement 
of uv version
+      UV_VERSION: "0.9.13"  # Keep this comment to allow automatic replacement 
of uv version
     if: contains(fromJSON('[
       "ashb",
       "eladkal",
diff --git a/Dockerfile b/Dockerfile
index ff432cde879..288926cccb1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -56,7 +56,7 @@ ARG AIRFLOW_PYTHON_VERSION="3.12.12"
 # Also use `force pip` label on your PR to swap all places we use `uv` to `pip`
 ARG AIRFLOW_PIP_VERSION=25.3
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main";
-ARG AIRFLOW_UV_VERSION=0.9.12
+ARG AIRFLOW_UV_VERSION=0.9.13
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow";
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 11186d669e8..54f6b358d1d 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1264,7 +1264,7 @@ function handle_mount_sources() {
 
 function determine_airflow_to_use() {
     USE_AIRFLOW_VERSION="${USE_AIRFLOW_VERSION:=""}"
-    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST}" 
!= "true" ]]; then
+    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST=}" 
!= "true" ]]; then
         export PYTHONPATH=${AIRFLOW_SOURCES}
         echo
         echo "${COLOR_BLUE}Using airflow version from current 
sources${COLOR_RESET}"
@@ -1331,7 +1331,7 @@ function check_boto_upgrade() {
 function check_upgrade_sqlalchemy() {
     # The python version constraint is a TEMPORARY WORKAROUND to exclude all 
FAB tests. Is should be removed once we
     # upgrade FAB to v5 (PR #50960).
-    if [[ "${UPGRADE_SQLALCHEMY}" != "true" || ${PYTHON_MAJOR_MINOR_VERSION} 
!= "3.13" ]]; then
+    if [[ "${UPGRADE_SQLALCHEMY=}" != "true" || ${PYTHON_MAJOR_MINOR_VERSION} 
!= "3.13" ]]; then
         return
     fi
     echo
@@ -1695,7 +1695,7 @@ COPY --from=scripts common.sh install_packaging_tools.sh 
install_additional_depe
 # Also use `force pip` label on your PR to swap all places we use `uv` to `pip`
 ARG AIRFLOW_PIP_VERSION=25.3
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main";
-ARG AIRFLOW_UV_VERSION=0.9.12
+ARG AIRFLOW_UV_VERSION=0.9.13
 ARG AIRFLOW_PREK_VERSION="0.2.19"
 
 # UV_LINK_MODE=copy is needed since we are using cache mounted from the host
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index c24cdd1d878..2e6eb469532 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -443,7 +443,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_DEPS`         |                             | Additional 
apt dev dependencies installed in the first part of the image                   
                       |
 | `ADDITIONAL_DEV_APT_ENV`          |                             | Additional 
env variables defined when installing dev deps                                  
                       |
 | `AIRFLOW_PIP_VERSION`             | `25.3`                      | `pip` 
version used.                                                                   
                            |
-| `AIRFLOW_UV_VERSION`              | `0.9.12`                    | `uv` 
version used.                                                                   
                             |
+| `AIRFLOW_UV_VERSION`              | `0.9.13`                    | `uv` 
version used.                                                                   
                             |
 | `AIRFLOW_PREK_VERSION`            | `0.2.19`                    | `prek` 
version used.                                                                   
                           |
 | `AIRFLOW_USE_UV`                  | `true`                      | Whether to 
use UV for installation.                                                        
                       |
 | `PIP_PROGRESS_BAR`                | `on`                        | Progress 
bar for PIP installation                                                        
                         |
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index 02d51c3713e..24349289617 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -54,7 +54,7 @@ dependencies = [
     "google-auth-httplib2>=0.2.0",
     "google-auth-oauthlib>=1.2.0",
     "gitpython>=3.1.40",
-    "hatch>=1.15.1",
+    "hatch>=1.16.0",
     "inputimeout>=1.0.4",
     "jinja2>=3.1.5",
     "jsonschema>=4.19.1",
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index b958b6d2d54..c593103a7f1 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -246,12 +246,12 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.3"
-AIRFLOW_UV_VERSION = "0.9.12"
+AIRFLOW_UV_VERSION = "0.9.13"
 AIRFLOW_USE_UV = False
 GITPYTHON_VERSION = "3.1.45"
 RICH_VERSION = "14.2.0"
 PREK_VERSION = "0.2.19"
-HATCH_VERSION = "1.15.1"
+HATCH_VERSION = "1.16.0"
 PYYAML_VERSION = "6.0.3"
 
 # prek environment and this is done with node, no python installation is 
needed.
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index ba96bdb650e..ad0cc1c8d83 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -218,7 +218,7 @@ if MYSQL_INNOVATION_RELEASE:
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.3"
-UV_VERSION = "0.9.12"
+UV_VERSION = "0.9.13"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py 
b/dev/breeze/src/airflow_breeze/params/shell_params.py
index 8bf944156ab..08f4b565428 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -86,13 +86,27 @@ from airflow_breeze.utils.path_utils import (
     GENERATED_DOCKER_COMPOSE_ENV_PATH,
     GENERATED_DOCKER_ENV_PATH,
     GENERATED_DOCKER_LOCK_PATH,
-    SCRIPTS_CI_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_BASE_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_BASE_PORTS_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_CI_TESTS_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_DEBUG_PORTS_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_DOCKER_SOCKET_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_ENABLE_TTY_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_FILES_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_FORWARD_CREDENTIALS_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_CELERY_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_KERBEROS_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_ALL_SOURCES_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_MYPY_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_PROVIDERS_AND_TESTS_SOURCES_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_REMOVE_SOURCES_PATH,
+    SCRIPTS_CI_DOCKER_COMPOSE_TESTS_SOURCES_PATH,
 )
 from airflow_breeze.utils.run_utils import commit_sha, run_command
 from airflow_breeze.utils.shared_options import get_forced_answer, get_verbose
 
-DOCKER_COMPOSE_DIR = SCRIPTS_CI_PATH / "docker-compose"
-
 
 def generated_socket_compose_file(local_socket_path: str) -> str:
     return f"""
@@ -326,15 +340,15 @@ class ShellParams:
             # When running scripts, we do not want to mount the volume to make 
sure that the
             # sqlite database is not persisted between runs of the script and 
that the
             # breeze database is not cleaned accidentally
-            backend_docker_compose_file = DOCKER_COMPOSE_DIR / 
f"backend-{backend}-no-volume.yml"
+            backend_docker_compose_file = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
f"backend-{backend}-no-volume.yml"
         else:
-            backend_docker_compose_file = DOCKER_COMPOSE_DIR / 
f"backend-{backend}.yml"
+            backend_docker_compose_file = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
f"backend-{backend}.yml"
         if backend in ("sqlite", "none") or not self.forward_ports:
             return [backend_docker_compose_file]
         if self.project_name == "prek":
             # do not forward ports for prek - to not clash with running 
containers from breeze
             return [backend_docker_compose_file]
-        return [backend_docker_compose_file, DOCKER_COMPOSE_DIR / 
f"backend-{backend}-port.yml"]
+        return [backend_docker_compose_file, SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
f"backend-{backend}-port.yml"]
 
     @cached_property
     def compose_file(self) -> str:
@@ -347,7 +361,7 @@ class ShellParams:
                 backend_files.extend(self.get_backend_compose_files(backend))
 
         if self.executor == CELERY_EXECUTOR:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
"integration-celery.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_CELERY_PATH)
             if self.use_airflow_version:
                 current_extras = self.airflow_extras
                 if "celery" not in current_extras.split(","):
@@ -368,12 +382,12 @@ class ShellParams:
                         ",".join(current_extras.split(",") + ["fab"]) if 
current_extras else "fab"
                     )
 
-        compose_file_list.append(DOCKER_COMPOSE_DIR / "base.yml")
+        compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_BASE_PATH)
         self.add_docker_in_docker(compose_file_list)
         compose_file_list.extend(backend_files)
-        compose_file_list.append(DOCKER_COMPOSE_DIR / "files.yml")
+        compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_FILES_PATH)
         if os.environ.get("CI", "false") == "true":
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "ci-tests.yml")
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_CI_TESTS_PATH)
 
         if self.use_airflow_version is not None and self.mount_sources not in 
USE_AIRFLOW_MOUNT_SOURCES:
             get_console().print(
@@ -390,23 +404,25 @@ class ShellParams:
             )
             sys.exit(1)
         if self.forward_ports and not self.project_name == "prek":
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "base-ports.yml")
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_BASE_PORTS_PATH)
         if self.debug_components and not self.project_name == "prek":
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "debug-ports.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_DEBUG_PORTS_PATH)
         if self.mount_sources == MOUNT_SELECTED:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "local.yml")
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_PATH)
         elif self.mount_sources == MOUNT_ALL:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
"local-all-sources.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_ALL_SOURCES_PATH)
         elif self.mount_sources == MOUNT_TESTS:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "tests-sources.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_TESTS_SOURCES_PATH)
         elif self.mount_sources == MOUNT_PROVIDERS_AND_TESTS:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
"providers-and-tests-sources.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_PROVIDERS_AND_TESTS_SOURCES_PATH)
         elif self.mount_sources == MOUNT_REMOVE:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "remove-sources.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_REMOVE_SOURCES_PATH)
         if self.forward_credentials:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
"forward-credentials.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_FORWARD_CREDENTIALS_PATH)
         if self.include_mypy_volume:
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "mypy.yml")
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_MYPY_PATH)
+        if self.tty == "enabled":
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_ENABLE_TTY_PATH)
         if "all-testable" in self.integration:
             if self.test_group == GroupOfTests.INTEGRATION_CORE:
                 integrations = TESTABLE_CORE_INTEGRATIONS
@@ -432,12 +448,12 @@ class ShellParams:
             integrations = self.integration
         for integration in integrations:
             get_console().print(f"[info]Adding integration compose file for 
{integration}[/]")
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
f"integration-{integration}.yml")
+            compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
f"integration-{integration}.yml")
         if "trino" in integrations and "kerberos" not in integrations:
             get_console().print(
                 "[warning]Adding `kerberos` integration as it is implicitly 
needed by trino",
             )
-            compose_file_list.append(DOCKER_COMPOSE_DIR / 
"integration-kerberos.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_KERBEROS_PATH)
         return os.pathsep.join([os.fspath(f) for f in compose_file_list])
 
     @cached_property
@@ -464,7 +480,7 @@ class ShellParams:
         return " ".join(get_suspended_provider_folders()).strip()
 
     def add_docker_in_docker(self, compose_file_list: list[Path]):
-        generated_compose_file = DOCKER_COMPOSE_DIR / 
"_generated_docker_in_docker.yml"
+        generated_compose_file = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"_generated_docker_in_docker.yml"
         unix_prefix = "unix://"
         if self.docker_host:
             if self.docker_host.startswith(unix_prefix):
@@ -477,7 +493,7 @@ class ShellParams:
                     # We are running on MacOS and the socket is the default 
"user" bound one
                     # We need to pretend that we are running on Linux and use 
the default socket
                     # in the VM instead - see 
https://github.com/docker/for-mac/issues/6545
-                    compose_file_list.append(DOCKER_COMPOSE_DIR / 
"docker-socket.yml")
+                    
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_DOCKER_SOCKET_PATH)
                     return
                 if socket_path.is_socket():
                     
generated_compose_file.write_text(generated_socket_compose_file(socket_path.as_posix()))
@@ -511,7 +527,7 @@ class ShellParams:
             # NOTE! Even if we are using "desktop-linux" context where 
"/var/run/docker.sock" is not used,
             # Docker engine works fine because "/var/run/docker.sock" is 
mounted at the VM and there
             # the /var/run/docker.sock is available. See 
https://github.com/docker/for-mac/issues/6545
-            compose_file_list.append(DOCKER_COMPOSE_DIR / "docker-socket.yml")
+            
compose_file_list.append(SCRIPTS_CI_DOCKER_COMPOSE_DOCKER_SOCKET_PATH)
 
     @cached_property
     def rootless_docker(self) -> bool:
diff --git a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py 
b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
index 4c402f5a7d6..40205a4ed9c 100644
--- a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
@@ -857,8 +857,6 @@ def enter_shell(
     cmd.extend(["run", "--service-ports", "--rm"])
     if shell_params.tty == "disabled":
         cmd.append("--no-TTY")
-    elif shell_params.tty == "enabled":
-        cmd.append("--tty")
     cmd.append("airflow")
     cmd_added = shell_params.command_passed
     if cmd_added is not None:
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py 
b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index ed72286c27b..2a04c30c0d2 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -293,7 +293,28 @@ DOCS_DIR = AIRFLOW_ROOT_PATH / "docs"
 SCRIPTS_CI_PATH = AIRFLOW_ROOT_PATH / "scripts" / "ci"
 SCRIPTS_DOCKER_PATH = AIRFLOW_ROOT_PATH / "scripts" / "docker"
 SCRIPTS_CI_DOCKER_COMPOSE_PATH = SCRIPTS_CI_PATH / "docker-compose"
+SCRIPTS_CI_DOCKER_COMPOSE_BASE_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"base.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_BASE_PORTS_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"base-ports.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_CI_TESTS_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"ci-tests.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_DEBUG_PORTS_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"debug-ports.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_DOCKER_SOCKET_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH 
/ "docker-socket.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_ENABLE_TTY_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"enable-tty.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_FILES_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"files.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_FORWARD_CREDENTIALS_PATH = (
+    SCRIPTS_CI_DOCKER_COMPOSE_PATH / "forward-credentials.yml"
+)
+SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_CELERY_PATH = 
SCRIPTS_CI_DOCKER_COMPOSE_PATH / "integration-celery.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_INTEGRATION_KERBEROS_PATH = (
+    SCRIPTS_CI_DOCKER_COMPOSE_PATH / "integration-kerberos.yml"
+)
+SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_ALL_SOURCES_PATH = 
SCRIPTS_CI_DOCKER_COMPOSE_PATH / "local-all-sources.yml"
 SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"local.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_MYPY_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"local.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_PROVIDERS_AND_TESTS_SOURCES_PATH = (
+    SCRIPTS_CI_DOCKER_COMPOSE_PATH / "providers-and-tests-sources.yml"
+)
+SCRIPTS_CI_DOCKER_COMPOSE_REMOVE_SOURCES_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH 
/ "remove-sources.yml"
+SCRIPTS_CI_DOCKER_COMPOSE_TESTS_SOURCES_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH 
/ "tests-sources.yml"
 GENERATED_DOCKER_COMPOSE_ENV_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"_generated_docker_compose.env"
 GENERATED_DOCKER_ENV_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / 
"_generated_docker.env"
 GENERATED_DOCKER_LOCK_PATH = SCRIPTS_CI_DOCKER_COMPOSE_PATH / "_generated.lock"
diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock
index 31a9221ae87..35a9a86e8b4 100644
--- a/dev/breeze/uv.lock
+++ b/dev/breeze/uv.lock
@@ -70,7 +70,7 @@ requires-dist = [
     { name = "google-api-python-client", specifier = ">=2.142.0" },
     { name = "google-auth-httplib2", specifier = ">=0.2.0" },
     { name = "google-auth-oauthlib", specifier = ">=1.2.0" },
-    { name = "hatch", specifier = ">=1.15.1" },
+    { name = "hatch", specifier = ">=1.16.0" },
     { name = "inputimeout", specifier = ">=1.0.4" },
     { name = "jinja2", specifier = ">=3.1.5" },
     { name = "jsonschema", specifier = ">=4.19.1" },
@@ -110,6 +110,101 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl";,
 hash = 
"sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size 
= 30181, upload-time = "2024-05-28T17:01:53.112Z" },
 ]
 
+[[package]]
+name = "backports-zstd"
+version = "1.1.0"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/ee/76/403d81c1b9264f6ee1c25b2f2ce892ed9930d1a0a1939ef26a01a95e644d/backports_zstd-1.1.0.tar.gz";,
 hash = 
"sha256:8ce84125e3094ddefbaa25306e8949965ce092b400a1fd63b5e6a5e932d2994f", size 
= 996020, upload-time = "2025-11-23T12:51:19.478Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/2f/bb/9f71f34b1c7ad957f36ca320bcdfef1836816af9a8f5d256debe5f12bad6/backports_zstd-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:f02ab91901b637fae5d27cc26f02874db3e5f98af481afafb86d6487a4287897", size 
= 435750, upload-time = "2025-11-23T12:49:03.092Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ae/9a/f064362e44419625b79e049dc532c7b7606bd072f230d2729460cf4f5da8/backports_zstd-1.1.0-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5805a215a3b048a10ca18dd5c525c737e004e59c92c21c44baa0c13083579dc1", size 
= 362145, upload-time = "2025-11-23T12:49:04.823Z" },
+    { url = 
"https://files.pythonhosted.org/packages/69/c7/e163febeb3504a00f3a7625d40a2d1a120298762393caebe618e96c48594/backports_zstd-1.1.0-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:777ff9a60664abfa7e5cbcb676ecbedf49bd567d6184e538b9dee09d4bbee292", size 
= 506045, upload-time = "2025-11-23T12:49:05.951Z" },
+    { url = 
"https://files.pythonhosted.org/packages/aa/a9/d28aa8f16a9fafd8e15220f3ac32fcd000589088f45c80df7f45839503cc/backports_zstd-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:27a40d9518019a6b6ad2df5f6c2dd6ce627af9396c929556188a67607ce12d57", size 
= 475659, upload-time = "2025-11-23T12:49:07.463Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a3/94/9c9b2aa30d34e83f244057c6bf7b2a493c7d60df1caa999160bf83b5a525/backports_zstd-1.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:a24e73d5d4b3c1b9c693f07081703db9e9398ce95576f1ed74892d6bd01adcb4", size 
= 581286, upload-time = "2025-11-23T12:49:09.095Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/6e/09f21da99977d3b220c8a4642fa1218b2b5d854fb2f00eb22dc38b02be3e/backports_zstd-1.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:097ea6090dfb60f4af3c09d816c6d64175bd94ead930e5089acd00ea2e5b8de8", size 
= 640931, upload-time = "2025-11-23T12:49:10.341Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/cb/d765b8f70e86e368d05632572e7eec3dd27d6bfb61c9c7867b3375b3f19e/backports_zstd-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:0495547f5b727d798ff317b6cc6158655926b7149739ab9a193e184d65e4bc8f", size 
= 491149, upload-time = "2025-11-23T12:49:11.524Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f2/1f/6ad1c8af282dc6ad464ff58ecfb29abaeeae6f745c45e5500723f8a0c1e2/backports_zstd-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:544494f7f1ba88f6500a5e14219b19718cc2aa4bcc563ce78d67aef3b8e54ed5", size 
= 481607, upload-time = "2025-11-23T12:49:12.659Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d8/0a/6f82529599e92af47bd483bf3c318bd14c01e5a00b9a736d9bc7ab1db3b0/backports_zstd-1.1.0-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:559fe9384dbd43cdacc2b4aa7e19199f064da7aec947c6461d4a7aadfb614568", size 
= 509552, upload-time = "2025-11-23T12:49:14.166Z" },
+    { url = 
"https://files.pythonhosted.org/packages/39/5a/87e4be4c18c920122949d45a9de7e253084af22ae50b3c0773e4d58aa30a/backports_zstd-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:6e7ffa9747051fd994f8070aefc8317af3ce485d9dbd175593c6df9d795d24ff", size 
= 585650, upload-time = "2025-11-23T12:49:15.379Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a4/4c/4afff28eb575631882d564b6c8b93f4d43e53f99c62ceb03f51b15400f9a/backports_zstd-1.1.0-cp310-cp310-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:27858ea429914fc67446112fd7797e821d18e7ce3d6cfa7b2e124547c6a4ca83", size 
= 631508, upload-time = "2025-11-23T12:49:16.89Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d0/8d/f2564d8fe96398bc15ccd4db605d448a8dc4d6dc4e1e3bc613c6f2306b87/backports_zstd-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:233f35525940b5153223909a4c9f554e27ae7f5bff5c946b9fe28b633cdd463a", size 
= 495209, upload-time = "2025-11-23T12:49:18.083Z" },
+    { url = 
"https://files.pythonhosted.org/packages/36/47/9eb4a27599af4501a79d9d80d6616a18b8cdf52683b1c711d403d247f6a2/backports_zstd-1.1.0-cp310-cp310-win32.whl";,
 hash = 
"sha256:be5723019ba1500cf727a6ba37a15e697a63f66314e3e7def52fd86c65249236", size 
= 288660, upload-time = "2025-11-23T12:49:19.553Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f1/e8/e3f70c4835338167d7039152b8cb1c4adae8c14fed7a184f2d860b0bb952/backports_zstd-1.1.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:c28905252c4273e7097baad10ca786ff8e5ab67807f428504c4fe3cbdecb135e", size 
= 313570, upload-time = "2025-11-23T12:49:20.706Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bc/bf/12f84454d23cd32a649adbc49983fed13ae2f60a75a6461e9db6e435d856/backports_zstd-1.1.0-cp310-cp310-win_arm64.whl";,
 hash = 
"sha256:bd2e69a69524161e20cad8245dcbacd9b825f83221c55b05bca0e506b7abddfd", size 
= 288773, upload-time = "2025-11-23T12:49:22.226Z" },
+    { url = 
"https://files.pythonhosted.org/packages/73/81/47935ce4c225681a2a962c69cdc061f721bc02c6b2d9806d0ba4d29a1454/backports_zstd-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:8b1f9ea3d2d3638af80fcd896dceba7ad5d902ce3e5b411a9b16e4cddd79c4ac", size 
= 435751, upload-time = "2025-11-23T12:49:23.738Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c1/36/85f89ea19338e7babfb91147ad3f4022c736c0bcbc1ebf83c90550f2722c/backports_zstd-1.1.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:bfa36e208619fd152c20bd6c9d0febcb18ac90bdd811421c6a01e450f4b1dd6d", size 
= 362143, upload-time = "2025-11-23T12:49:25.245Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6c/4f/f722122cbd44331245c674c9d3dac91df135d491348de7da5010980d346d/backports_zstd-1.1.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:9f43275263cfbd2e9096a8b333d15c2e96deb0a2df3751b15408155a03c57fab", size 
= 506044, upload-time = "2025-11-23T12:49:26.423Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e6/10/41d5088c35bbbd03a07e0f315566e06f915b0371700f568e8c3b26c68b40/backports_zstd-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:b1c6ae75c09f211b4f5439b0984bfb8b8d15975585e50b1dc658e9f9b94bd305", size 
= 475657, upload-time = "2025-11-23T12:49:28.056Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d1/14/324476e8eef484779c390d0b9c83b7906c883ae82b7de4651a86463fbb71/backports_zstd-1.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:2d38c6df19d5b828cb3d1c1ab62a2c61dd433ad00523d577e303f4552fa002b0", size 
= 581283, upload-time = "2025-11-23T12:49:29.536Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/01/4f61e96f52dd391834dd457ee970b57d2818609677a786f94840da359f02/backports_zstd-1.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:64d5c359a04c26a36eaad82386a873ff1af9e12f896af4748cff1f35e2550af3", size 
= 640975, upload-time = "2025-11-23T12:49:30.916Z" },
+    { url = 
"https://files.pythonhosted.org/packages/57/79/69b97eea66a26f52975ae78d7413ca79efee51d2349a33ddfef9b196302c/backports_zstd-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:773cec5a3ff8c81e03f3db0c7df1d2f7c3cf820262138ec752c46fd25b532e85", size 
= 491188, upload-time = "2025-11-23T12:49:32.134Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9d/4d/5d402a41c29121f387be38e3a507ba6c3d9c5304356f659beba8bcdadf80/backports_zstd-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:be97026835fb5cf0cb96e8c1c6ee72e53816f0ff34c368546ea6e53962476216", size 
= 481610, upload-time = "2025-11-23T12:49:33.331Z" },
+    { url = 
"https://files.pythonhosted.org/packages/85/9d/25dceef8e97fb815259b3c946236ff6e696bb5f461faa8303dca5d98e4e8/backports_zstd-1.1.0-cp311-cp311-musllinux_1_2_i686.whl";,
 hash = 
"sha256:6fb2b381a404040c9dbfd258f3bcd740595e2aca088d822fb241942440fce509", size 
= 509555, upload-time = "2025-11-23T12:49:34.675Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/74/fb0883e9dcc6333f33f3f90e1101498800b82b6437cfa110244c59d6a03e/backports_zstd-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:adac539e6fbcf72d70cd9f354ab5689e080b8621b4d268f2ba0f486c25dfd3f3", size 
= 585639, upload-time = "2025-11-23T12:49:36.033Z" },
+    { url = 
"https://files.pythonhosted.org/packages/88/ad/6db9224a34d0ef6ce553c9605649a522b485efc0aa098b1c78b4bcdaad5a/backports_zstd-1.1.0-cp311-cp311-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:4298631dc91b4dafc20b6a7eb7edb028c341bc2e3b77a128c7ced5148aaa215c", size 
= 631550, upload-time = "2025-11-23T12:49:37.543Z" },
+    { url = 
"https://files.pythonhosted.org/packages/87/a5/383d1d9b2281854b2809b83ec6dfe9092f3a8b9700055340176b29230b1c/backports_zstd-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:62451464559525ff093f7d684bf88381722d7b3759693ea842e94b41c01f306b", size 
= 495212, upload-time = "2025-11-23T12:49:38.814Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cd/75/305ac0bf93de4a771d33926e27da401a807294c3858b133d3611d0b6be49/backports_zstd-1.1.0-cp311-cp311-win32.whl";,
 hash = 
"sha256:b20309c15d4afa2919517669366da60dd30955dbc0784924ae79acb49f158ef6", size 
= 288753, upload-time = "2025-11-23T12:49:39.972Z" },
+    { url = 
"https://files.pythonhosted.org/packages/50/f3/8887a706bef88307a55719b4d0cf73600c6703e3cfb5926f97441c8ffc3b/backports_zstd-1.1.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:9e3df9c43e9f4ed970cd8f48df41736c5697fed06523e463661788762c95d454", size 
= 313698, upload-time = "2025-11-23T12:49:41.202Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3c/ea/78f627df9b3765ac7036da11951db7c91eb77e6014f8819dbf575dc57f8e/backports_zstd-1.1.0-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:b5c43022248bd8711f606a481547dbcf4541b617446a07a359aad28ebf77973b", size 
= 288897, upload-time = "2025-11-23T12:49:42.306Z" },
+    { url = 
"https://files.pythonhosted.org/packages/48/98/1426b121772c4f05735ad7c9542dd333c18720179a549dd2e22e6be386df/backports_zstd-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:63e1ba127129c7c4786147f873eef63f90694a13c5459ca0e970cad1bd52cf6c", size 
= 436062, upload-time = "2025-11-23T12:49:43.409Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4b/01/c851ce0cbe2611ce33232ecaa21f237b9b3c52964f01c9e96cabc7f60b0f/backports_zstd-1.1.0-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:37b30c0fb5d118344706ed9e26cb2f43584c0012565254a819485bab180f1652", size 
= 362213, upload-time = "2025-11-23T12:49:44.886Z" },
+    { url = 
"https://files.pythonhosted.org/packages/af/c0/99596faafe038ba03695569adf0ec1f4e3f955c3156618b0f11deb3b9905/backports_zstd-1.1.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:b8b77fae55a245e5b61fc599b641343da2580ebc9fcb20a77822dcca9126bddc", size 
= 506466, upload-time = "2025-11-23T12:49:46.085Z" },
+    { url = 
"https://files.pythonhosted.org/packages/eb/84/b6410324c8f495bd6fd1c8ab8b3fbb70120ea2b06ee004db4549e0eb58b0/backports_zstd-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:34c9c425d113071c90a241f04fb12be46c83e7028a090aca4e72fe9f5fe11fb6", size 
= 476287, upload-time = "2025-11-23T12:49:47.327Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c1/7a/280f37869fb37dc16d2ca093734a6cac564a551d7fad8b55d0807d19f74c/backports_zstd-1.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:33a7c9c2bd44b5bbfba2c78411feb2e0074406654f33e6b0317e307710c7fe57", size 
= 581744, upload-time = "2025-11-23T12:49:48.907Z" },
+    { url = 
"https://files.pythonhosted.org/packages/72/32/828ce97c1c18d3735ca42b65819241702df101cfd13a4b88bd77ca1f03bd/backports_zstd-1.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:3baf8b13aa90ed5a03503063be670d8cca22d5d81aab4cc499741f013dba4351", size 
= 640474, upload-time = "2025-11-23T12:49:50.184Z" },
+    { url = 
"https://files.pythonhosted.org/packages/06/ad/5ba858ffc307ed2b51693d87642f9e9dd6013579840981ac364c6e24c38c/backports_zstd-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:fe522558c4d56d9eb2294592fec5ac94b95c82ff22cf1f91d1bf589fe567f391", size 
= 494260, upload-time = "2025-11-23T12:49:51.765Z" },
+    { url = 
"https://files.pythonhosted.org/packages/fc/4c/3b2f67ae51d19716af5d9bd2c074b9a5ba03a7f6ef4c509adaee3e1f6958/backports_zstd-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:4f459c3b43d382aa2ab44199b84ec86a33f79094701bd3bbf536d4b6e687e744", size 
= 482320, upload-time = "2025-11-23T12:49:52.943Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c9/e0/05f1d8a8552254ab4ed447ad2950c079f15bd2c74125a8a15fa9f0eb28ef/backports_zstd-1.1.0-cp312-cp312-musllinux_1_2_i686.whl";,
 hash = 
"sha256:b53841a136c326686d49f1b2b96dc5acdffb2e8e422a5298f36b95a7d927b69a", size 
= 509894, upload-time = "2025-11-23T12:49:54.149Z" },
+    { url = 
"https://files.pythonhosted.org/packages/62/0d/15dc13edf653ba14f61f9ce0a4119f79647750a9525659b410be124b5d71/backports_zstd-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:d64a172db16fa5e3aed875776537103cae0f2dd0e614c9658fce62ebd5211847", size 
= 586126, upload-time = "2025-11-23T12:49:55.363Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e8/c9/9ece6a0c684223e466188d7e8db74462075391f43be244f46ef46ce1f07a/backports_zstd-1.1.0-cp312-cp312-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:de5d7cdea31085b3d21c7f670f385ec666b8595c72c107efa50e29f3cc4e72a1", size 
= 630934, upload-time = "2025-11-23T12:49:57.115Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d9/da/9c704e8f11cc4cb17adae9693d97903fe9dc5ea7e8182d044c00cf70fb1d/backports_zstd-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:8dc11ddef5529aff9fa18565a0f2a98f9f5cff83751e4357c219ae20c160bc1f", size 
= 498755, upload-time = "2025-11-23T12:49:58.313Z" },
+    { url = 
"https://files.pythonhosted.org/packages/45/ac/843bc205463fce6aff56d2d6f8733635b0c8786c22d148978ecfed97645f/backports_zstd-1.1.0-cp312-cp312-win32.whl";,
 hash = 
"sha256:8e0376da95159b39f538b6d7edafc211f4b9e7f5581ad4b2476b0f3c890bb25f", size 
= 288892, upload-time = "2025-11-23T12:49:59.569Z" },
+    { url = 
"https://files.pythonhosted.org/packages/43/aa/dbee1f51bf3af6017e1b48b93edf9c60f74a57c7d34940a728789365355e/backports_zstd-1.1.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:8067a95f560c503d683b9e18de44749eefe0a4ad6da318ff9eabb4afe47e79c5", size 
= 313910, upload-time = "2025-11-23T12:50:00.678Z" },
+    { url = 
"https://files.pythonhosted.org/packages/66/8f/cc99ca99a2e37a9a9f3c6053cd0a7bd255c465be24d1d931fe062dca55bd/backports_zstd-1.1.0-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:f8f2a975dd25b4b3ac901ce47d04881d43dcde18037d2d1513b8a5f4fededdd8", size 
= 289014, upload-time = "2025-11-23T12:50:02.226Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bb/35/2a50f48bd16a4677b1f17f0ab0d173f9225114100326e67fdd65b74f9586/backports_zstd-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:4a18668f1373fe9e5e0349e3fe5cc8148cbef29eccbb9998993eeb0e90d35638", size 
= 435551, upload-time = "2025-11-23T12:50:03.881Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0e/ee/10ddf48f87fe8aeedd4dca1a18061159eab006ede693ede00ba80946ba3a/backports_zstd-1.1.0-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:3adf32f6e58323505c581a4d1e5b6404e98806c4cf01c54049c372642cf7ec6d", size 
= 361827, upload-time = "2025-11-23T12:50:04.999Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4c/56/5d98bd5a7b0a5d203f705f3200b467af6a6d34fa6d9aa2b9c9538369dae8/backports_zstd-1.1.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:b71f45d12274021e1d7b689ac98faff94874cf6c7bac2f0ab14a3714d4047a6c", size 
= 505739, upload-time = "2025-11-23T12:50:06.496Z" },
+    { url = 
"https://files.pythonhosted.org/packages/22/16/5a3967e957fc5662eaaeca4ace5eb0646d1e174e70d149fe023092165047/backports_zstd-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:bd98ea2600335bd941bba347e168462c37a5ed1bdc21cbee2dce82871c3719b3", size 
= 475946, upload-time = "2025-11-23T12:50:07.737Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7d/f6/71c99d08987df24e09b93fde4a2d3aeee8075563374be88572a1f265f9a5/backports_zstd-1.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:83143a2a381d95276a8df5f0b6231f936595d3aeb15a55f91831a111d78297f4", size 
= 581425, upload-time = "2025-11-23T12:50:09.091Z" },
+    { url = 
"https://files.pythonhosted.org/packages/79/a8/8788b74b53961b3d3dfb08eb4632d07c846afbc2f677752d9f2ae0d6b843/backports_zstd-1.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:7caf0d5c2954eea1c160922207afd87cd83cef7f5081b5a7b12d4a646a78c1a2", size 
= 642271, upload-time = "2025-11-23T12:50:10.329Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f1/08/211d882fb5fcee5014bac84c64acf4c6f5c6df3a10e3bb5ed20409b5e54c/backports_zstd-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:222fb59203bb7c8104d049c587cd60bee6e8c1cd6d34c4a87158b8393dc8113a", size 
= 490893, upload-time = "2025-11-23T12:50:11.623Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7c/8b/8a2625657cc9965c62a56fb2d97ad4cdd31e8cbdb6aad493375c337ac3fe/backports_zstd-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:d74065d6b151443b25f3005ae96dac1d896ce616c56595c18c7dfbea77b73a5a", size 
= 481704, upload-time = "2025-11-23T12:50:12.896Z" },
+    { url = 
"https://files.pythonhosted.org/packages/56/ba/f3b225722e3f1544a1c8cdedc92a35650f6b4ce0ee1444db949240c40efa/backports_zstd-1.1.0-cp313-cp313-musllinux_1_2_i686.whl";,
 hash = 
"sha256:bf5aa4431001eca56bac39e22e9c814075008d9be7317271e5f8bff21533086d", size 
= 509295, upload-time = "2025-11-23T12:50:14.409Z" },
+    { url = 
"https://files.pythonhosted.org/packages/93/0e/2f1335f7cf06de3140612ac72bb0735c4d8e973f15678f5e62ba752a16b0/backports_zstd-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:8c21cbeeba96d4b15e42ace21fd71f0bf2c431247ce66e82409c0f45dc7d7b4b", size 
= 585856, upload-time = "2025-11-23T12:50:15.595Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ac/6d/0001f8c654672d5ac309f315919b4d0be26c1687b46b2c9438bff4d16895/backports_zstd-1.1.0-cp313-cp313-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:79ab438599cedf19cce056147a26c64167bf83d05609b4481ffadf9330a322cf", size 
= 632636, upload-time = "2025-11-23T12:50:16.855Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6f/9a/5f1835d53ce4b66e445aeca019c516c3989d74269e96c58295b8cd629421/backports_zstd-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:a8389d1edc351af4c5e6cef9fcd41f0795d7e639becfb0f331cec67aef3eefa3", size 
= 495191, upload-time = "2025-11-23T12:50:19.015Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6b/f0/82b912cd9bec18cec86466300372ad2913febe4c7066eb6a6721eada9777/backports_zstd-1.1.0-cp313-cp313-win32.whl";,
 hash = 
"sha256:f862567e43a989be9c0d1a04c9d3068a8544a1a48c908635ecaffcb896f2c1b1", size 
= 288529, upload-time = "2025-11-23T12:50:20.234Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d7/07/182dc5e7c17206fc07f30c3786317fa82f18b124f037a5b8dbb73457a341/backports_zstd-1.1.0-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:2e93b0a04f624ebe5b4301ec4997b353db561b82e7e21b42c84c8b30c53218a8", size 
= 313745, upload-time = "2025-11-23T12:50:21.845Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d3/f7/3418b0e3c15865c24fc390d57e33e141ea8f7347876e4a1feb2942e5abc7/backports_zstd-1.1.0-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:47ed787d85ea29776bc7a54825dd2bd6431a1497bb120d843f4dbacabb4f0d65", size 
= 288762, upload-time = "2025-11-23T12:50:23.114Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c8/7c/7f62db771263bf5596489c2a5574278ebf4095980f6ee01305b7989ca78e/backports_zstd-1.1.0-cp313-cp313t-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:01e488a5f1b008643a375936b655f383e92bd02b6b7830c4f4489eb9ede2661d", size 
= 436239, upload-time = "2025-11-23T12:50:24.651Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/1b/b336683e6e470ddc4f3665588327cef4c96da876469ad3640e3af6d0c502/backports_zstd-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:feef6c896d58f93e8fb9c900eb5b0813580a3a689a7bab53a82d7980599952bb", size 
= 362524, upload-time = "2025-11-23T12:50:25.892Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a0/23/e0497e863e37f7c659ee5037a743809d82270b84090fa4c7d3564312d4d4/backports_zstd-1.1.0-cp313-cp313t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:91c741b17240469f414786051dadc24372a2270c7664908159d19075a6e58455", size 
= 507685, upload-time = "2025-11-23T12:50:27.497Z" },
+    { url = 
"https://files.pythonhosted.org/packages/be/cc/fa3d8656e0202030304c7d9de8da3e02157812ab04a5d726314073b04e61/backports_zstd-1.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:ef36d898fc5b592b9822a1b2c90d41c3fc4b684579ef558e6b08b53a747ee542", size 
= 475585, upload-time = "2025-11-23T12:50:28.834Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6c/21/c6effc30caef1dd8db49a962e554601f1ea5782218f38e16013f719a5711/backports_zstd-1.1.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:37cc049f855654f76fd145c32f3818848848c0128940f2e0a2e0f5597e3658a9", size 
= 581008, upload-time = "2025-11-23T12:50:30.052Z" },
+    { url = 
"https://files.pythonhosted.org/packages/18/d2/bf2f74d68fde7884295138fe0ac8049031d8061346c395a61ebc256dd470/backports_zstd-1.1.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:d30414d5d15ff358a1cbb88b293a108a2eebaed6ccf034176e2a4ffcc80672df", size 
= 639999, upload-time = "2025-11-23T12:50:31.29Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e9/63/ea63603b691c54a6af0259b4c74c218cc9ba14985bd18ecd629d735c81ec/backports_zstd-1.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:747c341023725ea83e5ab874325e85dc89d9008626bbbc329c40426bedd03ecb", size 
= 494888, upload-time = "2025-11-23T12:50:32.627Z" },
+    { url = 
"https://files.pythonhosted.org/packages/55/c0/0a33c6036f8350954cb9f99363710c4e6589ba72e38dfe181a117c983fc2/backports_zstd-1.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:05b5d4f23b22f67b64825537e9c4d2e6a38914e924794803ee2c4f7a9715b46d", size 
= 482069, upload-time = "2025-11-23T12:50:33.862Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dc/40/4a955634f174f569aa8a03433148818528736ec66d5baa4bce2f535899ad/backports_zstd-1.1.0-cp313-cp313t-musllinux_1_2_i686.whl";,
 hash = 
"sha256:284d91e68e67ee7b8d2c58f26032bb15e4ed6ec9f2b95121af0b9c260741e497", size 
= 511445, upload-time = "2025-11-23T12:50:35.09Z" },
+    { url = 
"https://files.pythonhosted.org/packages/19/bf/8d99e2fb714e908b0282a432f9216968db46ed5b6ec42bdc9df5b0ffbea9/backports_zstd-1.1.0-cp313-cp313t-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:9eb74ca6f9afa8d92eb268dff951d901ef3366a240ca358d1503da9a4355eab5", size 
= 585581, upload-time = "2025-11-23T12:50:36.745Z" },
+    { url = 
"https://files.pythonhosted.org/packages/14/9f/768d64b30e80b32e262393caf2784f5fd43b45e6ab8e2a44c146a550c607/backports_zstd-1.1.0-cp313-cp313t-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:b3bef8f715a4f8135709846179fb748d4ec5619282a8858cdeaf90ab9a3c1cd9", size 
= 630606, upload-time = "2025-11-23T12:50:37.937Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cd/69/41c3f1d2f97cb156e689e36f3ff8ddb9b1140f667394ce0b3d51f0a96012/backports_zstd-1.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:aba8cb745d48e66d5e9f007cbf6871e3a227b2812a81c99916de3f8edc2cfaa1", size 
= 499515, upload-time = "2025-11-23T12:50:39.16Z" },
+    { url = 
"https://files.pythonhosted.org/packages/68/92/bb10b678aa8038172047adfd748b73b410c34aa8fefac4768128d79dbc2d/backports_zstd-1.1.0-cp313-cp313t-win32.whl";,
 hash = 
"sha256:d13e6406a50051f2bdd5047dc68e79e398c4d4bf65de910a1cd02e2d93f6d346", size 
= 289476, upload-time = "2025-11-23T12:50:40.365Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b6/75/f1763f8f1cee20b2a836c1aa27a545cb1ae053bc1e282716f5062b9f6169/backports_zstd-1.1.0-cp313-cp313t-win_amd64.whl";,
 hash = 
"sha256:029388257045a1bd091407ed4359899bb07ddac786ebd240ce6985b82da5729b", size 
= 314843, upload-time = "2025-11-23T12:50:41.519Z" },
+    { url = 
"https://files.pythonhosted.org/packages/44/18/43e36a5a0313a932827ef7b601e673cfec64838458cbb44c452604ac71cc/backports_zstd-1.1.0-cp313-cp313t-win_arm64.whl";,
 hash = 
"sha256:e005d77a72ba6cd1ad85f46dbc0620922e7b46cb90235c4874d16ab1839b4994", size 
= 289399, upload-time = "2025-11-23T12:50:42.629Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6a/80/c08720ce3d7c446b5f91c2c894e677b673d87c4e9c7dd6f5c36303baaee8/backports_zstd-1.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:4d379e9c157e4b18df8852defe1d5da8888ba8ffb4d7d9410428b3245cf8216a", size 
= 409859, upload-time = "2025-11-23T12:51:04.504Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8f/f1/6220850b09a52cb07854d098307d71d9b330f4d9b49c2fda86c960c7df00/backports_zstd-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl";,
 hash = 
"sha256:79b29d1c66f9bd2bedb87551b303e53f96364a641d30251e9f4e15bf5d84699e", size 
= 339376, upload-time = "2025-11-23T12:51:05.677Z" },
+    { url = 
"https://files.pythonhosted.org/packages/90/bf/0e6dfe1467dc228916a1715fc75421bafbb5dec4cf306c2395e45d8ef589/backports_zstd-1.1.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:154870d0e0f817159671ffc8b0e39d70ca294542affe6df00d95ef135a2ceef5", size 
= 420422, upload-time = "2025-11-23T12:51:06.934Z" },
+    { url = 
"https://files.pythonhosted.org/packages/68/9b/85dc1f5dc66c22f691bb60ec739e4be17c53dc670dcfabdf16ff194aec44/backports_zstd-1.1.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:5f174d8c93bd2682932ecb736e8f03612c162ec6a182c4293a663165f8ffbf5a", size 
= 393966, upload-time = "2025-11-23T12:51:08.247Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b6/23/1a375ea5e1e50741b80f9882c45a13c3b1b051985ae40eae44a34aa4e9e4/backports_zstd-1.1.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:b1bf548087476e6ce997c2697072c67193b07e5a36d4eede2b582e7bc7324c2d", size 
= 413928, upload-time = "2025-11-23T12:51:09.353Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3d/e0/687326aa8026b28251651add1e87931edbb0bc5bf563776cca6f81f35987/backports_zstd-1.1.0-pp310-pypy310_pp73-win_amd64.whl";,
 hash = 
"sha256:2a278c276e722399fbc769d1ae318a58578e20086bd09abcffe9af4b1daaf50c", size 
= 299788, upload-time = "2025-11-23T12:51:10.852Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f7/16/ce8d770a7129540520261694b0e83ec61684ab734f671e4eff652c040a9f/backports_zstd-1.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:06cef3f3b690221fd55d95cfb0316b914ce72063b99578b309205c9f73ce0bab", size 
= 409754, upload-time = "2025-11-23T12:51:12.084Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ef/c3/cbfdd61516d0a8448ad9194e34ffd434ac735ed1a89257f77407dbdbe0f1/backports_zstd-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl";,
 hash = 
"sha256:55446414f5deda38a4b8de22a0f3f93bacc1a8c4fe2205a0bace0dc55dbf9c90", size 
= 339289, upload-time = "2025-11-23T12:51:13.407Z" },
+    { url = 
"https://files.pythonhosted.org/packages/97/7f/5e65b583abf56f7e3c54835a707cdd159e47b73f4b8548082debc630baae/backports_zstd-1.1.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:f1524c54ec491d80068598ba4328b82c403b99a04c0db6326a5cc8f05565de87", size 
= 420422, upload-time = "2025-11-23T12:51:14.553Z" },
+    { url = 
"https://files.pythonhosted.org/packages/52/76/14349136c395f94fbd2af663301c2d661da9109fdf74692fe5095808cb9d/backports_zstd-1.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:fbcbb091fede530d096e32f3409056c59dc7b5e6cc9bf39131c7961eaaf8f475", size 
= 393965, upload-time = "2025-11-23T12:51:15.646Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c1/5b/fa580166cdf945be0b3ca1dbf8b23bc1370087707fa825b764d7e98b9a3c/backports_zstd-1.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:c5ac888007be1724efaa565f69ba64ce0c0c0e135d7f22830565399ff76465f1", size 
= 413929, upload-time = "2025-11-23T12:51:16.75Z" },
+    { url = 
"https://files.pythonhosted.org/packages/aa/f3/650db1631d75c3f6ad46b09dfee2a761b2678b1e2e0004d90258020801c3/backports_zstd-1.1.0-pp311-pypy311_pp73-win_amd64.whl";,
 hash = 
"sha256:08f66e228821a87ba7c74170b6b173cf249eeface98c0951c0da7db680b887d5", size 
= 299785, upload-time = "2025-11-23T12:51:17.969Z" },
+]
+
 [[package]]
 name = "black"
 version = "25.11.0"
@@ -151,30 +246,30 @@ wheels = [
 
 [[package]]
 name = "boto3"
-version = "1.41.4"
+version = "1.41.5"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "botocore" },
     { name = "jmespath" },
     { name = "s3transfer" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/f6/93/c68f6f2439032a43493a46c0b0419f67611299f3bd5f271e0c97888af39f/boto3-1.41.4.tar.gz";,
 hash = 
"sha256:2c6b8d13df6beb9255d0c8cb60a7a2164f5270580ea5b921a65658a0c28e3223", size 
= 111594, upload-time = "2025-11-25T20:24:07.842Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/5b/81/450cd4143864959264a3d80f9246175a20de8c1e50ec889c710eaa28cdd9/boto3-1.41.5.tar.gz";,
 hash = 
"sha256:bc7806bee681dfdff2fe2b74967b107a56274f1e66ebe4d20dc8eee1ea408d17", size 
= 111594, upload-time = "2025-11-26T20:27:47.021Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/d8/0a/05bd0d6db8fc8c95ab196d62a32ac294124e4b89112d6001996b560e4713/boto3-1.41.4-py3-none-any.whl";,
 hash = 
"sha256:77d84b7ce890a9b0c6a8993f8de106d8cf8138f332a4685e6de453965e60cb24", size 
= 139343, upload-time = "2025-11-25T20:24:06.481Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3c/56/f47a80254ed4991cce9a2f6d8ae8aafbc8df1c3270e966b2927289e5a12f/boto3-1.41.5-py3-none-any.whl";,
 hash = 
"sha256:bb278111bfb4c33dca8342bda49c9db7685e43debbfa00cc2a5eb854dd54b745", size 
= 139344, upload-time = "2025-11-26T20:27:45.571Z" },
 ]
 
 [[package]]
 name = "botocore"
-version = "1.41.4"
+version = "1.41.5"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "jmespath" },
     { name = "python-dateutil" },
     { name = "urllib3" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/6c/ae/b71dc486eb10fb3821a4825329a25c7da9ed71e50a160b514cf612dcd280/botocore-1.41.4.tar.gz";,
 hash = 
"sha256:45c78f07b53a64cbe55e5d60297958f151bd4a2c6acb944a8bb65874bc2fd953", size 
= 14668045, upload-time = "2025-11-25T20:23:56.51Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/90/22/7fe08c726a2e3b11a0aef8bf177e83891c9cb2dc1809d35c9ed91a9e60e6/botocore-1.41.5.tar.gz";,
 hash = 
"sha256:0367622b811597d183bfcaab4a350f0d3ede712031ce792ef183cabdee80d3bf", size 
= 14668152, upload-time = "2025-11-26T20:27:38.026Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/f7/20/770d81d1cca878ff1ec0bddc25a19fbddb509607bfd134c853427f13ecf9/botocore-1.41.4-py3-none-any.whl";,
 hash = 
"sha256:7143ef845f1d1400dbbf05d999f8c5e8cfaecd6bd84cbfbe5fa0a40e3a9f6353", size 
= 14336743, upload-time = "2025-11-25T20:23:53.608Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl";,
 hash = 
"sha256:3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a", size 
= 14337008, upload-time = "2025-11-26T20:27:35.208Z" },
 ]
 
 [[package]]
@@ -644,9 +739,10 @@ wheels = [
 
 [[package]]
 name = "hatch"
-version = "1.15.1"
+version = "1.16.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
+    { name = "backports-zstd", marker = "python_full_version < '3.14'" },
     { name = "click" },
     { name = "hatchling" },
     { name = "httpx" },
@@ -655,6 +751,7 @@ dependencies = [
     { name = "packaging" },
     { name = "pexpect" },
     { name = "platformdirs" },
+    { name = "pyproject-hooks" },
     { name = "rich" },
     { name = "shellingham" },
     { name = "tomli-w" },
@@ -662,16 +759,15 @@ dependencies = [
     { name = "userpath" },
     { name = "uv" },
     { name = "virtualenv" },
-    { name = "zstandard" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/f8/30/a7f19d337df93fb15dec6892e9ae678acd4ae10ce03d02722f17c7fe513b/hatch-1.15.1.tar.gz";,
 hash = 
"sha256:444a78123c9837e8c9f5adfbf2b8b0a72139587eb49d6b368038b0521136fc43", size 
= 5189156, upload-time = "2025-10-16T20:35:54.616Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/4f/03/7fb64d1a85c84843890007b545dd64702ec3ace972df6fc3655badc1f152/hatch-1.16.1.tar.gz";,
 hash = 
"sha256:87df6a17a0f8dc6f9a8ae459b742cb32ccc844a79634f9072797a2e38af1280f", size 
= 5215833, upload-time = "2025-11-27T20:06:41.204Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/69/01/316ef533114e0de0649e2e925ae2f97dfe26fbe5358f678e84b2a5fa1407/hatch-1.15.1-py3-none-any.whl";,
 hash = 
"sha256:99dccb26b00226056142f89d6e286be61e2d7b5b5b4e6178ebbe9298c1bc45d9", size 
= 126295, upload-time = "2025-10-16T20:35:52.354Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b6/39/42d25fed23c4fd4eb3c4ff3f0a7f547ed0d4ad6a1efb0105da0f43768141/hatch-1.16.1-py3-none-any.whl";,
 hash = 
"sha256:c7c90d122f8fca602d10c9f2176027f935cc6071710d4aec2d94490f6c5ef697", size 
= 140600, upload-time = "2025-11-27T20:06:39.547Z" },
 ]
 
 [[package]]
 name = "hatchling"
-version = "1.27.0"
+version = "1.28.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "packaging" },
@@ -680,9 +776,9 @@ dependencies = [
     { name = "tomli", marker = "python_full_version < '3.11'" },
     { name = "trove-classifiers" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/8f/8a/cc1debe3514da292094f1c3a700e4ca25442489731ef7c0814358816bb03/hatchling-1.27.0.tar.gz";,
 hash = 
"sha256:971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6", size 
= 54983, upload-time = "2024-12-15T17:08:11.894Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/0b/8e/e480359492affde4119a131da729dd26da742c2c9b604dff74836e47eef9/hatchling-1.28.0.tar.gz";,
 hash = 
"sha256:4d50b02aece6892b8cd0b3ce6c82cb218594d3ec5836dbde75bf41a21ab004c8", size 
= 55365, upload-time = "2025-11-27T00:31:13.766Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl";,
 hash = 
"sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size 
= 75794, upload-time = "2024-12-15T17:08:10.364Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0d/a5/48cb7efb8b4718b1a4c0c331e3364a3a33f614ff0d6afd2b93ee883d3c47/hatchling-1.28.0-py3-none-any.whl";,
 hash = 
"sha256:dc48722b68b3f4bbfa3ff618ca07cdea6750e7d03481289ffa8be1521d18a961", size 
= 76075, upload-time = "2025-11-27T00:31:12.544Z" },
 ]
 
 [[package]]
@@ -1324,6 +1420,15 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl";,
 hash = 
"sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size 
= 113890, upload-time = "2025-09-21T04:11:04.117Z" },
 ]
 
+[[package]]
+name = "pyproject-hooks"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz";,
 hash = 
"sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size 
= 19228, upload-time = "2024-09-29T09:24:13.293Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl";,
 hash = 
"sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size 
= 10216, upload-time = "2024-09-29T09:24:11.978Z" },
+]
+
 [[package]]
 name = "pytest"
 version = "9.0.1"
@@ -1927,28 +2032,28 @@ wheels = [
 
 [[package]]
 name = "uv"
-version = "0.9.12"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/1b/1f/87b5eb5e7107625e9ba407845e8c3bb2853008dd9d52c9082028ce7a0421/uv-0.9.12.tar.gz";,
 hash = 
"sha256:bf19eebee9a01612accd5dfe8bc81f198fa0be46c192a33ff5bcd7b36bae4c9f", size 
= 3761196, upload-time = "2025-11-25T15:18:27.106Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/06/c7/c8bf6a552eda1d47e3431851d0ca766812a9a0c1ca2379cd146dc43b5cbe/uv-0.9.12-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:a3415f04c32ddc090d0774e7ff50017e97471f126bbb5fd11a65c91abf2d8163", size 
= 20839804, upload-time = "2025-11-25T15:17:24.35Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/d0/e584af6a8e26fdd83678b8fb0b6c543a2ef7c735be4ade3ef742c54bfdd1/uv-0.9.12-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:4d821e59e29f67eb46fc4c499778db90d755ca1903b07fb4474485b338d20e11", size 
= 20032905, upload-time = "2025-11-25T15:17:27.834Z" },
-    { url = 
"https://files.pythonhosted.org/packages/af/d7/d409a604ecae95e765375a054b703458b468e301baf5ea73b3417b0c41bc/uv-0.9.12-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:d24ccf747ece6570f5d19626fa786727884332872048ba01e3ced94b88cfc6a3", size 
= 18488238, upload-time = "2025-11-25T15:17:31.17Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a5/2c/3e1bcea769ceaa75957f1e6de73ce0b6e3419baab02655e65d922ef9de43/uv-0.9.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:c57c27b9bff5f1f3a11a643aa7e6b9c37b278b625fa7276777d265fb41bf58c7", size 
= 20329825, upload-time = "2025-11-25T15:17:34.956Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bb/af/808c6c685b79496d01bf00495653a99e06f3f56b1300fd4c1e73733b70bb/uv-0.9.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:81d0b364fe08ed58adf822a9d57c5a3c8f638b73e7860f5eeb8d35a8c0d6acf8", size 
= 20447671, upload-time = "2025-11-25T15:17:38.687Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7c/9b/2ea3dedae920cdb31399ca46a369b40d994ee6863cad7f2090acc6e317c9/uv-0.9.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:a409152450f941ed625f836bc5a668092d79198983d501d7e5ecd199d62da9df", size 
= 21417736, upload-time = "2025-11-25T15:17:42.256Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bb/bb/b13df87ee43b549736976152fc28689dfcb7f5c28625831b1b596847290b/uv-0.9.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:e7dec90ca8318f3412bac4b3310259f9436d5f2f9448fb1191331b0a122333da", size 
= 23026600, upload-time = "2025-11-25T15:17:46.17Z" },
-    { url = 
"https://files.pythonhosted.org/packages/12/46/fb84d5f488385acc23d7f16e0c03e430de92180982223fed9a32d26d3245/uv-0.9.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:5330ed2c8843e4acfb94c6ef6852f44672ec61bb32240f63129d1b226653847c", size 
= 22688076, upload-time = "2025-11-25T15:17:49.558Z" },
-    { url = 
"https://files.pythonhosted.org/packages/43/d7/bc95b83ab7e378cb9f87b5ff82b465f11869cb2c5ede329a43e8574e678c/uv-0.9.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:19d835bf91d385c1ae46844c61e7888a56d07585ed5cb13edee1858f2fff093a", size 
= 21712317, upload-time = "2025-11-25T15:17:53.016Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5f/4c/f82603979cc94dec109c85f46a53597882c8e7de70518542d795adc829e2/uv-0.9.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:822ea5a36e261f94a71c458ee79a8837d0a00d0b9b185a8f68fc0a9d452b1582", size 
= 21731493, upload-time = "2025-11-25T15:17:56.63Z" },
-    { url = 
"https://files.pythonhosted.org/packages/dc/47/6b49ee2c0ea5108f39eaf9ac5a27c11e52a4e895c39ee52ec95ecedf63c9/uv-0.9.12-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:4164d8bec004e12702ba26472e342f34d4a3086d114a9dac39a8c3986e0dc20d", size 
= 20444997, upload-time = "2025-11-25T15:18:00.269Z" },
-    { url = 
"https://files.pythonhosted.org/packages/00/a6/948099fd1706e6434b2a502ae33f7b82acf12668f116b9778ac7d15e6d20/uv-0.9.12-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:de1d90bddb5ca4e79dedf9160c5c24069cc101a7ed939346c46e882b9497acfa", size 
= 21503634, upload-time = "2025-11-25T15:18:03.718Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d5/e5/cd61640adb038cdece208f44732df0b8c5668b21dc2a5b45ea12d5a237b5/uv-0.9.12-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:c6b98f7fe5cbee23dcd113aba0ca6396448d9ce4fdffc5ced2a784b72ca237a1", size 
= 20435424, upload-time = "2025-11-25T15:18:07.128Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a1/75/7ac909dc244eb48e7fb7cbb5c43cc11ffb702062d083c5494c969556d574/uv-0.9.12-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:6dc8455d2e705e9bfd8e81dc0c11e7427639df5ef284ec6e6a381813fef6de6d", size 
= 20873690, upload-time = "2025-11-25T15:18:10.474Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f0/b5/5c3ba66f491cd7a8ff3a86d82f7286bd268ab08cf1c024e2cdf0f1b52151/uv-0.9.12-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:928c18128259283beaaa24f2cfe3fbb22a3d26cbbf6ac81a6333bdf3edf112e0", size 
= 21909798, upload-time = "2025-11-25T15:18:14.023Z" },
-    { url = 
"https://files.pythonhosted.org/packages/64/3d/9959916840c9006bd6fd8ef6f5dbb254bc5afc79d546f192af7bb5d73f96/uv-0.9.12-py3-none-win32.whl";,
 hash = 
"sha256:bd845ec24cf163be2e4a02ff7e8f49b2e909c89b25b563e0195c46a0461f1ee0", size 
= 19584935, upload-time = "2025-11-25T15:18:17.558Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c3/be/a7fb5352d6d7a35ac7f55b1bb3a60a2c539ed4c1b6c885c8e30cd3d54a65/uv-0.9.12-py3-none-win_amd64.whl";,
 hash = 
"sha256:b5018f1f2c8315139b49f28e98c1aeab98a5dd4e1ba5ecfee98b0d8746110c91", size 
= 21707254, upload-time = "2025-11-25T15:18:21.216Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ff/5c/fe197b1f216942eb5212159e7c875a0ef40153dc4e11afdebe9619bd094a/uv-0.9.12-py3-none-win_arm64.whl";,
 hash = 
"sha256:6d29dd5800d7d27323afa05c34b9566369370e23d232da22973913c7104873f4", size 
= 20106104, upload-time = "2025-11-25T15:18:24.716Z" },
+version = "0.9.13"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/f2/10/ad3dc22d0cabe7c335a1d7fc079ceda73236c0984da8d8446de3d2d30c9b/uv-0.9.13.tar.gz";,
 hash = 
"sha256:105a6f4ff91480425d1b61917e89ac5635b8e58a79267e2be103338ab448ccd6", size 
= 3761269, upload-time = "2025-11-26T16:17:30.036Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/6a/ae/94ec7111b006bc7212bf727907a35510a37928c15302ecc3757cfd7d6d7f/uv-0.9.13-py3-none-linux_armv6l.whl";,
 hash = 
"sha256:7be41bdeb82c246f8ef1421cf4d1dd6ab3e5f46e4235eb22c8f5bf095debc069", size 
= 20830010, upload-time = "2025-11-26T16:17:13.147Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8a/53/5eb0eb0ca7ed41c10447d6c859b4d81efc5b76de14d01fd900af7d7bd1be/uv-0.9.13-py3-none-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:1d4c624bb2b81f885b7182d99ebdd5c2842219d2ac355626a4a2b6c1e3e6f8c1", size 
= 19961915, upload-time = "2025-11-26T16:17:15.587Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a3/d1/0f0c8dc2125709a8e072b73e5e89da9f016d492ca88b909b23b3006c2b51/uv-0.9.13-py3-none-macosx_11_0_arm64.whl";,
 hash = 
"sha256:318d0b9a39fa26f95a428a551d44cbefdfd58178954a831669248a42f39d3c75", size 
= 18426731, upload-time = "2025-11-26T16:17:31.855Z" },
+    { url = 
"https://files.pythonhosted.org/packages/36/ee/f9db8cb69d584b8326b3e0e60e5a639469cdebac76e7f4ff5ba7c2c6fe6c/uv-0.9.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:6a641ed7bcc8d317d22a7cb1ad0dfa41078c8e392f6f9248b11451abff0ccf50", size 
= 20315156, upload-time = "2025-11-26T16:17:08.125Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8a/49/045bbfe264fc1add3e238e0e11dec62725c931946dbcda3780d15ca3591b/uv-0.9.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:e797ae9d283ee129f33157d84742607547939ca243d7a8c17710dc857a7808bd", size 
= 20430487, upload-time = "2025-11-26T16:17:28.143Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ff/c0/18a14dbaedfd2492de5cca50b46a238d5199e9f0291f027f63a03f2ebdd4/uv-0.9.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl";,
 hash = 
"sha256:48fa9cf568c481c150f957a2f9285d1c3ad2c1d50c904b03bcebd5c9669c5668", size 
= 21378284, upload-time = "2025-11-26T16:16:48.696Z" },
+    { url = 
"https://files.pythonhosted.org/packages/08/04/d0fc5fb25e3f90740913b1c028e1556515e4e1fea91e1f58e7c18c1712a3/uv-0.9.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl";,
 hash = 
"sha256:a66817a416c1c79303fd5e40c319ed9c8e59b46fb04cf3eac4447e95b9ec8763", size 
= 23016232, upload-time = "2025-11-26T16:16:46.149Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e4/bc/cef461a47cddeb99c2a3b31f3946d38cbca7923b0f2fb6666756ba63a84a/uv-0.9.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:05eb7e941c54666e8c52519a79ff46d15b5206967645652d3dfb2901fd982493", size 
= 22657140, upload-time = "2025-11-26T16:17:03.026Z" },
+    { url = 
"https://files.pythonhosted.org/packages/39/0f/5c9de65279480b1922c51aae409bbfa1d90ff108f8b81688022499f2c3e2/uv-0.9.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:4fe5ac5b0a98a876da8f4c08e03217589a89ea96883cfdc9c4b397bf381ef7b9", size 
= 21644453, upload-time = "2025-11-26T16:16:43.228Z" },
+    { url = 
"https://files.pythonhosted.org/packages/da/e5/148ab5edb339f5833d04f0bcb8380a53e8b19bd5f091ae67222ed188b393/uv-0.9.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:6627d0abbaf58f9ff6e07e3f8522d65421230969aa2d7b10421339f0cb30dec4", size 
= 21655007, upload-time = "2025-11-26T16:16:51.36Z" },
+    { url = 
"https://files.pythonhosted.org/packages/eb/d8/a77587e4608af6efc5a72d3a937573eb5d08052550a3f248821b50898626/uv-0.9.13-py3-none-manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:6cca7671efacf6e2950eb86273ecce4a9a3f8bfa6ac04e8a17be9499bb3bb882", size 
= 20448163, upload-time = "2025-11-26T16:16:53.768Z" },
+    { url = 
"https://files.pythonhosted.org/packages/81/ad/e3bb28d175f22edf1779a81b76910e842dcde012859556b28e9f4b630f26/uv-0.9.13-py3-none-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:2e00a4f8404000e86074d7d2fe5734078126a65aefed1e9a39f10c390c4c15dc", size 
= 21477072, upload-time = "2025-11-26T16:16:56.908Z" },
+    { url = 
"https://files.pythonhosted.org/packages/32/b6/9231365ab2495107a9e23aa36bb5400a4b697baaa0e5367f009072e88752/uv-0.9.13-py3-none-musllinux_1_1_armv7l.whl";,
 hash = 
"sha256:3a4c16906e78f148c295a2e4f2414b843326a0f48ae68f7742149fd2d5dafbf7", size 
= 20421263, upload-time = "2025-11-26T16:17:10.552Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8c/83/d83eeee9cea21b9a9e053d4a2ec752a3b872e22116851317da04681cc27e/uv-0.9.13-py3-none-musllinux_1_1_i686.whl";,
 hash = 
"sha256:f254cb60576a3ae17f8824381f0554120b46e2d31a1c06fc61432c55d976892d", size 
= 20855418, upload-time = "2025-11-26T16:17:05.552Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6e/88/70102f374cfbbb284c6fe385e35978bff25a70b8e6afa871886af8963595/uv-0.9.13-py3-none-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:d50cea327b994786866b2d12c073097b9c8d883d42f0c0408b2d968492f571a4", size 
= 21871073, upload-time = "2025-11-26T16:17:00.213Z" },
+    { url = 
"https://files.pythonhosted.org/packages/01/05/00c90367db0c81379c9d2b1fb458a09a0704ecd89821c071cb0d8a917752/uv-0.9.13-py3-none-win32.whl";,
 hash = 
"sha256:a80296b1feb61bac36aee23ea79be33cd9aa545236d0780fbffaac113a17a090", size 
= 19607949, upload-time = "2025-11-26T16:17:23.337Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2f/e0/718b433acf811388e309936524be5786b8e0cc8ff23128f9cc29a34c075b/uv-0.9.13-py3-none-win_amd64.whl";,
 hash = 
"sha256:5732cd0fe09365fa5ad2c0a2d0c007bb152a2aa3c48e79f570eec13fc235d59d", size 
= 21722341, upload-time = "2025-11-26T16:17:20.764Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9f/31/142457b7c9d5edcdd8d4853c740c397ec83e3688b69d0ef55da60f7ab5b5/uv-0.9.13-py3-none-win_arm64.whl";,
 hash = 
"sha256:edfc3d53b6adefae766a67672e533d7282431f0deb2570186d1c3dd0d0e3c0a3", size 
= 20042030, upload-time = "2025-11-26T16:17:18.058Z" },
 ]
 
 [[package]]
@@ -1974,93 +2079,3 @@ sdist = { url = 
"https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50e
 wheels = [
     { url = 
"https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl";,
 hash = 
"sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size 
= 10276, upload-time = "2025-06-08T17:06:38.034Z" },
 ]
-
-[[package]]
-name = "zstandard"
-version = "0.25.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz";,
 hash = 
"sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size 
= 711513, upload-time = "2025-09-14T22:15:54.002Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", size 
= 795256, upload-time = "2025-09-14T22:15:56.415Z" },
-    { url = 
"https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", size 
= 640565, upload-time = "2025-09-14T22:15:58.177Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9d/1b/4fdb2c12eb58f31f28c4d28e8dc36611dd7205df8452e63f52fb6261d13e/zstandard-0.25.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl";,
 hash = 
"sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", size 
= 5345306, upload-time = "2025-09-14T22:16:00.165Z" },
-    { url = 
"https://files.pythonhosted.org/packages/73/28/a44bdece01bca027b079f0e00be3b6bd89a4df180071da59a3dd7381665b/zstandard-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl";,
 hash = 
"sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", size 
= 5055561, upload-time = "2025-09-14T22:16:02.22Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e9/74/68341185a4f32b274e0fc3410d5ad0750497e1acc20bd0f5b5f64ce17785/zstandard-0.25.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl";,
 hash = 
"sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", size 
= 5402214, upload-time = "2025-09-14T22:16:04.109Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8b/67/f92e64e748fd6aaffe01e2b75a083c0c4fd27abe1c8747fee4555fcee7dd/zstandard-0.25.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl";,
 hash = 
"sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", size 
= 5449703, upload-time = "2025-09-14T22:16:06.312Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl";,
 hash = 
"sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", size 
= 5556583, upload-time = "2025-09-14T22:16:08.457Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d7/83/41939e60d8d7ebfe2b747be022d0806953799140a702b90ffe214d557638/zstandard-0.25.0-cp310-cp310-musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", size 
= 5045332, upload-time = "2025-09-14T22:16:10.444Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b3/87/d3ee185e3d1aa0133399893697ae91f221fda79deb61adbe998a7235c43f/zstandard-0.25.0-cp310-cp310-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", size 
= 5572283, upload-time = "2025-09-14T22:16:12.128Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0a/1d/58635ae6104df96671076ac7d4ae7816838ce7debd94aecf83e30b7121b0/zstandard-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", size 
= 4959754, upload-time = "2025-09-14T22:16:14.225Z" },
-    { url = 
"https://files.pythonhosted.org/packages/75/d6/57e9cb0a9983e9a229dd8fd2e6e96593ef2aa82a3907188436f22b111ccd/zstandard-0.25.0-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", size 
= 5266477, upload-time = "2025-09-14T22:16:16.343Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/a9/ee891e5edf33a6ebce0a028726f0bbd8567effe20fe3d5808c42323e8542/zstandard-0.25.0-cp310-cp310-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", size 
= 5440914, upload-time = "2025-09-14T22:16:18.453Z" },
-    { url = 
"https://files.pythonhosted.org/packages/58/08/a8522c28c08031a9521f27abc6f78dbdee7312a7463dd2cfc658b813323b/zstandard-0.25.0-cp310-cp310-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", size 
= 5819847, upload-time = "2025-09-14T22:16:20.559Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6f/11/4c91411805c3f7b6f31c60e78ce347ca48f6f16d552fc659af6ec3b73202/zstandard-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", size 
= 5363131, upload-time = "2025-09-14T22:16:22.206Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ef/d6/8c4bd38a3b24c4c7676a7a3d8de85d6ee7a983602a734b9f9cdefb04a5d6/zstandard-0.25.0-cp310-cp310-win32.whl";,
 hash = 
"sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", size 
= 436469, upload-time = "2025-09-14T22:16:25.002Z" },
-    { url = 
"https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", size 
= 506100, upload-time = "2025-09-14T22:16:23.569Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size 
= 795254, upload-time = "2025-09-14T22:16:26.137Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size 
= 640559, upload-time = "2025-09-14T22:16:27.973Z" },
-    { url = 
"https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl";,
 hash = 
"sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size 
= 5348020, upload-time = "2025-09-14T22:16:29.523Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3b/13/2b7ed68bd85e69a2069bcc72141d378f22cae5a0f3b353a2c8f50ef30c1b/zstandard-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl";,
 hash = 
"sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", size 
= 5058126, upload-time = "2025-09-14T22:16:31.811Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c9/dd/fdaf0674f4b10d92cb120ccff58bbb6626bf8368f00ebfd2a41ba4a0dc99/zstandard-0.25.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl";,
 hash = 
"sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", size 
= 5405390, upload-time = "2025-09-14T22:16:33.486Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0f/67/354d1555575bc2490435f90d67ca4dd65238ff2f119f30f72d5cde09c2ad/zstandard-0.25.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl";,
 hash = 
"sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", size 
= 5452914, upload-time = "2025-09-14T22:16:35.277Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl";,
 hash = 
"sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size 
= 5559635, upload-time = "2025-09-14T22:16:37.141Z" },
-    { url = 
"https://files.pythonhosted.org/packages/21/88/5ba550f797ca953a52d708c8e4f380959e7e3280af029e38fbf47b55916e/zstandard-0.25.0-cp311-cp311-musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", size 
= 5048277, upload-time = "2025-09-14T22:16:38.807Z" },
-    { url = 
"https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size 
= 5574377, upload-time = "2025-09-14T22:16:40.523Z" },
-    { url = 
"https://files.pythonhosted.org/packages/12/9b/3fb626390113f272abd0799fd677ea33d5fc3ec185e62e6be534493c4b60/zstandard-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", size 
= 4961493, upload-time = "2025-09-14T22:16:43.3Z" },
-    { url = 
"https://files.pythonhosted.org/packages/cb/d3/23094a6b6a4b1343b27ae68249daa17ae0651fcfec9ed4de09d14b940285/zstandard-0.25.0-cp311-cp311-musllinux_1_2_i686.whl";,
 hash = 
"sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", size 
= 5269018, upload-time = "2025-09-14T22:16:45.292Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8c/a7/bb5a0c1c0f3f4b5e9d5b55198e39de91e04ba7c205cc46fcb0f95f0383c1/zstandard-0.25.0-cp311-cp311-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", size 
= 5443672, upload-time = "2025-09-14T22:16:47.076Z" },
-    { url = 
"https://files.pythonhosted.org/packages/27/22/503347aa08d073993f25109c36c8d9f029c7d5949198050962cb568dfa5e/zstandard-0.25.0-cp311-cp311-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", size 
= 5822753, upload-time = "2025-09-14T22:16:49.316Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size 
= 5366047, upload-time = "2025-09-14T22:16:51.328Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7b/a3/732893eab0a3a7aecff8b99052fecf9f605cf0fb5fb6d0290e36beee47a4/zstandard-0.25.0-cp311-cp311-win32.whl";,
 hash = 
"sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", size 
= 436484, upload-time = "2025-09-14T22:16:55.005Z" },
-    { url = 
"https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", size 
= 506183, upload-time = "2025-09-14T22:16:52.753Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8c/3e/8945ab86a0820cc0e0cdbf38086a92868a9172020fdab8a03ac19662b0e5/zstandard-0.25.0-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", size 
= 462533, upload-time = "2025-09-14T22:16:53.878Z" },
-    { url = 
"https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size 
= 795738, upload-time = "2025-09-14T22:16:56.237Z" },
-    { url = 
"https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size 
= 640436, upload-time = "2025-09-14T22:16:57.774Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl";,
 hash = 
"sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size 
= 5343019, upload-time = "2025-09-14T22:16:59.302Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl";,
 hash = 
"sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size 
= 5063012, upload-time = "2025-09-14T22:17:01.156Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl";,
 hash = 
"sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size 
= 5394148, upload-time = "2025-09-14T22:17:03.091Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl";,
 hash = 
"sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size 
= 5451652, upload-time = "2025-09-14T22:17:04.979Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl";,
 hash = 
"sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size 
= 5546993, upload-time = "2025-09-14T22:17:06.781Z" },
-    { url = 
"https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size 
= 5046806, upload-time = "2025-09-14T22:17:08.415Z" },
-    { url = 
"https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size 
= 5576659, upload-time = "2025-09-14T22:17:10.164Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size 
= 4953933, upload-time = "2025-09-14T22:17:11.857Z" },
-    { url = 
"https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl";,
 hash = 
"sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size 
= 5268008, upload-time = "2025-09-14T22:17:13.627Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size 
= 5433517, upload-time = "2025-09-14T22:17:16.103Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size 
= 5814292, upload-time = "2025-09-14T22:17:17.827Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size 
= 5360237, upload-time = "2025-09-14T22:17:19.954Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl";,
 hash = 
"sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size 
= 436922, upload-time = "2025-09-14T22:17:24.398Z" },
-    { url = 
"https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size 
= 506276, upload-time = "2025-09-14T22:17:21.429Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size 
= 462679, upload-time = "2025-09-14T22:17:23.147Z" },
-    { url = 
"https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size 
= 795735, upload-time = "2025-09-14T22:17:26.042Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size 
= 640440, upload-time = "2025-09-14T22:17:27.366Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl";,
 hash = 
"sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size 
= 5343070, upload-time = "2025-09-14T22:17:28.896Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl";,
 hash = 
"sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size 
= 5063001, upload-time = "2025-09-14T22:17:31.044Z" },
-    { url = 
"https://files.pythonhosted.org/packages/db/00/87466ea3f99599d02a5238498b87bf84a6348290c19571051839ca943777/zstandard-0.25.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl";,
 hash = 
"sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", size 
= 5394120, upload-time = "2025-09-14T22:17:32.711Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2b/95/fc5531d9c618a679a20ff6c29e2b3ef1d1f4ad66c5e161ae6ff847d102a9/zstandard-0.25.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl";,
 hash = 
"sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", size 
= 5451230, upload-time = "2025-09-14T22:17:34.41Z" },
-    { url = 
"https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl";,
 hash = 
"sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size 
= 5547173, upload-time = "2025-09-14T22:17:36.084Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl";,
 hash = 
"sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size 
= 5046736, upload-time = "2025-09-14T22:17:37.891Z" },
-    { url = 
"https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl";,
 hash = 
"sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size 
= 5576368, upload-time = "2025-09-14T22:17:40.206Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size 
= 4954022, upload-time = "2025-09-14T22:17:41.879Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9a/5c/36ba1e5507d56d2213202ec2b05e8541734af5f2ce378c5d1ceaf4d88dc4/zstandard-0.25.0-cp313-cp313-musllinux_1_2_i686.whl";,
 hash = 
"sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", size 
= 5267889, upload-time = "2025-09-14T22:17:43.577Z" },
-    { url = 
"https://files.pythonhosted.org/packages/70/e8/2ec6b6fb7358b2ec0113ae202647ca7c0e9d15b61c005ae5225ad0995df5/zstandard-0.25.0-cp313-cp313-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", size 
= 5433952, upload-time = "2025-09-14T22:17:45.271Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7b/01/b5f4d4dbc59ef193e870495c6f1275f5b2928e01ff5a81fecb22a06e22fb/zstandard-0.25.0-cp313-cp313-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", size 
= 5814054, upload-time = "2025-09-14T22:17:47.08Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size 
= 5360113, upload-time = "2025-09-14T22:17:48.893Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8e/e0/69a553d2047f9a2c7347caa225bb3a63b6d7704ad74610cb7823baa08ed7/zstandard-0.25.0-cp313-cp313-win32.whl";,
 hash = 
"sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", size 
= 436936, upload-time = "2025-09-14T22:17:52.658Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", size 
= 506232, upload-time = "2025-09-14T22:17:50.402Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d4/57/60c3c01243bb81d381c9916e2a6d9e149ab8627c0c7d7abb2d73384b3c0c/zstandard-0.25.0-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", size 
= 462671, upload-time = "2025-09-14T22:17:51.533Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", size 
= 795887, upload-time = "2025-09-14T22:17:54.198Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size 
= 640658, upload-time = "2025-09-14T22:17:55.423Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5d/7c/8b6b71b1ddd517f68ffb55e10834388d4f793c49c6b83effaaa05785b0b4/zstandard-0.25.0-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", size 
= 5379849, upload-time = "2025-09-14T22:17:57.372Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size 
= 5058095, upload-time = "2025-09-14T22:17:59.498Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f8/ad/eb659984ee2c0a779f9d06dbfe45e2dc39d99ff40a319895df2d3d9a48e5/zstandard-0.25.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", size 
= 5551751, upload-time = "2025-09-14T22:18:01.618Z" },
-    { url = 
"https://files.pythonhosted.org/packages/61/b3/b637faea43677eb7bd42ab204dfb7053bd5c4582bfe6b1baefa80ac0c47b/zstandard-0.25.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl";,
 hash = 
"sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", size 
= 6364818, upload-time = "2025-09-14T22:18:03.769Z" },
-    { url = 
"https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size 
= 5560402, upload-time = "2025-09-14T22:18:05.954Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size 
= 4955108, upload-time = "2025-09-14T22:18:07.68Z" },
-    { url = 
"https://files.pythonhosted.org/packages/98/cf/c899f2d6df0840d5e384cf4c4121458c72802e8bda19691f3b16619f51e9/zstandard-0.25.0-cp314-cp314-musllinux_1_2_i686.whl";,
 hash = 
"sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", size 
= 5269248, upload-time = "2025-09-14T22:18:09.753Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1b/c0/59e912a531d91e1c192d3085fc0f6fb2852753c301a812d856d857ea03c6/zstandard-0.25.0-cp314-cp314-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", size 
= 5430330, upload-time = "2025-09-14T22:18:11.966Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a0/1d/7e31db1240de2df22a58e2ea9a93fc6e38cc29353e660c0272b6735d6669/zstandard-0.25.0-cp314-cp314-musllinux_1_2_s390x.whl";,
 hash = 
"sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", size 
= 5811123, upload-time = "2025-09-14T22:18:13.907Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f6/49/fac46df5ad353d50535e118d6983069df68ca5908d4d65b8c466150a4ff1/zstandard-0.25.0-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", size 
= 5359591, upload-time = "2025-09-14T22:18:16.465Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c2/38/f249a2050ad1eea0bb364046153942e34abba95dd5520af199aed86fbb49/zstandard-0.25.0-cp314-cp314-win32.whl";,
 hash = 
"sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", size 
= 444513, upload-time = "2025-09-14T22:18:20.61Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", size 
= 516118, upload-time = "2025-09-14T22:18:17.849Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f0/ef/da163ce2450ed4febf6467d77ccb4cd52c4c30ab45624bad26ca0a27260c/zstandard-0.25.0-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", size 
= 476940, upload-time = "2025-09-14T22:18:19.088Z" },
-]
diff --git a/pyproject.toml b/pyproject.toml
index 4f21c87dc83..0f6d2fc4702 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -533,7 +533,7 @@ packages = []
     "apache-airflow-providers-amazon[s3fs]",
 ]
 "uv" = [
-    "uv>=0.9.12",
+    "uv>=0.9.13",
 ]
 
 
diff --git a/scripts/ci/prek/capture_airflowctl_help.py 
b/scripts/ci/docker-compose/enable-tty.yml
old mode 100755
new mode 100644
similarity index 52%
copy from scripts/ci/prek/capture_airflowctl_help.py
copy to scripts/ci/docker-compose/enable-tty.yml
index b0dd1377dd4..29720641d83
--- a/scripts/ci/prek/capture_airflowctl_help.py
+++ b/scripts/ci/docker-compose/enable-tty.yml
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -15,32 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# /// script
-# requires-python = ">=3.10,<3.11"
-# dependencies = [
-#   "argcomplete>=1.10",
-#   "rich>=13.6.0",
-# ]
-# ///
-from __future__ import annotations
-
-import sys
-from pathlib import Path
-
-sys.path.insert(0, str(Path(__file__).parent.resolve()))
-from common_prek_utils import (
-    initialize_breeze_prek,
-    run_command_via_breeze_shell,
-    validate_cmd_result,
-)
-
-initialize_breeze_prek(__name__, __file__)
-
-cmd_result = run_command_via_breeze_shell(
-    ["python3", 
"/opt/airflow/scripts/in_container/run_capture_airflowctl_help.py"],
-    backend="postgres",
-    skip_environment_initialization=False,
-    enable_pseudo_terminal=True,
-)
-
-validate_cmd_result(cmd_result)
+---
+services:
+  airflow:
+    tty: true  # docker run -t
diff --git a/scripts/ci/prek/capture_airflowctl_help.py 
b/scripts/ci/prek/capture_airflowctl_help.py
index b0dd1377dd4..b988fbf9c8f 100755
--- a/scripts/ci/prek/capture_airflowctl_help.py
+++ b/scripts/ci/prek/capture_airflowctl_help.py
@@ -38,9 +38,9 @@ initialize_breeze_prek(__name__, __file__)
 
 cmd_result = run_command_via_breeze_shell(
     ["python3", 
"/opt/airflow/scripts/in_container/run_capture_airflowctl_help.py"],
-    backend="postgres",
+    backend="sqlite",
     skip_environment_initialization=False,
-    enable_pseudo_terminal=True,
+    enable_pseudo_terminal=False,
 )
 
 validate_cmd_result(cmd_result)
diff --git a/scripts/ci/prek/common_prek_utils.py 
b/scripts/ci/prek/common_prek_utils.py
index e4005eedfb3..26730129814 100644
--- a/scripts/ci/prek/common_prek_utils.py
+++ b/scripts/ci/prek/common_prek_utils.py
@@ -220,26 +220,32 @@ def run_command_via_breeze_shell(
     if project_name:
         subprocess_cmd.extend(["--project-name", project_name])
     subprocess_cmd.append(" ".join([shlex.quote(arg) for arg in cmd]))
-    if os.environ.get("VERBOSE_COMMANDS"):
+    new_env = {
+        **os.environ,
+        "SKIP_BREEZE_SELF_UPGRADE_CHECK": "true",
+        "SKIP_GROUP_OUTPUT": "true",
+        "SKIP_SAVING_CHOICES": "true",
+        "ANSWER": "no",
+        **extra_env,
+    }
+
+    if os.environ.get("VERBOSE_COMMANDS") or os.environ.get("CI") == "true":
         if console:
             console.print(
                 f"[magenta]Running command: {' '.join([shlex.quote(item) for 
item in subprocess_cmd])}[/]"
             )
+            console.print("[magenta]With environment:[/]")
+            console.print(new_env)
         else:
             print(f"Running command: {' '.join([shlex.quote(item) for item in 
subprocess_cmd])}")
+            print("With environment:")
+            print(new_env)
     result = subprocess.run(
         subprocess_cmd,
         check=False,
         text=True,
         **other_popen_kwargs,
-        env={
-            **os.environ,
-            "SKIP_BREEZE_SELF_UPGRADE_CHECK": "true",
-            "SKIP_GROUP_OUTPUT": "true",
-            "SKIP_SAVING_CHOICES": "true",
-            "ANSWER": "no",
-            **extra_env,
-        },
+        env=new_env,
     )
     # Stop remaining containers
     down_command = ["docker", "compose", "--progress", "quiet"]
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index 37ad0051e1a..28fd6300966 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -242,7 +242,7 @@ function handle_mount_sources() {
 # Determine which airflow version to use
 function determine_airflow_to_use() {
     USE_AIRFLOW_VERSION="${USE_AIRFLOW_VERSION:=""}"
-    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST}" 
!= "true" ]]; then
+    if [[ "${USE_AIRFLOW_VERSION}" == "" && "${USE_DISTRIBUTIONS_FROM_DIST=}" 
!= "true" ]]; then
         export PYTHONPATH=${AIRFLOW_SOURCES}
         echo
         echo "${COLOR_BLUE}Using airflow version from current 
sources${COLOR_RESET}"
@@ -311,7 +311,7 @@ function check_boto_upgrade() {
 function check_upgrade_sqlalchemy() {
     # The python version constraint is a TEMPORARY WORKAROUND to exclude all 
FAB tests. Is should be removed once we
     # upgrade FAB to v5 (PR #50960).
-    if [[ "${UPGRADE_SQLALCHEMY}" != "true" || ${PYTHON_MAJOR_MINOR_VERSION} 
!= "3.13" ]]; then
+    if [[ "${UPGRADE_SQLALCHEMY=}" != "true" || ${PYTHON_MAJOR_MINOR_VERSION} 
!= "3.13" ]]; then
         return
     fi
     echo
diff --git a/scripts/in_container/run_capture_airflowctl_help.py 
b/scripts/in_container/run_capture_airflowctl_help.py
index 665325e3e41..733cc3145b2 100644
--- a/scripts/in_container/run_capture_airflowctl_help.py
+++ b/scripts/in_container/run_capture_airflowctl_help.py
@@ -20,6 +20,7 @@ from __future__ import annotations
 
 import hashlib
 import os
+import pty
 import subprocess
 import sys
 from pathlib import Path
@@ -28,12 +29,12 @@ from airflowctl import __file__ as AIRFLOW_CTL_SRC_PATH
 from rich.console import Console
 
 sys.path.insert(0, str(Path(__file__).parent.resolve()))
-AIRFLOW_ROOT_PATH = Path(AIRFLOW_CTL_SRC_PATH).parents[2]
-AIRFLOW_CTL_SOURCES_PATH = AIRFLOW_ROOT_PATH / "src"
+AIRFLOW_CTL_ROOT_PATH = Path(AIRFLOW_CTL_SRC_PATH).parents[2]
+AIRFLOW_CTL_SOURCES_PATH = AIRFLOW_CTL_ROOT_PATH / "src"
 
 sys.path.insert(0, str(Path(__file__).parent.resolve()))  # make sure 
common_prek_utils is imported
-AIRFLOWCTL_IMAGES_PATH = AIRFLOW_ROOT_PATH / "docs/images/"
-HASH_FILE = AIRFLOW_ROOT_PATH / "docs/images/" / "command_hashes.txt"
+AIRFLOWCTL_IMAGES_PATH = AIRFLOW_CTL_ROOT_PATH / "docs" / "images"
+HASH_FILE = AIRFLOW_CTL_ROOT_PATH / "docs" / "images" / "command_hashes.txt"
 COMMANDS = [
     "",  # for `airflowctl -h`, main help
     "assets",
@@ -55,7 +56,7 @@ SUBCOMMANDS = [
 ]
 
 
-console = Console(color_system="standard")
+console = Console(color_system="standard", force_terminal=True, width=200, 
force_interactive=False)
 
 
 # Get new hashes
@@ -120,8 +121,20 @@ def 
regenerate_help_images_for_all_airflowctl_commands(commands: list[str], skip
     for command in changed_commands:
         path = (AIRFLOWCTL_IMAGES_PATH / f"output_{command.replace(' ', 
'_')}.svg").as_posix()
         run_command = command if command != "main" else ""
-        subprocess.run(f"airflowctl {run_command} --preview {path}", 
shell=True, env=env, check=True)
-        console.print(f"[bright_blue]Generated SVG for command: {command}")
+
+        # Update environment and use pty.spawn to allocate a pseudo-TTY for 
proper terminal rendering
+        original_env = os.environ.copy()
+        os.environ.update(env)
+        try:
+            cmd_args = ["airflowctl"] + (run_command.split() if run_command 
else []) + ["--preview", path]
+            exit_code = pty.spawn(cmd_args)
+            if exit_code != 0:
+                raise subprocess.CalledProcessError(exit_code, f"airflowctl 
{run_command} --preview {path}")
+            console.print(f"[bright_blue]Generated SVG for command: {command}")
+        finally:
+            # Restore original environment
+            os.environ.clear()
+            os.environ.update(original_env)
 
     # Write new hashes
     with open(hash_file, "w") as f:
diff --git a/scripts/tools/setup_breeze b/scripts/tools/setup_breeze
index 9b5ad4e3514..c8078887030 100755
--- a/scripts/tools/setup_breeze
+++ b/scripts/tools/setup_breeze
@@ -27,7 +27,7 @@ COLOR_YELLOW=$'\e[33m'
 COLOR_BLUE=$'\e[34m'
 COLOR_RESET=$'\e[0m'
 
-UV_VERSION="0.9.12"
+UV_VERSION="0.9.13"
 
 function manual_instructions() {
     echo

Reply via email to