From 665460978b6917a6a48e947713a81d63bcb25368 Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 10:54:57 +0300 Subject: [PATCH 01/15] feat: band-python-kit base image, isolated SDK venv, CA wiring [INT-977] Multi-stage, digest-pinned, multi-arch (arm64+x86_64) Dockerfile at docker/band_python_kit/: immutable SDK venv baked at build time outside the customer's writable workspace, launched only via a fixed absolute interpreter path so it never collides with the customer's own venv. Entrypoint decodes the sandbox's per-session PROXY_CA_CERT_B64 into the system trust store and drops from root to a non-root user via setpriv before exec. SSL_CERT_FILE/REQUESTS_CA_BUNDLE point at the same system bundle so certifi-first clients (httpx) see it too, verified against a synthetic proxy CA end-to-end. Core deps only by default; an optional SDK_EXTRA build arg bakes in exactly one framework extra, since some extras (crewai vs. parlant/pydantic_ai) can't coexist in one venv. Includes a usage README covering build options, image layout, the CA trust model, and the privilege-drop mechanism. --- docker/band_python_kit/Dockerfile | 78 +++++++++++++++++++ docker/band_python_kit/README.md | 112 +++++++++++++++++++++++++++ docker/band_python_kit/entrypoint.sh | 21 +++++ 3 files changed, 211 insertions(+) create mode 100644 docker/band_python_kit/Dockerfile create mode 100644 docker/band_python_kit/README.md create mode 100644 docker/band_python_kit/entrypoint.sh diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile new file mode 100644 index 00000000..a3b1758c --- /dev/null +++ b/docker/band_python_kit/Dockerfile @@ -0,0 +1,78 @@ +# ── Build stage ─────────────────────────────────────────────────────────── +# python:3.12-slim, 3.12.13-slim-trixie — manifest-list digest (multi-arch: +# resolves to the correct linux/amd64 or linux/arm64 image automatically). +FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 AS builder + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git \ + && rm -rf /var/lib/apt/lists/* + +# uv 0.9.13 — manifest-list digest, copied as a pinned binary (no pip install). +COPY --from=ghcr.io/astral-sh/uv:0.9.13@sha256:f07d1bf7b1fb4b983eed2b31320e25a2a76625bdf83d5ff0208fe105d4d8d2f5 /uv /uvx /usr/local/bin/ + +WORKDIR /build +COPY pyproject.toml uv.lock README.md ./ +COPY src ./src + +# Prefer HTTPS for GitHub URLs to avoid SSH key requirements in container builds. +RUN git config --global --add url."https://github.com/".insteadOf "git@github.com:" \ + && git config --global --add url."https://github.com/".insteadOf "ssh://git@github.com/" + +# Strip host-specific [tool.uv.sources] overrides so uv resolves from the registry. +RUN sed -i '/^\[tool\.uv\.sources\]/,/^\[/{ /^\[tool\.uv\.sources\]/d; /^\[/!d; }' pyproject.toml + +# Core-only by default: this venv is baked once and never touched again. +# Optionally bake exactly one framework extra in at build time (e.g. +# `--build-arg SDK_EXTRA=langgraph`) — deliberately one, not a fixed v1 set, +# since some extras (e.g. crewai vs. parlant/pydantic_ai) conflict and can't +# resolve into the same venv. Any other framework is the customer's own +# venv, created at sandbox runtime, isolated from this one. +ARG SDK_EXTRA="" +RUN if [ -n "$SDK_EXTRA" ]; then \ + uv sync --locked --no-dev --no-editable --extra "$SDK_EXTRA"; \ + else \ + uv sync --locked --no-dev --no-editable; \ + fi + +# ── Runtime stage ───────────────────────────────────────────────────────── +FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 + +ENV DEBIAN_FRONTEND=noninteractive + +# ca-certificates provides the system trust store that the sandbox's +# session-generated proxy CA is installed into at runtime. No proxy env vars +# are set here. SSL_CERT_FILE/REQUESTS_CA_BUNDLE point at that same system +# bundle (not a narrowed, kit-private CA file) so it's additive, not an +# override: httpx and requests otherwise trust only their vendored certifi +# bundle and never see certs update-ca-certificates adds at sandbox runtime. +RUN apt-get update && apt-get install -y --no-install-recommends \ + bash \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ + REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt + +# Immutable SDK venv, outside the customer's writable workspace ($HOME). +ENV BAND_SDK_HOME=/opt/band +COPY --from=builder /build/.venv ${BAND_SDK_HOME}/venv +RUN chmod -R a-w ${BAND_SDK_HOME} + +# Fixed, absolute interpreter path for launching the SDK. Deliberately not +# added to PATH, so it can never shadow the customer's own venv at runtime. +ENV BAND_SDK_PYTHON=${BAND_SDK_HOME}/venv/bin/python + +COPY docker/band_python_kit/entrypoint.sh ${BAND_SDK_HOME}/entrypoint.sh +RUN chmod +x ${BAND_SDK_HOME}/entrypoint.sh + +RUN useradd -m -u 1000 -s /bin/bash agent +ENV HOME=/home/agent +WORKDIR /home/agent + +# Container starts as root: the entrypoint decodes the sandbox's per-session +# proxy CA (only root can update the system trust store), then drops to the +# non-root "agent" user via setpriv before handing off to CMD. +ENTRYPOINT ["/opt/band/entrypoint.sh"] +CMD ["bash"] diff --git a/docker/band_python_kit/README.md b/docker/band_python_kit/README.md new file mode 100644 index 00000000..277cb214 --- /dev/null +++ b/docker/band_python_kit/README.md @@ -0,0 +1,112 @@ +# band-python-kit base image + +Base image for the Band Docker Sandboxes kit: a customer's existing framework +agent (LangGraph, CrewAI, Anthropic, etc.) boots inside a sandbox already +connected to Band. This image provides the immutable Band SDK layer; the +customer's own framework lives in a separate venv created at sandbox runtime +(not part of this image). + +Publishes to `ghcr.io/thenvoi/band-python-kit` (see INT-979 for the publish +workflow). This README covers building and running the image directly. + +## Build + +Core SDK only, no framework extras: + +```bash +docker build -f docker/band_python_kit/Dockerfile -t band-python-kit . +``` + +Bake in exactly one framework extra (e.g. for a kit variant dedicated to a +single framework): + +```bash +docker build -f docker/band_python_kit/Dockerfile \ + --build-arg SDK_EXTRA=langgraph \ + -t band-python-kit:langgraph . +``` + +`SDK_EXTRA` accepts any single extra from `pyproject.toml`'s +`[project.optional-dependencies]` (`langgraph`, `anthropic`, `claude_sdk`, +`crewai`, `pydantic_ai`, ...). Only one at a time: some extras conflict and +cannot resolve into the same venv (`crewai` vs. `parlant`/`pydantic_ai` — see +the Dependency Conflicts section of the repo's `CLAUDE.md`). Any framework not +baked in here is installed into the customer's own venv at sandbox runtime, +isolated from this one. + +Multi-arch (arm64 + x86_64): + +```bash +docker buildx build --platform linux/amd64,linux/arm64 \ + -f docker/band_python_kit/Dockerfile -t band-python-kit . +``` + +## Image layout + +| Path / env var | What it is | +|---|---| +| `$BAND_SDK_HOME` (`/opt/band`) | Root of the baked SDK install. Read-only to every user, including root, after build (`chmod -R a-w`). | +| `$BAND_SDK_PYTHON` (`/opt/band/venv/bin/python`) | Fixed, absolute interpreter for the Band SDK. **Not on `PATH`** — the SDK venv can never shadow the customer's own venv or interpreter. Invoke the SDK only via this path. | +| `agent` (uid 1000, `$HOME=/home/agent`) | The non-root user every process ends up running as. Matches the sandbox's `$HOME`-mounted workspace convention. | + +## CA trust + +Docker Sandboxes generates a per-session proxy CA and exposes it to the +container as base64 in `PROXY_CA_CERT_B64`. The entrypoint: + +1. Decodes `PROXY_CA_CERT_B64` (if set) into + `/usr/local/share/ca-certificates/sandbox-proxy-ca.crt` and runs + `update-ca-certificates` — this needs root, which is why the container + starts as root before dropping privileges (see below). +2. Relies on `SSL_CERT_FILE`/`REQUESTS_CA_BUNDLE`, baked in as image `ENV` + and pointed at the system bundle + (`/etc/ssl/certs/ca-certificates.crt`) — this is what `httpx` needs, + since it trusts only its vendored `certifi` bundle by default and + ignores the system trust store otherwise. `websockets` already defaults + to `ssl.create_default_context()`, so it needs no extra wiring. + +Both are additive (pointed at the *whole* system bundle, not a narrowed, +kit-private CA file) — never override these to trust only an internal CA; +that breaks the credential proxy's own TLS termination path. + +If `PROXY_CA_CERT_B64` is unset (plain allowlisted egress, no credential +injection), the entrypoint skips the install step entirely and every real, +publicly-trusted upstream cert still verifies normally. + +## Privilege drop + +The container's default process starts as **root** — required for the CA +install step above, which only root can perform. The entrypoint +(`entrypoint.sh`) always ends by dropping to `agent` (uid 1000) via +`setpriv` before `exec`-ing the real command: + +```bash +exec setpriv --reuid=agent --regid=agent --init-groups -- "$@" +``` + +Nothing meant to run as the sandbox's agent user ever executes as root — +verify with `docker top `, not `docker exec ... whoami` (a fresh +`docker exec` process defaults to root regardless of what PID 1 dropped to). + +## Run + +```bash +docker run --rm band-python-kit bash -c '$BAND_SDK_PYTHON -c "import band; print(band.__version__)"' +``` + +With a proxy CA (mirrors what a real sandbox session sets): + +```bash +docker run --rm -e PROXY_CA_CERT_B64="$(base64 -i proxy-ca.pem)" band-python-kit \ + bash -c '$BAND_SDK_PYTHON -c "import httpx; print(httpx.get(\"https://your-injected-domain\").status_code)"' +``` + +## Out of scope here + +- **Customer venv creation** — created at sandbox runtime from the + workspace's own dependency declaration, not part of this image. +- **`spec.yaml`** (`kind: sandbox`, `caps.network.allow`, credentials) — a + separate deliverable; this image is what it points at. +- **`sbx kit validate` / `sbx run --kit`** — requires the `spec.yaml` above + and a real Docker Sandboxes-capable machine; not runnable in CI (no + nested virtualization on GitHub-hosted runners). diff --git a/docker/band_python_kit/entrypoint.sh b/docker/band_python_kit/entrypoint.sh new file mode 100644 index 00000000..58e2a915 --- /dev/null +++ b/docker/band_python_kit/entrypoint.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Deliberately thin: reading workspace config, spec.yaml-driven customer venv +# sync, and agent launch belong to the sandbox launcher, not this image. This +# stub only wires CA trust and validates the SDK venv before dropping to the +# non-root runtime user. + +# The proxy CA is session-generated per sandbox, so it can only be installed +# at container start, not baked into the image. Runs while still root. +if [[ -n "${PROXY_CA_CERT_B64:-}" ]]; then + base64 -d <<<"${PROXY_CA_CERT_B64}" > /usr/local/share/ca-certificates/sandbox-proxy-ca.crt + update-ca-certificates >/dev/null +fi + +if [[ ! -x "${BAND_SDK_PYTHON:-}" ]]; then + echo "[band-python-kit] ERROR: SDK interpreter not found at ${BAND_SDK_PYTHON:-}" >&2 + exit 1 +fi + +exec setpriv --reuid=agent --regid=agent --init-groups -- "$@" From 15b314d9dc1af377313967857fb6369dd7c73b0c Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:05:10 +0300 Subject: [PATCH 02/15] refactor: parameterize base image pins as override-able build ARGs [INT-977] PYTHON_BASE_IMAGE and UV_IMAGE are now global build ARGs, defaulting to the same fully-specific-tag+digest pins as before (python:3.12.13-slim-trixie, uv 0.9.13). A build can override either via --build-arg without editing the Dockerfile; the default keeps the pin's reproducibility guarantee for anyone who doesn't override. uv's image needs its own named stage (`FROM ${UV_IMAGE} AS uv`) since COPY --from doesn't support ARG expansion directly. Re-verified: default build, SDK_EXTRA build, multi-arch buildx build, an explicit PYTHON_BASE_IMAGE override (confirmed sys.version actually changes), and the full CA-wiring audit (PROXY_CA_CERT_B64 decode + install, httpx verification, privilege drop to agent) all still pass. --- docker/band_python_kit/Dockerfile | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index a3b1758c..0e551810 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -1,7 +1,17 @@ +# Fully-specific tag + manifest-list digest (multi-arch: resolves to the +# correct linux/amd64 or linux/arm64 image automatically). The tag makes the +# pin human-legible; the digest is what actually gets resolved — re-pin by +# passing --build-arg to bump either, but always keep both in sync (the tag +# is documentation, not an independent fallback). +ARG PYTHON_BASE_IMAGE=python:3.12.13-slim-trixie@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 +ARG UV_IMAGE=ghcr.io/astral-sh/uv:0.9.13@sha256:f07d1bf7b1fb4b983eed2b31320e25a2a76625bdf83d5ff0208fe105d4d8d2f5 + +# Named stage so the pinned uv image can be referenced by a fixed alias below +# — COPY --from doesn't support ARG expansion directly. +FROM ${UV_IMAGE} AS uv + # ── Build stage ─────────────────────────────────────────────────────────── -# python:3.12-slim, 3.12.13-slim-trixie — manifest-list digest (multi-arch: -# resolves to the correct linux/amd64 or linux/arm64 image automatically). -FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 AS builder +FROM ${PYTHON_BASE_IMAGE} AS builder ENV DEBIAN_FRONTEND=noninteractive @@ -9,8 +19,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ && rm -rf /var/lib/apt/lists/* -# uv 0.9.13 — manifest-list digest, copied as a pinned binary (no pip install). -COPY --from=ghcr.io/astral-sh/uv:0.9.13@sha256:f07d1bf7b1fb4b983eed2b31320e25a2a76625bdf83d5ff0208fe105d4d8d2f5 /uv /uvx /usr/local/bin/ +# uv, copied as a pinned binary (no pip install). +COPY --from=uv /uv /uvx /usr/local/bin/ WORKDIR /build COPY pyproject.toml uv.lock README.md ./ @@ -37,7 +47,7 @@ RUN if [ -n "$SDK_EXTRA" ]; then \ fi # ── Runtime stage ───────────────────────────────────────────────────────── -FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 +FROM ${PYTHON_BASE_IMAGE} ENV DEBIAN_FRONTEND=noninteractive From 842c0380ec96ebc09db0b6a613ca8988bbd7b52c Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:14:11 +0300 Subject: [PATCH 03/15] build: add linux/aarch64 and windows/AMD64 to required-environments [INT-977] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit linux/aarch64: closes the gap this ticket's multi-arch Docker build exercises (buildx --platform linux/arm64) but the resolver never formally guaranteed. windows/AMD64: CI already runs windows-latest in the test matrix (ci.yml) but the lock had no resolver guarantee for it either. Re-locked to generate the matching required-markers entries. Verified no actual package version changed (diffed { name, version } pairs before/after: identical) — the large uv.lock diff is uv's marker simplifier restating the same crewai/parlant/pydantic_ai conflict logic more concisely, not a dependency change. Full local test suite (3798 passed) and the band-python-kit Docker build both still pass against the updated lock. --- pyproject.toml | 2 + uv.lock | 634 ++++++++++++++++++++++--------------------------- 2 files changed, 286 insertions(+), 350 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 82b5681a..91e3a4fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -277,6 +277,8 @@ markers = [ required-environments = [ "sys_platform == 'darwin' and platform_machine == 'arm64'", "sys_platform == 'linux' and platform_machine == 'x86_64'", + "sys_platform == 'linux' and platform_machine == 'aarch64'", + "sys_platform == 'win32' and platform_machine == 'AMD64'", ] # crewai 1.14.3 conflicts with BOTH parlant and pydantic-ai: diff --git a/uv.lock b/uv.lock index 50218eca..b89fad1c 100644 --- a/uv.lock +++ b/uv.lock @@ -38,12 +38,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", @@ -65,16 +62,15 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] required-markers = [ "platform_machine == 'arm64' and sys_platform == 'darwin'", "platform_machine == 'x86_64' and sys_platform == 'linux'", + "platform_machine == 'aarch64' and sys_platform == 'linux'", + "platform_machine == 'AMD64' and sys_platform == 'win32'", ] conflicts = [[ { package = "band-sdk", extra = "crewai" }, @@ -101,12 +97,12 @@ name = "a2a-sdk" version = "0.3.26" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "httpx" }, { name = "httpx-sse" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/be/97/a6840e01795b182ce751ca165430d46459927cde9bfab838087cbb24aef7/a2a_sdk-0.3.26.tar.gz", hash = "sha256:44068e2d037afbb07ab899267439e9bc7eaa7ac2af94f1e8b239933c993ad52d", size = 274598, upload-time = "2026-04-09T15:21:13.902Z" } @@ -146,15 +142,15 @@ dependencies = [ { name = "httpx", extra = ["http2"] }, { name = "packaging" }, { name = "pydantic" }, - { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "python-dotenv" }, { name = "python-multipart" }, { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typer", version = "0.24.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typer", version = "0.24.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c2/08/99d70ea99b95aaeb0e98c1cffa6c19ee11fd43c919a74bc020ec671c18b7/agno-2.6.16.tar.gz", hash = "sha256:cc938d16e4ab0dcf3bd97c40867908eb8cefe034e6ee2082b3398cf01e1913bd", size = 2148053, upload-time = "2026-06-15T20:56:30.708Z" } @@ -398,8 +394,8 @@ dependencies = [ { name = "distro" }, { name = "docstring-parser" }, { name = "httpx" }, - { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "pydantic" }, { name = "sniffio" }, { name = "typing-extensions" }, @@ -504,8 +500,8 @@ dependencies = [ { name = "cryptography" }, { name = "filelock" }, { name = "phoenix-channels-python-client" }, - { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "python-dotenv" }, { name = "pyyaml" }, ] @@ -522,8 +518,8 @@ a2a-gateway = [ ] a2a-gateway-demo = [ { name = "a2a-sdk" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "langchain-openai" }, { name = "langgraph" }, { name = "starlette" }, @@ -531,8 +527,8 @@ a2a-gateway-demo = [ ] acp = [ { name = "agent-client-protocol" }, - { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "starlette" }, { name = "uvicorn" }, ] @@ -658,13 +654,13 @@ langgraph = [ ] letta = [ { name = "letta-client" }, - { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] logging = [ { name = "python-json-logger" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] opencode = [ { name = "httpx" }, @@ -824,7 +820,7 @@ version = "0.1.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, - { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, { name = "pytest" }, { name = "pytest-asyncio" }, @@ -1247,7 +1243,7 @@ dependencies = [ { name = "tqdm" }, { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" } }, { name = "typing-extensions" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7f/48/11851dddeadad6abe36ee071fedc99b5bdd2c324df3afa8cb952ae02798b/chromadb-1.1.1.tar.gz", hash = "sha256:ebfce0122753e306a76f1e291d4ddaebe5f01b5979b97ae0bc80b1d4024ff223", size = 1338109, upload-time = "2025-10-05T02:49:14.834Z" } wheels = [ @@ -1264,8 +1260,8 @@ version = "0.1.63" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, - { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/80/03/83b5d0ab68430da8f0f3632dc3cf714a3d03f35fe57caaf89fb2c79fcdfd/claude_agent_sdk-0.1.63.tar.gz", hash = "sha256:c251c402667743ff0424edd35223ebba62dc5b29c6f22d35821fc13f807f75e7", size = 130409, upload-time = "2026-04-18T01:48:56.065Z" } wheels = [ @@ -1286,7 +1282,7 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "colorama", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-crewai') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "colorama", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-crewai') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev-crewai') or (sys_platform == 'win32' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } wheels = [ @@ -1355,12 +1351,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "colorama", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev') or (sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "colorama", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-parlant') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" } wheels = [ @@ -1612,7 +1605,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version <= '3.11' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version <= '3.11' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version > '3.11' and extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (python_full_version > '3.11' and extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "tomli", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version <= '3.11' and extra == 'extra-8-band-sdk-crewai') or (python_full_version <= '3.11' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version <= '3.11' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version <= '3.11' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, ] @@ -2173,24 +2166,24 @@ dependencies = [ { name = "absolufy-imports" }, { name = "anyio" }, { name = "authlib" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "fastapi" }, { name = "google-api-python-client" }, - { name = "google-cloud-aiplatform", version = "1.126.1", source = { registry = "https://pypi.org/simple" }, extra = ["agent-engines"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-aiplatform", version = "1.148.1", source = { registry = "https://pypi.org/simple" }, extra = ["agent-engines"], marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-cloud-aiplatform", version = "1.126.1", source = { registry = "https://pypi.org/simple" }, extra = ["agent-engines"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-aiplatform", version = "1.148.1", source = { registry = "https://pypi.org/simple" }, extra = ["agent-engines"], marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-cloud-secret-manager" }, { name = "google-cloud-speech" }, { name = "google-cloud-storage" }, { name = "google-genai" }, { name = "graphviz" }, - { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "mcp", version = "1.26.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "mcp", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "opentelemetry-exporter-gcp-trace" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "pydantic" }, { name = "python-dateutil" }, { name = "python-dotenv" }, @@ -2218,11 +2211,11 @@ resolution-markers = [ "python_full_version >= '3.14'", ] dependencies = [ - { name = "google-auth", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "googleapis-common-protos", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "proto-plus", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "requests", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-auth", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "googleapis-common-protos", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "proto-plus", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "requests", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/cd/63f1557235c2440fe0577acdbc32577c5c002684c58c7f4d770a92366a24/google_api_core-2.25.2.tar.gz", hash = "sha256:1c63aa6af0d0d5e37966f157a77f9396d820fba59f9e43e9415bc3dc5baff300", size = 166266, upload-time = "2025-10-03T00:07:34.778Z" } wheels = [ @@ -2231,8 +2224,8 @@ wheels = [ [package.optional-dependencies] grpc = [ - { name = "grpcio", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "grpcio-status", version = "1.71.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "grpcio", marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "grpcio-status", version = "1.71.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, ] [[package]] @@ -2276,10 +2269,8 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", @@ -2301,19 +2292,16 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "google-auth", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "googleapis-common-protos", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "proto-plus", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "requests", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-auth", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "googleapis-common-protos", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "proto-plus", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "requests", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/16/ce/502a57fb0ec752026d24df1280b162294b22a0afb98a326084f9a979138b/google_api_core-2.30.3.tar.gz", hash = "sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b", size = 177001, upload-time = "2026-04-10T00:41:28.035Z" } wheels = [ @@ -2322,9 +2310,9 @@ wheels = [ [package.optional-dependencies] grpc = [ - { name = "grpcio", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "grpcio-status", version = "1.71.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "grpcio-status", version = "1.80.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "grpcio", marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "grpcio-status", version = "1.71.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "grpcio-status", version = "1.80.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] [[package]] @@ -2332,8 +2320,8 @@ name = "google-api-python-client" version = "2.194.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "google-auth-httplib2" }, { name = "httplib2" }, @@ -2385,20 +2373,20 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "docstring-parser", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-auth", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-bigquery", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-resource-manager", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-storage", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-genai", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "packaging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "shapely", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "docstring-parser", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version < '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version < '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-auth", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-bigquery", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-resource-manager", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-storage", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-genai", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "packaging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "shapely", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0c/36/f8e41679e6cb7ea6b50c0bfeaea0b9daf1475cafa152ad30456f6ec5471f/google_cloud_aiplatform-1.126.1.tar.gz", hash = "sha256:956706c587b817e36d5a16af5ab7f48c73dde76c71d660ecd4284f0339dc37d4", size = 9777644, upload-time = "2025-11-06T22:00:52.894Z" } wheels = [ @@ -2407,16 +2395,16 @@ wheels = [ [package.optional-dependencies] agent-engines = [ - { name = "cloudpickle", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "google-cloud-trace", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-exporter-gcp-logging", version = "1.9.0a0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-exporter-gcp-trace", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-exporter-otlp-proto-http", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "packaging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "cloudpickle", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "google-cloud-trace", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-exporter-gcp-logging", version = "1.9.0a0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-exporter-gcp-trace", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-exporter-otlp-proto-http", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "packaging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] [[package]] @@ -2481,23 +2469,20 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", -] -dependencies = [ - { name = "docstring-parser", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-auth", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-bigquery", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-resource-manager", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-storage", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-genai", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "packaging", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, +] +dependencies = [ + { name = "docstring-parser", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-auth", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-bigquery", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-resource-manager", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-storage", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-genai", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "packaging", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c9/f3/b2a9417014c93858a2e3266134f931eefd972c2d410b25d7b8782fc6f143/google_cloud_aiplatform-1.148.1.tar.gz", hash = "sha256:75d605fba34e68714bd08e1e482755d0a6e3ae972805f809d088e686c30879e7", size = 10278758, upload-time = "2026-04-17T23:45:26.738Z" } wheels = [ @@ -2506,18 +2491,18 @@ wheels = [ [package.optional-dependencies] agent-engines = [ - { name = "aiohttp", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "cloudpickle", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-iam", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-cloud-trace", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-exporter-gcp-logging", version = "1.11.0a0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-exporter-gcp-trace", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-exporter-otlp-proto-http", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "packaging", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "aiohttp", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "cloudpickle", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-iam", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-cloud-trace", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-exporter-gcp-logging", version = "1.11.0a0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-exporter-gcp-trace", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-exporter-otlp-proto-http", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "packaging", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] [[package]] @@ -2525,13 +2510,13 @@ name = "google-cloud-appengine-logging" version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "grpcio" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bc/02/800897064ca6f1a26835cdf23939c4b93e38a30f3fb5c7cec7c01ae2edc2/google_cloud_appengine_logging-1.9.0.tar.gz", hash = "sha256:ff397f0bbc1485f979ab45767c38e0f676c9598c97c384f7412216e6ea22f805", size = 17963, upload-time = "2026-03-30T22:51:33.556Z" } wheels = [ @@ -2544,8 +2529,8 @@ version = "0.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/be/9f/3aedb3ce1d58c58ec7dd06b3964836eabfd17a16a95b60c8f609c0afff7f/google_cloud_audit_log-0.5.0.tar.gz", hash = "sha256:3b32d5e77db634c46fbd6c5e01f5bda836f420dfbb21d730501c75e9fab4e4a4", size = 44670, upload-time = "2026-03-30T22:50:42.295Z" } wheels = [ @@ -2557,8 +2542,8 @@ name = "google-cloud-bigquery" version = "3.41.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "google-cloud-core" }, { name = "google-resumable-media" }, @@ -2576,8 +2561,8 @@ name = "google-cloud-core" version = "2.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/24/6ca08b0a03c7b0c620427503ab00353a4ae806b848b93bcea18b6b76fde6/google_cloud_core-2.5.1.tar.gz", hash = "sha256:3dc94bdec9d05a31d9f355045ed0f369fbc0d8c665076c734f065d729800f811", size = 36078, upload-time = "2026-03-30T22:50:08.057Z" } @@ -2590,12 +2575,12 @@ name = "google-cloud-iam" version = "2.22.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "google-auth", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "grpc-google-iam-v1", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "grpcio", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "google-auth", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "grpc-google-iam-v1", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "grpcio", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "proto-plus", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/62/e5/07d4f1daf85a2a0bd9f78ad865ea678d7b4e1227ed76f671c7167aae147f/google_cloud_iam-2.22.0.tar.gz", hash = "sha256:203ddfece17e014ee4fbc5c3244daa14a88b7ee57c8e3a7622d0f2a1a3b8d7f3", size = 502498, upload-time = "2026-03-30T22:51:28.878Z" } wheels = [ @@ -2607,19 +2592,19 @@ name = "google-cloud-logging" version = "3.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "google-cloud-appengine-logging" }, { name = "google-cloud-audit-log" }, { name = "google-cloud-core" }, { name = "grpc-google-iam-v1" }, { name = "grpcio" }, - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/99/06/253e9795a5877f35183a7175977ca47a17255fe0c8487155f48b86c83f3e/google_cloud_logging-3.15.0.tar.gz", hash = "sha256:72168a1e98bbfc27c75f0b8f630a7f5d786065f3f1f7e9e53d2d787a03693a4a", size = 294881, upload-time = "2026-03-26T22:18:36.947Z" } wheels = [ @@ -2631,14 +2616,14 @@ name = "google-cloud-resource-manager" version = "1.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "grpc-google-iam-v1" }, { name = "grpcio" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/1a/13060cabf553d52d151d2afc26b39561e82853380d499dd525a0d422d9f0/google_cloud_resource_manager-1.17.0.tar.gz", hash = "sha256:0f486b62e2c58ff992a3a50fa0f4a96eef7750aa6c971bb373398ccb91828660", size = 464971, upload-time = "2026-03-26T22:17:29.204Z" } wheels = [ @@ -2650,14 +2635,14 @@ name = "google-cloud-secret-manager" version = "2.27.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "grpc-google-iam-v1" }, { name = "grpcio" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6d/df/fbea0536e1baa6ea2239fdd19e9e22c9d64c8e26a0f3921596ecc0e5397d/google_cloud_secret_manager-2.27.0.tar.gz", hash = "sha256:6af864c252bd3c11db7bb02b80cb0b14a8c9a33fc7ec4d6f245f33d8ce1f7cd1", size = 279769, upload-time = "2026-03-26T22:17:15.271Z" } wheels = [ @@ -2669,13 +2654,13 @@ name = "google-cloud-speech" version = "2.38.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "grpcio" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/21/1f/d0122ad8af8c0608fb3168bd5030e62ce0a1fcc09c730487bc8be541874a/google_cloud_speech-2.38.0.tar.gz", hash = "sha256:1854b51cbb7957273b6ba61f4a6cf49dec8d09ec450991587897e50267eaca51", size = 406015, upload-time = "2026-03-26T22:18:54.434Z" } wheels = [ @@ -2687,8 +2672,8 @@ name = "google-cloud-storage" version = "2.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "google-cloud-core" }, { name = "google-crc32c" }, @@ -2705,13 +2690,13 @@ name = "google-cloud-trace" version = "1.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.25.2", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "(python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai') or (python_full_version >= '3.14' and extra == 'extra-8-band-sdk-dev-crewai') or (python_full_version >= '3.14' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-api-core", version = "2.30.3", source = { registry = "https://pypi.org/simple" }, extra = ["grpc"], marker = "python_full_version < '3.14' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "google-auth" }, { name = "grpcio" }, { name = "proto-plus" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/89/7b/c2a5848c4722373c92b500b65e6308ad89ca0c7c01054e0d948c58c107f2/google_cloud_trace-1.19.0.tar.gz", hash = "sha256:58293c6efcee6c74bb854ff01b008823bef66845c14f15ffa5209d545098a65d", size = 103875, upload-time = "2026-03-26T22:18:18.123Z" } wheels = [ @@ -2786,8 +2771,8 @@ name = "googleapis-common-protos" version = "1.74.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/20/18/a746c8344152d368a5aac738d4c857012f2c5d1fd2eac7e17b647a7861bd/googleapis_common_protos-1.74.0.tar.gz", hash = "sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1", size = 151254, upload-time = "2026-04-02T21:23:26.679Z" } wheels = [ @@ -2893,8 +2878,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos", extra = ["grpc"] }, { name = "grpcio" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/44/4f/d098419ad0bfc06c9ce440575f05aa22d8973b6c276e86ac7890093d3c37/grpc_google_iam_v1-0.14.4.tar.gz", hash = "sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038", size = 23706, upload-time = "2026-04-01T01:57:49.813Z" } wheels = [ @@ -2962,9 +2947,9 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "grpcio", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "grpcio", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fd/d1/b6e9877fedae3add1afdeae1f89d1927d296da9cf977eca0eb08fb8a460e/grpcio_status-1.71.2.tar.gz", hash = "sha256:c7a97e176df71cdc2c179cd1847d7fc86cca5832ad12e9798d7fed6b7a1aab50", size = 13677, upload-time = "2025-06-28T04:24:05.426Z" } wheels = [ @@ -3033,14 +3018,11 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "grpcio", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "grpcio", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/ed/105f619bdd00cb47a49aa2feea6232ea2bbb04199d52a22cc6a7d603b5cb/grpcio_status-1.80.0.tar.gz", hash = "sha256:df73802a4c89a3ea88aa2aff971e886fccce162bc2e6511408b3d67a144381cd", size = 13901, upload-time = "2026-03-30T08:54:34.784Z" } wheels = [ @@ -3212,7 +3194,7 @@ dependencies = [ { name = "packaging" }, { name = "pyyaml" }, { name = "tqdm" }, - { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "typer", version = "0.23.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, { name = "typer", version = "0.24.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, { name = "typing-extensions" }, ] @@ -3553,9 +3535,6 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] sdist = { url = "https://files.pythonhosted.org/packages/6e/c1/0cddc6eb17d4c53a99840953f95dd3accdc5cfc7a337b0e9b26476276be9/jiter-0.14.0.tar.gz", hash = "sha256:e8a39e66dac7153cf3f964a12aad515afa8d74938ec5cc0018adcdae5367c79e", size = 165725, upload-time = "2026-04-10T14:28:42.01Z" } wheels = [ @@ -4034,8 +4013,8 @@ dependencies = [ { name = "langchain-core" }, { name = "langsmith" }, { name = "numpy" }, - { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "pyyaml" }, { name = "requests" }, { name = "sqlalchemy" }, @@ -4390,21 +4369,15 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version >= '3.14' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra == 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra == 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", + "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ { name = "mdurl", marker = "extra == 'extra-8-band-sdk-crewai' or extra != 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, @@ -4579,20 +4552,20 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "anyio", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "httpx", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "httpx-sse", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "jsonschema", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "python-multipart", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pywin32", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-crewai') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "sse-starlette", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "starlette", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "uvicorn", marker = "(sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-crewai') or (sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "anyio", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "httpx", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "httpx-sse", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "jsonschema", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pydantic-settings", version = "2.10.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "python-multipart", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pywin32", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-crewai') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev-crewai') or (sys_platform == 'win32' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai')" }, + { name = "sse-starlette", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "starlette", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "uvicorn", marker = "(sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-crewai') or (sys_platform != 'emscripten' and extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (sys_platform != 'emscripten' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/6d/62e76bbb8144d6ed86e202b5edd8a4cb631e7c8130f3f4893c3f90262b10/mcp-1.26.0.tar.gz", hash = "sha256:db6e2ef491eecc1a0d93711a76f28dec2e05999f93afd48795da1c1137142c66", size = 608005, upload-time = "2026-01-24T19:40:32.468Z" } wheels = [ @@ -4661,25 +4634,22 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", -] -dependencies = [ - { name = "anyio", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "httpx", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "httpx-sse", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "jsonschema", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "python-multipart", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pywin32", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev') or (sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "sse-starlette", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "starlette", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "uvicorn", marker = "(sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-dev') or (sys_platform != 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, +] +dependencies = [ + { name = "anyio", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "httpx", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "httpx-sse", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "jsonschema", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pydantic-settings", version = "2.13.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "python-multipart", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "pywin32", marker = "(sys_platform == 'win32' and extra == 'extra-8-band-sdk-dev') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-parlant') or (sys_platform == 'win32' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "sse-starlette", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "starlette", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "uvicorn", marker = "(sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-dev') or (sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-parlant') or (sys_platform != 'emscripten' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8b/eb/c0cfc62075dc6e1ec1c64d352ae09ac051d9334311ed226f1f425312848a/mcp-1.27.0.tar.gz", hash = "sha256:d3dc35a7eec0d458c1da4976a48f982097ddaab87e278c5511d5a4a56e852b83", size = 607509, upload-time = "2026-04-02T14:48:08.88Z" } wheels = [ @@ -5189,8 +5159,8 @@ dependencies = [ { name = "anyio" }, { name = "distro" }, { name = "httpx" }, - { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "pydantic" }, { name = "sniffio" }, { name = "tqdm" }, @@ -5282,8 +5252,8 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "importlib-metadata", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "importlib-metadata", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/5e/94a8cb759e4e409022229418294e098ca7feca00eb3c467bb20cbd329bda/opentelemetry_api-1.34.1.tar.gz", hash = "sha256:64f0bd06d42824843731d05beea88d4d4b6ae59f9fe347ff7dfa2cc14233bbb3", size = 64987, upload-time = "2025-06-10T08:55:19.818Z" } wheels = [ @@ -5352,13 +5322,10 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "importlib-metadata", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "importlib-metadata", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/d8/0f354c375628e048bd0570645b310797299754730079853095bf000fba69/opentelemetry_api-1.38.0.tar.gz", hash = "sha256:f4c193b5e8acb0912b06ac5b16321908dd0843d75049c091487322284a3eea12", size = 65242, upload-time = "2025-10-16T08:35:50.25Z" } wheels = [ @@ -5375,9 +5342,9 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-resourcedetector-gcp", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-resourcedetector-gcp", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/30/0a/c379400c35196df247acd5ab9f0b0313c86c2b39b75c7f57667d5b9272d1/opentelemetry_exporter_gcp_logging-1.9.0a0.tar.gz", hash = "sha256:33db5fa2f642174bc371be12942276cea9abf4d1db0f7421aac58532a4d14445", size = 15292, upload-time = "2025-02-04T19:45:05.15Z" } wheels = [ @@ -5446,15 +5413,12 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-resourcedetector-gcp", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "google-cloud-logging", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-resourcedetector-gcp", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/72/2d/6aa7063b009768d8f9415b36a29ae9b3eb1e2c5eff70f58ca15e104c245f/opentelemetry_exporter_gcp_logging-1.11.0a0.tar.gz", hash = "sha256:58496f11b930c84570060ffbd4343cd0b597ea13c7bc5c879df01163dd552f14", size = 22400, upload-time = "2025-11-04T19:32:13.812Z" } wheels = [ @@ -5467,11 +5431,11 @@ version = "1.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-cloud-trace" }, - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "opentelemetry-resourcedetector-gcp" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/10/9c/4c3b26e5494f8b53c7873732a2317df905abe2b8ab33e9edfcbd5a8ff79b/opentelemetry_exporter_gcp_trace-1.11.0.tar.gz", hash = "sha256:c947ab4ab53e16517ade23d6fe71fe88cf7ca3f57a42c9f0e4162d2b929fecb6", size = 18770, upload-time = "2025-11-04T19:32:15.109Z" } wheels = [ @@ -5501,7 +5465,7 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "opentelemetry-proto", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "opentelemetry-proto", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/86/f0/ff235936ee40db93360233b62da932d4fd9e8d103cd090c6bcb9afaf5f01/opentelemetry_exporter_otlp_proto_common-1.34.1.tar.gz", hash = "sha256:b59a20a927facd5eac06edaf87a07e49f9e4a13db487b7d8a52b37cb87710f8b", size = 20817, upload-time = "2025-06-10T08:55:22.55Z" } wheels = [ @@ -5570,12 +5534,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "opentelemetry-proto", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-proto", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/83/dd4660f2956ff88ed071e9e0e36e830df14b8c5dc06722dbde1841accbe8/opentelemetry_exporter_otlp_proto_common-1.38.0.tar.gz", hash = "sha256:e333278afab4695aa8114eeb7bf4e44e65c6607d54968271a249c180b2cb605c", size = 20431, upload-time = "2025-10-16T08:35:53.285Z" } wheels = [ @@ -5644,13 +5605,13 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-exporter-otlp-proto-common", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-proto", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "requests", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-exporter-otlp-proto-common", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-proto", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "requests", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/8f/954bc725961cbe425a749d55c0ba1df46832a5999eae764d1a7349ac1c29/opentelemetry_exporter_otlp_proto_http-1.34.1.tar.gz", hash = "sha256:aaac36fdce46a8191e604dcf632e1f9380c7d5b356b27b3e0edb5610d9be28ad", size = 15351, upload-time = "2025-06-10T08:55:24.657Z" } wheels = [ @@ -5719,18 +5680,15 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-exporter-otlp-proto-common", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-proto", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "requests", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "googleapis-common-protos", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-exporter-otlp-proto-common", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-proto", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "requests", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/81/0a/debcdfb029fbd1ccd1563f7c287b89a6f7bef3b2902ade56797bfd020854/opentelemetry_exporter_otlp_proto_http-1.38.0.tar.gz", hash = "sha256:f16bd44baf15cbe07633c5112ffc68229d0edbeac7b37610be0b2def4e21e90b", size = 17282, upload-time = "2025-10-16T08:35:54.422Z" } wheels = [ @@ -5762,7 +5720,7 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/b3/c3158dd012463bb7c0eb7304a85a6f63baeeb5b4c93a53845cf89f848c7e/opentelemetry_proto-1.34.1.tar.gz", hash = "sha256:16286214e405c211fc774187f3e4bbb1351290b8dfb88e8948af209ce85b719e", size = 34344, upload-time = "2025-06-10T08:55:32.25Z" } wheels = [ @@ -5831,12 +5789,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/14/f0c4f0f6371b9cb7f9fa9ee8918bfd59ac7040c7791f1e6da32a1839780d/opentelemetry_proto-1.38.0.tar.gz", hash = "sha256:88b161e89d9d372ce723da289b7da74c3a8354a8e5359992be813942969ed468", size = 46152, upload-time = "2025-10-16T08:36:01.612Z" } wheels = [ @@ -5848,10 +5803,10 @@ name = "opentelemetry-resourcedetector-gcp" version = "1.11.0a0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-sdk", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-sdk", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "requests" }, { name = "typing-extensions" }, ] @@ -5870,9 +5825,9 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "opentelemetry-semantic-conventions", version = "0.55b1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "opentelemetry-semantic-conventions", version = "0.55b1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/41/fe20f9036433da8e0fcef568984da4c1d1c771fa072ecd1a4d98779dccdd/opentelemetry_sdk-1.34.1.tar.gz", hash = "sha256:8091db0d763fcd6098d4781bbc80ff0971f94e260739aa6afe6fd379cdf3aa4d", size = 159441, upload-time = "2025-06-10T08:55:33.028Z" } wheels = [ @@ -5941,14 +5896,11 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "opentelemetry-semantic-conventions", version = "0.59b0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "opentelemetry-semantic-conventions", version = "0.59b0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/cb/f0eee1445161faf4c9af3ba7b848cc22a50a3d3e2515051ad8628c35ff80/opentelemetry_sdk-1.38.0.tar.gz", hash = "sha256:93df5d4d871ed09cb4272305be4d996236eedb232253e3ab864c8620f051cebe", size = 171942, upload-time = "2025-10-16T08:36:02.257Z" } wheels = [ @@ -5965,8 +5917,8 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "opentelemetry-api", version = "1.34.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5d/f0/f33458486da911f47c4aa6db9bda308bb80f3236c111bf848bd870c16b16/opentelemetry_semantic_conventions-0.55b1.tar.gz", hash = "sha256:ef95b1f009159c28d7a7849f5cbc71c4c34c845bb514d66adfdf1b3fff3598b3", size = 119829, upload-time = "2025-06-10T08:55:33.881Z" } wheels = [ @@ -6035,13 +5987,10 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "opentelemetry-api", version = "1.38.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/40/bc/8b9ad3802cd8ac6583a4eb7de7e5d7db004e89cb7efe7008f9c8a537ee75/opentelemetry_semantic_conventions-0.59b0.tar.gz", hash = "sha256:7a6db3f30d70202d5bf9fa4b69bc866ca6a30437287de6c510fb594878aed6b0", size = 129861, upload-time = "2025-10-16T08:36:03.346Z" } wheels = [ @@ -6655,8 +6604,8 @@ name = "proto-plus" version = "1.27.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "protobuf", version = "5.29.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/81/0d/94dfe80193e79d55258345901acd2917523d56e8381bc4dee7fd38e3868a/proto_plus-1.27.2.tar.gz", hash = "sha256:b2adde53adadf75737c44d3dcb0104fde65250dfc83ad59168b4aa3e574b6a24", size = 57204, upload-time = "2026-03-26T22:18:57.174Z" } wheels = [ @@ -6744,9 +6693,6 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } wheels = [ @@ -7145,9 +7091,9 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "python-dotenv", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "python-dotenv", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/68/85/1ea668bbab3c50071ca613c6ab30047fb36ab0da1b92fa8f17bbc38fd36c/pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee", size = 172583, upload-time = "2025-06-24T13:26:46.841Z" } wheels = [ @@ -7216,14 +7162,11 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "python-dotenv", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "pydantic", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "python-dotenv", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "typing-inspection", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" } wheels = [ @@ -7378,7 +7321,7 @@ name = "pytest-cov" version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", extra = ["toml"], marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-dev-crewai' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "coverage", extra = ["toml"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, { name = "pluggy" }, { name = "pytest" }, ] @@ -7769,9 +7712,6 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] sdist = { url = "https://files.pythonhosted.org/packages/cb/0e/3a246dbf05666918bd3664d9d787f84a9108f6f43cc953a077e4a7dfdb7e/regex-2026.4.4.tar.gz", hash = "sha256:e08270659717f6973523ce3afbafa53515c4dc5dcad637dc215b6fd50f689423", size = 416000, upload-time = "2026-04-03T20:56:28.155Z" } wheels = [ @@ -7935,8 +7875,8 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "pygments", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pygments", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e9/67/cae617f1351490c25a4b8ac3b8b63a4dda609295d8222bad12242dfdc629/rich-14.3.4.tar.gz", hash = "sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9", size = 230524, upload-time = "2026-04-11T02:57:45.419Z" } wheels = [ @@ -8005,14 +7945,11 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai')" }, - { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "pygments", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev') or (extra == 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-dev-crewai') or (extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-parlant') or (extra != 'extra-8-band-sdk-dev' and extra == 'extra-8-band-sdk-pydantic-ai')" }, + { name = "pygments", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ @@ -8284,7 +8221,7 @@ name = "shapely" version = "2.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "numpy", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/bc/0989043118a27cccb4e906a46b7565ce36ca7b57f5a18b78f4f1b0f72d9d/shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9", size = 315489, upload-time = "2025-09-24T13:51:41.432Z" } wheels = [ @@ -8524,7 +8461,7 @@ name = "textual" version = "8.2.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, extra = ["linkify"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, extra = ["linkify"], marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, { name = "mdit-py-plugins" }, { name = "platformdirs" }, { name = "pygments" }, @@ -8541,8 +8478,8 @@ name = "tiktoken" version = "0.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "regex", version = "2026.1.15", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "regex", version = "2026.4.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "regex", version = "2026.1.15", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "regex", version = "2026.4.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } @@ -8739,10 +8676,10 @@ resolution-markers = [ "python_full_version < '3.13'", ] dependencies = [ - { name = "annotated-doc", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "shellingham", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, + { name = "annotated-doc", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "shellingham", marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fd/07/b822e1b307d40e263e8253d2384cf98c51aa2368cc7ba9a07e523a1d964b/typer-0.23.1.tar.gz", hash = "sha256:2070374e4d31c83e7b61362fd859aa683576432fd5b026b060ad6b4cd3b86134", size = 120047, upload-time = "2026-02-13T10:04:30.984Z" } wheels = [ @@ -8811,15 +8748,12 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version >= '3.14' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version == '3.13.*' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", - "python_full_version < '3.13' and extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-dev-crewai' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai'", ] dependencies = [ - { name = "annotated-doc", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, - { name = "shellingham", marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "annotated-doc", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, + { name = "shellingham", marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/24/cb09efec5cc954f7f9b930bf8279447d24618bb6758d4f6adf2574c41780/typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45", size = 118613, upload-time = "2026-02-21T16:54:40.609Z" } wheels = [ @@ -9016,8 +8950,8 @@ name = "uvicorn" version = "0.44.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai'" }, - { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-parlant') or (extra == 'extra-8-band-sdk-dev-crewai' and extra == 'extra-8-band-sdk-pydantic-ai') or (extra != 'extra-8-band-sdk-crewai' and extra != 'extra-8-band-sdk-dev-crewai')" }, + { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-crewai' or extra == 'extra-8-band-sdk-dev-crewai' or (extra != 'extra-8-band-sdk-dev' and extra != 'extra-8-band-sdk-parlant' and extra != 'extra-8-band-sdk-pydantic-ai')" }, + { name = "click", version = "8.3.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-8-band-sdk-dev' or extra == 'extra-8-band-sdk-parlant' or extra == 'extra-8-band-sdk-pydantic-ai'" }, { name = "h11" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/da/6eee1ff8b6cbeed47eeb5229749168e81eb4b7b999a1a15a7176e51410c9/uvicorn-0.44.0.tar.gz", hash = "sha256:6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e", size = 86947, upload-time = "2026-04-06T09:23:22.826Z" } From 538dd8497e2c0f41265672927faecdac8f4c88eb Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:17:03 +0300 Subject: [PATCH 04/15] fix: install git + openssh-client in the runtime image [INT-977] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit band.docker.repo_init (core band-sdk, always in the baked venv) shells out to git for clone/checkout/rev-parse and to ssh-keygen for SSH host-key verification, but both were only installed in the builder stage. Reproduced the failure: _git() raised FileNotFoundError with git absent from the runtime image. This image has no later Docker layer to add them in — INT-978's launcher (which explicitly reuses band.docker.repo_init) runs directly inside a container instantiated from this exact image, not a derived build. Verified fixed (git --version succeeds via repo_init._git) and re-ran the full regression sweep: non-root drop, immutable venv, fixed interpreter path, entrypoint validation, SDK_EXTRA isolation, and the end-to-end CA audit (PROXY_CA_CERT_B64 decode/install, httpx verification, privilege drop) all still pass. --- docker/band_python_kit/Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index 0e551810..8fedf041 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -57,9 +57,15 @@ ENV DEBIAN_FRONTEND=noninteractive # bundle (not a narrowed, kit-private CA file) so it's additive, not an # override: httpx and requests otherwise trust only their vendored certifi # bundle and never see certs update-ca-certificates adds at sandbox runtime. +# git + openssh-client: band.docker.repo_init (always in the baked venv, part +# of core band-sdk) shells out to git for clone/checkout/rev-parse and to +# ssh-keygen for SSH host-key verification — both needed here since this +# image is what INT-978's launcher runs repo_init from, not a later layer. RUN apt-get update && apt-get install -y --no-install-recommends \ bash \ ca-certificates \ + git \ + openssh-client \ && rm -rf /var/lib/apt/lists/* ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ From d3086d99f3c46a3cf3fb88cf957cdd88c3a2fd0b Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:25:14 +0300 Subject: [PATCH 05/15] test: add conflicting-pin proof test for band-python-kit [INT-977] Builds the real image, creates a second venv inside a container to simulate the customer venv INT-978's launcher will create at sandbox runtime, installs a deliberately ancient/conflicting httpx pin into it, and proves the baked SDK venv's own httpx and `band` import are unaffected. This is the ticket's core proof obligation per its Acceptance criteria. Gated behind a new docker_build marker + DOCKER_TESTS_ENABLED env var, mirroring how e2e tests are gated: CI runners do have a Docker daemon (unlike the nested-virtualization sbx tests), so a plain Docker-availability check wouldn't keep this off CI by itself. Skipped by default, verified it actually runs and passes with the flag set, and confirmed the standard test command (`pytest tests/ --ignore=tests/integration/ --ignore=tests/e2e/`) is unaffected (3798 passed, one more skip than before). --- AGENTS.md | 1 + pyproject.toml | 1 + tests/conftest.py | 23 +++-- tests/docker/test_band_python_kit.py | 120 +++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 6 deletions(-) create mode 100644 tests/docker/test_band_python_kit.py diff --git a/AGENTS.md b/AGENTS.md index 9a9193ed..a4959250 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -440,6 +440,7 @@ resolves each in a separate fork. - `E2E_ANTHROPIC_MODEL`: Anthropic model for E2E tests (legacy E2E default: `claude-3-haiku-20240307`; baseline toolkit default: `claude-haiku-4-5` — the baseline judge uses structured outputs, which `claude-3-haiku-20240307` does not support) - `E2E_JUDGE_MODEL`: Anthropic model for the baseline LLM judge (default: falls back to `E2E_ANTHROPIC_MODEL`; must support structured outputs) - `E2E_TIMEOUT`: Per-turn response timeout in seconds for E2E tests (default: `120`; a slow test can add headroom with `@pytest.mark.timeout(extra=n)`) +- `DOCKER_TESTS_ENABLED`: Set to `true` to run `docker_build`-marked tests (e.g. `tests/docker/test_band_python_kit.py`), which shell out to a real `docker build`/`docker run` (default: disabled everywhere, including CI — CI runners do have a Docker daemon, unlike the nested-virtualization `sbx` tests, so this needs the same explicit opt-in as `E2E_TESTS_ENABLED` rather than a plain Docker-availability check) Baseline lane scoping (see `tests/e2e/baseline/README.md`): diff --git a/pyproject.toml b/pyproject.toml index 91e3a4fb..52206eef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -269,6 +269,7 @@ markers = [ "requires_api: marks tests as requiring real API credentials (skipped in CI)", "e2e: marks tests as end-to-end (requires live services)", "flaky_reason: baseline flakiness taxonomy stamp (kind + reason); see tests/e2e/baseline/flaky.py", + "docker_build: builds/runs a real Docker image via subprocess (requires a local Docker daemon; skipped unless DOCKER_TESTS_ENABLED=true, including in CI, which has Docker but shouldn't pay this cost by default)", ] [tool.uv] diff --git a/tests/conftest.py b/tests/conftest.py index 0a67b61b..c08cda43 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -69,19 +69,30 @@ def pytest_ignore_collect(collection_path: Path) -> bool | None: def pytest_collection_modifyitems(items: list[pytest.Item]) -> None: - """Skip e2e-marked tests unless explicitly enabled. + """Skip e2e- and docker_build-marked tests unless explicitly enabled. tests/e2e/ gates itself through its own conftest; this covers e2e-marked tests living elsewhere (e.g. the codex ACP protocol tests), which spawn real backends and must never ride a normal unit run. + + docker_build-marked tests shell out to a real `docker build`/`docker + run` — CI runners do have a Docker daemon (unlike the nested + virtualization sbx tests need), so a plain Docker-availability check + isn't enough to keep them off CI; they need the same explicit opt-in + as e2e tests. """ - if os.environ.get("E2E_TESTS_ENABLED") == "true": - return - skip = pytest.mark.skip(reason="set E2E_TESTS_ENABLED=true to run e2e tests") + e2e_enabled = os.environ.get("E2E_TESTS_ENABLED") == "true" + docker_enabled = os.environ.get("DOCKER_TESTS_ENABLED") == "true" + skip_e2e = pytest.mark.skip(reason="set E2E_TESTS_ENABLED=true to run e2e tests") + skip_docker = pytest.mark.skip( + reason="set DOCKER_TESTS_ENABLED=true to run docker_build tests" + ) for item in items: - if item.get_closest_marker("e2e"): - item.add_marker(skip) + if not e2e_enabled and item.get_closest_marker("e2e"): + item.add_marker(skip_e2e) + if not docker_enabled and item.get_closest_marker("docker_build"): + item.add_marker(skip_docker) @pytest.fixture(autouse=True) diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py new file mode 100644 index 00000000..fc9fb752 --- /dev/null +++ b/tests/docker/test_band_python_kit.py @@ -0,0 +1,120 @@ +"""Proves the band-python-kit base image's core isolation guarantee. + +Builds the real image and a real conflicting-pin scenario via Docker — the +only way to actually prove isolation, as opposed to asserting it from the +Dockerfile's text. Gated behind DOCKER_TESTS_ENABLED (see conftest.py); never +runs by default, including in CI. +""" + +from __future__ import annotations + +import subprocess +import uuid +from pathlib import Path + +import pytest + +pytestmark = pytest.mark.docker_build + +REPO_ROOT = Path(__file__).resolve().parents[2] +DOCKERFILE = REPO_ROOT / "docker" / "band_python_kit" / "Dockerfile" + +# Ancient enough to be a real, meaningful API break against the SDK venv's +# own httpx (0.28.1 as of writing) — not just a different patch version. +CONFLICTING_HTTPX_VERSION = "0.13.3" + + +def _docker_exec(container: str, command: str) -> str: + result = subprocess.run( + ["docker", "exec", container, "bash", "-c", command], + capture_output=True, + text=True, + check=True, + timeout=60, + ) + return result.stdout + + +@pytest.fixture(scope="session") +def band_python_kit_image() -> str: + tag = f"band-python-kit-test:{uuid.uuid4().hex[:12]}" + subprocess.run( + ["docker", "build", "-f", str(DOCKERFILE), "-t", tag, str(REPO_ROOT)], + capture_output=True, + text=True, + check=True, + timeout=600, + ) + yield tag + subprocess.run(["docker", "rmi", "-f", tag], capture_output=True, check=False) + + +@pytest.fixture +def band_python_kit_container(band_python_kit_image: str): + container = f"band-python-kit-pin-test-{uuid.uuid4().hex[:8]}" + subprocess.run( + [ + "docker", + "run", + "-d", + "--name", + container, + band_python_kit_image, + "bash", + "-c", + "sleep 60", + ], + capture_output=True, + text=True, + check=True, + timeout=30, + ) + yield container + subprocess.run(["docker", "rm", "-f", container], capture_output=True, check=False) + + +def test_conflicting_customer_pin_does_not_break_sdk_venv( + band_python_kit_container: str, +) -> None: + """A conflicting dep pin in a second, customer-simulating venv must not + affect the baked SDK venv's own transport deps or ability to import.""" + container = band_python_kit_container + + baseline_httpx = _docker_exec( + container, + '$BAND_SDK_PYTHON -c "import httpx; print(httpx.__version__)"', + ).strip() + assert baseline_httpx, "expected the baked SDK venv to report an httpx version" + + # Simulate the customer venv INT-978's launcher creates at sandbox + # runtime, with a deliberately ancient, conflicting httpx pin. + _docker_exec( + container, + "python3 -m venv /tmp/customer-venv && " + f"/tmp/customer-venv/bin/pip install --quiet 'httpx=={CONFLICTING_HTTPX_VERSION}'", + ) + customer_httpx = _docker_exec( + container, + '/tmp/customer-venv/bin/python -c "import httpx; print(httpx.__version__)"', + ).strip() + assert customer_httpx == CONFLICTING_HTTPX_VERSION, ( + "expected the customer venv's conflicting pin to actually take, " + f"got {customer_httpx!r}" + ) + + # The baked SDK venv must be completely unaffected: same httpx version, + # SDK still importable. + sdk_httpx_after = _docker_exec( + container, + '$BAND_SDK_PYTHON -c "import httpx; print(httpx.__version__)"', + ).strip() + assert sdk_httpx_after == baseline_httpx, ( + "conflicting customer pin leaked into the SDK venv: expected " + f"{baseline_httpx!r}, got {sdk_httpx_after!r}" + ) + + band_version = _docker_exec( + container, + '$BAND_SDK_PYTHON -c "import band; print(band.__version__)"', + ).strip() + assert band_version, "band must still import from the SDK venv" From 6ee62f158e4ecf86eecfe03e07760e17d46e8663 Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:45:50 +0300 Subject: [PATCH 06/15] refactor: extract reusable docker test toolkit (Image/Container) [INT-977] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moves the subprocess/docker-CLI plumbing out of the conflicting-pin test into tests/docker/toolkit/docker_cli.py, mirroring tests/e2e/baseline/'s "toolkit holds the plumbing, the test holds the scenario" split. Nothing in it is band-python-kit-specific, so a future docker/ image test can reuse Image/Container as-is. Image.build(...) and Container.run(...) are context managers on the resource's own class rather than a create/remove function pair a caller has to remember to match up — creation and guaranteed cleanup live in one place. Container.run_python() shell-quotes its code automatically (shlex.quote) so callers never hand-quote, while still passing the interpreter through unquoted so $BAND_SDK_PYTHON expands. toolkit/__init__.py stays empty; real code lives in the named docker_cli submodule (matches the baseline toolkit's own convention). Verified: default run still skips (no docker daemon touched), enabled run builds/runs/passes, image+container are actually gone after teardown, ruff+pyrefly clean, and the full standard suite (3798 passed) is unaffected. --- tests/docker/__init__.py | 0 tests/docker/conftest.py | 24 ++++++ tests/docker/test_band_python_kit.py | 101 +++++----------------- tests/docker/toolkit/__init__.py | 0 tests/docker/toolkit/docker_cli.py | 120 +++++++++++++++++++++++++++ 5 files changed, 166 insertions(+), 79 deletions(-) create mode 100644 tests/docker/__init__.py create mode 100644 tests/docker/toolkit/__init__.py create mode 100644 tests/docker/toolkit/docker_cli.py diff --git a/tests/docker/__init__.py b/tests/docker/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/docker/conftest.py b/tests/docker/conftest.py index 9d48db4f..15ec2a40 100644 --- a/tests/docker/conftest.py +++ b/tests/docker/conftest.py @@ -1 +1,25 @@ from __future__ import annotations + +from collections.abc import Iterator + +import pytest + +from tests.docker.toolkit.docker_cli import BAND_PYTHON_KIT_DOCKERFILE, Container, Image + + +@pytest.fixture(scope="session") +def band_python_kit_image() -> Iterator[Image]: + """Build the band-python-kit image once per session; reused by every test.""" + with Image.build( + BAND_PYTHON_KIT_DOCKERFILE, tag_prefix="band-python-kit-test" + ) as image: + yield image + + +@pytest.fixture +def band_python_kit_container(band_python_kit_image: Image) -> Iterator[Container]: + """A running container from the shared image, torn down after each test.""" + with Container.run( + band_python_kit_image, name_prefix="band-python-kit-test" + ) as container: + yield container diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index fc9fb752..5628be34 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -1,102 +1,47 @@ """Proves the band-python-kit base image's core isolation guarantee. -Builds the real image and a real conflicting-pin scenario via Docker — the -only way to actually prove isolation, as opposed to asserting it from the -Dockerfile's text. Gated behind DOCKER_TESTS_ENABLED (see conftest.py); never -runs by default, including in CI. +Gated behind DOCKER_TESTS_ENABLED (see tests/conftest.py); never runs by +default, including in CI. Fixtures live in tests/docker/conftest.py / +tests/docker/toolkit/ — this file is scenario only. """ from __future__ import annotations -import subprocess -import uuid -from pathlib import Path - import pytest +from tests.docker.toolkit.docker_cli import Container + pytestmark = pytest.mark.docker_build -REPO_ROOT = Path(__file__).resolve().parents[2] -DOCKERFILE = REPO_ROOT / "docker" / "band_python_kit" / "Dockerfile" +SDK_PYTHON = "$BAND_SDK_PYTHON" # Ancient enough to be a real, meaningful API break against the SDK venv's # own httpx (0.28.1 as of writing) — not just a different patch version. CONFLICTING_HTTPX_VERSION = "0.13.3" -def _docker_exec(container: str, command: str) -> str: - result = subprocess.run( - ["docker", "exec", container, "bash", "-c", command], - capture_output=True, - text=True, - check=True, - timeout=60, - ) - return result.stdout - - -@pytest.fixture(scope="session") -def band_python_kit_image() -> str: - tag = f"band-python-kit-test:{uuid.uuid4().hex[:12]}" - subprocess.run( - ["docker", "build", "-f", str(DOCKERFILE), "-t", tag, str(REPO_ROOT)], - capture_output=True, - text=True, - check=True, - timeout=600, - ) - yield tag - subprocess.run(["docker", "rmi", "-f", tag], capture_output=True, check=False) - - -@pytest.fixture -def band_python_kit_container(band_python_kit_image: str): - container = f"band-python-kit-pin-test-{uuid.uuid4().hex[:8]}" - subprocess.run( - [ - "docker", - "run", - "-d", - "--name", - container, - band_python_kit_image, - "bash", - "-c", - "sleep 60", - ], - capture_output=True, - text=True, - check=True, - timeout=30, - ) - yield container - subprocess.run(["docker", "rm", "-f", container], capture_output=True, check=False) - - def test_conflicting_customer_pin_does_not_break_sdk_venv( - band_python_kit_container: str, + band_python_kit_container: Container, ) -> None: """A conflicting dep pin in a second, customer-simulating venv must not affect the baked SDK venv's own transport deps or ability to import.""" container = band_python_kit_container - baseline_httpx = _docker_exec( - container, - '$BAND_SDK_PYTHON -c "import httpx; print(httpx.__version__)"', - ).strip() + baseline_httpx = container.run_python( + "import httpx; print(httpx.__version__)", interpreter=SDK_PYTHON + ) assert baseline_httpx, "expected the baked SDK venv to report an httpx version" # Simulate the customer venv INT-978's launcher creates at sandbox # runtime, with a deliberately ancient, conflicting httpx pin. - _docker_exec( - container, + container.exec( "python3 -m venv /tmp/customer-venv && " - f"/tmp/customer-venv/bin/pip install --quiet 'httpx=={CONFLICTING_HTTPX_VERSION}'", + f"/tmp/customer-venv/bin/pip install --quiet 'httpx=={CONFLICTING_HTTPX_VERSION}'" + ) + customer_httpx = container.run_python( + "import httpx; print(httpx.__version__)", + interpreter="/tmp/customer-venv/bin/python", ) - customer_httpx = _docker_exec( - container, - '/tmp/customer-venv/bin/python -c "import httpx; print(httpx.__version__)"', - ).strip() assert customer_httpx == CONFLICTING_HTTPX_VERSION, ( "expected the customer venv's conflicting pin to actually take, " f"got {customer_httpx!r}" @@ -104,17 +49,15 @@ def test_conflicting_customer_pin_does_not_break_sdk_venv( # The baked SDK venv must be completely unaffected: same httpx version, # SDK still importable. - sdk_httpx_after = _docker_exec( - container, - '$BAND_SDK_PYTHON -c "import httpx; print(httpx.__version__)"', - ).strip() + sdk_httpx_after = container.run_python( + "import httpx; print(httpx.__version__)", interpreter=SDK_PYTHON + ) assert sdk_httpx_after == baseline_httpx, ( "conflicting customer pin leaked into the SDK venv: expected " f"{baseline_httpx!r}, got {sdk_httpx_after!r}" ) - band_version = _docker_exec( - container, - '$BAND_SDK_PYTHON -c "import band; print(band.__version__)"', - ).strip() + band_version = container.run_python( + "import band; print(band.__version__)", interpreter=SDK_PYTHON + ) assert band_version, "band must still import from the SDK venv" diff --git a/tests/docker/toolkit/__init__.py b/tests/docker/toolkit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/docker/toolkit/docker_cli.py b/tests/docker/toolkit/docker_cli.py new file mode 100644 index 00000000..b538077d --- /dev/null +++ b/tests/docker/toolkit/docker_cli.py @@ -0,0 +1,120 @@ +"""Shared plumbing for docker/-image-based tests: build, run, exec, teardown. + +A test built on this module should contain only the scenario — never the +subprocess/docker-CLI details — mirroring tests/e2e/baseline/'s "never the +plumbing" philosophy, applied here for tests that build and run a real +Docker image. Nothing here is band-python-kit-specific: any future test +against any other image in docker/ can reuse Image/Container as-is. +""" + +from __future__ import annotations + +import shlex +import subprocess +import uuid +from collections.abc import Iterator +from contextlib import contextmanager +from dataclasses import dataclass +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[3] +BAND_PYTHON_KIT_DOCKERFILE = REPO_ROOT / "docker" / "band_python_kit" / "Dockerfile" + + +@dataclass(frozen=True) +class Image: + """A built Docker image, identified by its unique tag. + + Creation and teardown live on the class (``Image.build``) rather than as + separate free functions, so a caller never has to remember to pair a + "build" call with its matching "remove". + """ + + tag: str + + @classmethod + @contextmanager + def build( + cls, + dockerfile: Path, + *, + build_args: dict[str, str] | None = None, + tag_prefix: str = "pytest-docker", + ) -> Iterator[Image]: + """Build ``dockerfile`` against the repo root; yield the image, then remove it.""" + tag = f"{tag_prefix}:{uuid.uuid4().hex[:12]}" + command = ["docker", "build", "-f", str(dockerfile), "-t", tag] + for key, value in (build_args or {}).items(): + command += ["--build-arg", f"{key}={value}"] + command.append(str(REPO_ROOT)) + subprocess.run(command, capture_output=True, text=True, check=True, timeout=600) + try: + yield cls(tag) + finally: + subprocess.run( + ["docker", "rmi", "-f", tag], capture_output=True, check=False + ) + + +@dataclass(frozen=True) +class Container: + """A running container, with intent-oriented helpers for driving it. + + Creation and teardown live on the class (``Container.run``), and driving + it wraps the ``docker exec`` plumbing, so a test reads what it's asking + the container to do, not how the CLI is invoked. + """ + + name: str + + @classmethod + @contextmanager + def run( + cls, + image: Image | str, + *, + name_prefix: str = "pytest-docker", + env: dict[str, str] | None = None, + command: list[str] | None = None, + keep_alive_seconds: int = 300, + ) -> Iterator[Container]: + """Start ``image`` detached; yield the container, then remove it.""" + tag = image.tag if isinstance(image, Image) else image + name = f"{name_prefix}-{uuid.uuid4().hex[:8]}" + run_command = ["docker", "run", "-d", "--name", name] + for key, value in (env or {}).items(): + run_command += ["-e", f"{key}={value}"] + run_command.append(tag) + run_command += command or ["bash", "-c", f"sleep {keep_alive_seconds}"] + subprocess.run( + run_command, capture_output=True, text=True, check=True, timeout=30 + ) + try: + yield cls(name) + finally: + subprocess.run( + ["docker", "rm", "-f", name], capture_output=True, check=False + ) + + def exec(self, command: str, *, timeout: int = 60) -> str: + """Run ``command`` via ``bash -c`` inside the container; return stripped stdout.""" + result = subprocess.run( + ["docker", "exec", self.name, "bash", "-c", command], + capture_output=True, + text=True, + check=True, + timeout=timeout, + ) + return result.stdout.strip() + + def run_python( + self, code: str, *, interpreter: str = "python3", timeout: int = 60 + ) -> str: + """Run ``code`` via ``interpreter -c `` inside the container. + + ``code`` is shell-quoted automatically, so it's safe to pass arbitrary + Python containing quotes — callers never hand-quote shell commands. + ``interpreter`` is passed through unquoted so a shell variable (e.g. + ``$BAND_SDK_PYTHON``) still expands. + """ + return self.exec(f"{interpreter} -c {shlex.quote(code)}", timeout=timeout) From 339966f6d26e2d1176715083197efc5fdfdca171 Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:48:04 +0300 Subject: [PATCH 07/15] style: use @pytest.mark.docker_build decorator instead of pytestmark [INT-977] --- tests/docker/test_band_python_kit.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index 5628be34..54265d09 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -11,8 +11,6 @@ from tests.docker.toolkit.docker_cli import Container -pytestmark = pytest.mark.docker_build - SDK_PYTHON = "$BAND_SDK_PYTHON" # Ancient enough to be a real, meaningful API break against the SDK venv's @@ -20,6 +18,7 @@ CONFLICTING_HTTPX_VERSION = "0.13.3" +@pytest.mark.docker_build def test_conflicting_customer_pin_does_not_break_sdk_venv( band_python_kit_container: Container, ) -> None: From a91b9bb8272688409f9258f18827b82b035ff06d Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 11:50:26 +0300 Subject: [PATCH 08/15] style: drop redundant container local-variable rebind [INT-977] Use the band_python_kit_container fixture parameter directly instead of assigning it to a same-scope local named container. --- tests/docker/test_band_python_kit.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index 54265d09..82a6e4de 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -24,20 +24,18 @@ def test_conflicting_customer_pin_does_not_break_sdk_venv( ) -> None: """A conflicting dep pin in a second, customer-simulating venv must not affect the baked SDK venv's own transport deps or ability to import.""" - container = band_python_kit_container - - baseline_httpx = container.run_python( + baseline_httpx = band_python_kit_container.run_python( "import httpx; print(httpx.__version__)", interpreter=SDK_PYTHON ) assert baseline_httpx, "expected the baked SDK venv to report an httpx version" # Simulate the customer venv INT-978's launcher creates at sandbox # runtime, with a deliberately ancient, conflicting httpx pin. - container.exec( + band_python_kit_container.exec( "python3 -m venv /tmp/customer-venv && " f"/tmp/customer-venv/bin/pip install --quiet 'httpx=={CONFLICTING_HTTPX_VERSION}'" ) - customer_httpx = container.run_python( + customer_httpx = band_python_kit_container.run_python( "import httpx; print(httpx.__version__)", interpreter="/tmp/customer-venv/bin/python", ) @@ -48,7 +46,7 @@ def test_conflicting_customer_pin_does_not_break_sdk_venv( # The baked SDK venv must be completely unaffected: same httpx version, # SDK still importable. - sdk_httpx_after = container.run_python( + sdk_httpx_after = band_python_kit_container.run_python( "import httpx; print(httpx.__version__)", interpreter=SDK_PYTHON ) assert sdk_httpx_after == baseline_httpx, ( @@ -56,7 +54,7 @@ def test_conflicting_customer_pin_does_not_break_sdk_venv( f"{baseline_httpx!r}, got {sdk_httpx_after!r}" ) - band_version = container.run_python( + band_version = band_python_kit_container.run_python( "import band; print(band.__version__)", interpreter=SDK_PYTHON ) assert band_version, "band must still import from the SDK venv" From ae6c9f6a77e5cb8eb5103601c2edae60c4bbb969 Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 12:12:50 +0300 Subject: [PATCH 09/15] =?UTF-8?q?test:=20live=20E2E=20=E2=80=94=20containe?= =?UTF-8?q?rized=20SDK=20talks=20to=20a=20real=20Band=20platform=20[INT-97?= =?UTF-8?q?7]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Proves the band-python-kit image's baked SDK works end-to-end against a live Band platform: provisions a real agent + room via the baseline toolkit, starts a minimal SimpleAdapter echo agent (core band-sdk only, no framework) as the non-root "agent" user inside the actual built image, sends a message as the user, and asserts a reply comes back through the real WS/REST transport. Locally targets whatever .env.test points at (dev, via the always-on VPN); in CI it would target prod via secrets, matching every other live E2E test's convention (dev locally / prod in CI) -- see the e2e-dev-local-prod-ci memory note. Confirmed along the way that dev's VPN-IP-allowlist does NOT block a local Docker container's real client libraries (httpx, the SDK's own WebSocketClient) -- an earlier "container can't reach dev" finding was a false alarm caused by testing with urllib specifically, which the SDK never uses. Gated behind BOTH docker_build and e2e markers (needs a Docker daemon AND live credentials) -- deliberately outside tests/e2e/baseline/'s adapter matrix, since there's no framework adapter to fan across; reuses the baseline toolkit's ResourceManager/UserOps/reply_capture fixtures directly instead. Needed the same asyncio(loop_scope="session") + explicit timeout backstop tests/e2e/baseline/conftest.py auto-applies to its own tree, added explicitly here since this test lives outside it. Container/Image gain exec_background()/run_python_background() (fire- and-forget via `docker exec -d`, for a process meant to keep running) and a `user` parameter (a fresh `docker exec` defaults to root regardless of what user the entrypoint dropped its own PID 1 to). Verified: passes against dev end-to-end, cleans up fully (no leftover image/container), skips correctly with either gate alone, ruff+pyrefly clean, full standard suite (3798 passed) unaffected. --- tests/docker/conftest.py | 16 ++++ tests/docker/test_band_python_kit_live.py | 111 ++++++++++++++++++++++ tests/docker/toolkit/docker_cli.py | 50 ++++++++-- 3 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 tests/docker/test_band_python_kit_live.py diff --git a/tests/docker/conftest.py b/tests/docker/conftest.py index 15ec2a40..f062d413 100644 --- a/tests/docker/conftest.py +++ b/tests/docker/conftest.py @@ -6,6 +6,22 @@ from tests.docker.toolkit.docker_cli import BAND_PYTHON_KIT_DOCKERFILE, Container, Image +# Re-exported (not just imported) so pytest can find them as fixtures — mirrors +# tests/integration/conftest.py's re-export of tests/conftest_integration.py. +# Deliberately NOT importing orphan_sweep/reap_leaked_agents (autouse in +# tests/e2e/baseline/): those would force every test in this directory +# (including the credential-free conflicting-pin test) to require live +# platform settings just by being collected here. +from tests.e2e.baseline.fixtures.capture import reply_capture # noqa: F401 +from tests.e2e.baseline.fixtures.platform import ( # noqa: F401 + baseline_run_id, + baseline_settings, + baseline_user_client, + baseline_ws, + resource_manager, + user_ops, +) + @pytest.fixture(scope="session") def band_python_kit_image() -> Iterator[Image]: diff --git a/tests/docker/test_band_python_kit_live.py b/tests/docker/test_band_python_kit_live.py new file mode 100644 index 00000000..1660ba42 --- /dev/null +++ b/tests/docker/test_band_python_kit_live.py @@ -0,0 +1,111 @@ +"""Proves the band-python-kit image's baked SDK reaches a live Band platform. + +Locally this targets whatever .env.test points at (dev, via the always-on +VPN); in CI it targets prod via secrets — the same convention every other +live E2E test in this repo follows (see tests/e2e/baseline/README.md). +Gated behind BOTH docker_build (needs a Docker daemon) and e2e (needs live +credentials) — see tests/conftest.py. + +Deliberately outside tests/e2e/baseline/'s adapter matrix: there is no +framework adapter here, just the raw SDK running inside the actual +container, so @per_adapter/@with_adapters would not fit. Provisioning and +the reply barrier reuse the baseline toolkit's fixtures directly instead. +""" + +from __future__ import annotations + +import pytest + +from tests.docker.toolkit.docker_cli import Container, Image +from tests.e2e.baseline.settings import BaselineSettings +from tests.e2e.baseline.toolkit.capture import CaptureFactory +from tests.e2e.baseline.toolkit.provisioning import ResourceManager +from tests.e2e.baseline.toolkit.user_ops import UserOps +from tests.toolkit.timeouts import backstop_timeout + +SDK_PYTHON = "$BAND_SDK_PYTHON" + +# tests/e2e/baseline/conftest.py auto-applies effective_timeout() to every +# test under its own directory; this test lives in tests/docker/, outside +# that scope, so the same backstop has to be applied explicitly here. Extra +# margin (vs. the default 60s) covers docker build/run/exec overhead on top +# of a normal in-process live turn. +_LIVE_TEST_TIMEOUT = backstop_timeout(BaselineSettings().e2e_timeout, extra_s=90) + +# Core band-sdk only (SimpleAdapter, no framework) — matches the image's +# core-only default build (no SDK_EXTRA). Echoes every message, including the +# first: is_session_bootstrap is True for a room's first message, but this +# test's whole scenario *is* one message in a brand-new room, so there's no +# "later, real" turn to defer replying to. +ECHO_AGENT_SCRIPT = """ +import asyncio +import os + +from band import Agent +from band.core.simple_adapter import SimpleAdapter + + +class EchoAdapter(SimpleAdapter[str]): + async def on_message( + self, msg, tools, history, participants_msg, contacts_msg, + *, is_session_bootstrap, room_id, + ): + await tools.send_message(f"echo: {msg.content}", mentions=[msg.sender_id]) + + +async def main() -> None: + agent = Agent.create( + adapter=EchoAdapter(), + agent_id=os.environ["BAND_AGENT_ID"], + api_key=os.environ["BAND_API_KEY"], + ws_url=os.environ["BAND_WS_URL"], + rest_url=os.environ["BAND_REST_URL"], + ) + await agent.run() + + +asyncio.run(main()) +""" + + +@pytest.mark.docker_build +@pytest.mark.e2e +@pytest.mark.asyncio(loop_scope="session") +@pytest.mark.timeout(_LIVE_TEST_TIMEOUT) +async def test_containerized_agent_replies_over_live_platform( + band_python_kit_image: Image, + resource_manager: ResourceManager, + user_ops: UserOps, + reply_capture: CaptureFactory, + baseline_settings: BaselineSettings, +) -> None: + """An agent running the baked SDK inside the real image, over the real + platform, actually receives a message and replies to it.""" + agent = await resource_manager.provision_agent("live-container") + room_id = await resource_manager.provision_room(participants=[agent.id]) + + with Container.run( + band_python_kit_image, + name_prefix="band-python-kit-live-test", + env={ + "BAND_AGENT_ID": agent.id, + "BAND_API_KEY": agent.api_key, + "BAND_WS_URL": baseline_settings.endpoints.ws_url, + "BAND_REST_URL": baseline_settings.endpoints.rest_url, + }, + ) as container: + container.run_python_background( + ECHO_AGENT_SCRIPT, interpreter=SDK_PYTHON, user="agent" + ) + + async with reply_capture(room_id) as capture: + mid = await user_ops.send_message( + room_id, "ping", mention_id=agent.id, mention_name=agent.name + ) + replies = await capture.wait_for_reply(mid, agent.id) + + # msg.content carries the platform's literal mention token ahead of the + # text (e.g. "@[[agent-id]]/agent-name ping"), not just the bare text, so + # match on the echo prefix and the original text separately. + replies.assert_contains_any(["echo:"]) + replies.assert_contains_any(["ping"]) diff --git a/tests/docker/toolkit/docker_cli.py b/tests/docker/toolkit/docker_cli.py index b538077d..6c8fa9dd 100644 --- a/tests/docker/toolkit/docker_cli.py +++ b/tests/docker/toolkit/docker_cli.py @@ -96,19 +96,43 @@ def run( ["docker", "rm", "-f", name], capture_output=True, check=False ) - def exec(self, command: str, *, timeout: int = 60) -> str: - """Run ``command`` via ``bash -c`` inside the container; return stripped stdout.""" + def exec(self, command: str, *, user: str | None = None, timeout: int = 60) -> str: + """Run ``command`` via ``bash -c`` inside the container; return stripped stdout. + + A fresh ``docker exec`` defaults to root regardless of what user the + container's entrypoint dropped its own PID 1 process to, so pass + ``user`` explicitly (e.g. ``"agent"``) to match that. + """ + docker_command = ["docker", "exec"] + if user is not None: + docker_command += ["--user", user] + docker_command += [self.name, "bash", "-c", command] result = subprocess.run( - ["docker", "exec", self.name, "bash", "-c", command], - capture_output=True, - text=True, - check=True, - timeout=timeout, + docker_command, capture_output=True, text=True, check=True, timeout=timeout ) return result.stdout.strip() + def exec_background(self, command: str, *, user: str | None = None) -> None: + """Start ``command`` detached (``docker exec -d``) inside the container. + + Fire-and-forget: for a process meant to keep running (e.g. an agent + listening on a websocket), not a command a caller waits on. + """ + docker_command = ["docker", "exec", "-d"] + if user is not None: + docker_command += ["--user", user] + docker_command += [self.name, "bash", "-c", command] + subprocess.run( + docker_command, capture_output=True, text=True, check=True, timeout=10 + ) + def run_python( - self, code: str, *, interpreter: str = "python3", timeout: int = 60 + self, + code: str, + *, + interpreter: str = "python3", + user: str | None = None, + timeout: int = 60, ) -> str: """Run ``code`` via ``interpreter -c `` inside the container. @@ -117,4 +141,12 @@ def run_python( ``interpreter`` is passed through unquoted so a shell variable (e.g. ``$BAND_SDK_PYTHON``) still expands. """ - return self.exec(f"{interpreter} -c {shlex.quote(code)}", timeout=timeout) + return self.exec( + f"{interpreter} -c {shlex.quote(code)}", user=user, timeout=timeout + ) + + def run_python_background( + self, code: str, *, interpreter: str = "python3", user: str | None = None + ) -> None: + """Start ``code`` via ``interpreter -c ``, detached (see ``exec_background``).""" + self.exec_background(f"{interpreter} -c {shlex.quote(code)}", user=user) From 114df824301e71ee8d4f84709566c66062b2807b Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 12:25:05 +0300 Subject: [PATCH 10/15] fix: build SDK venv at its final path; fix cold-build test timeout [INT-977] Code review findings, both verified live before fixing: [P1] Console-script shebangs (band-acp, band-trigger, ...) baked in the builder's /build/.venv path, then the venv was copied to /opt/band/venv without ever touching those shebangs -- reproduced: running the copied script failed with "required file not found" (exit 127). Fixed at the root: BAND_SDK_HOME is now a shared ARG between both stages, and UV_PROJECT_ENVIRONMENT makes uv build the venv directly at that final path in the builder stage, so the runtime COPY is path-for-path identical and no relocation (or shebang mismatch) ever happens. Verified: shebangs now read /opt/band/venv/bin/python, both console scripts execute (--help exits 0), full regression sweep still passes. [P2] The opt-in Docker build test had no timeout override, so the repo-wide 30s pytest-timeout default (which bounds fixture setup, not just the test body) could kill Image.build() on a cold-cache machine long before its own internal 600s subprocess timeout ever got a chance. Added @pytest.mark.timeout(660) (600s ceiling + margin). Also (post-review, same area): moved the live E2E test's echo-agent script from an inline string literal to a real file (tests/docker/echo_agent.py) -- ruff-checked, and a refactor to SimpleAdapter/Agent.create now shows up here instead of silently drifting until the live test runs it -- and extracted the live test's provision-agent/room + start-container-with-echo-agent plumbing into a fixture (tests/docker/toolkit/live_agent.py + conftest.py::live_containerized_agent), so the test body is scenario only: get the agent+room, send a turn, assert. Verified: both docker_build tests pass (pin-isolation and live, the latter against dev end-to-end), default run still skips both, cleanup confirmed, ruff+pyrefly clean, full standard suite (3798 passed) unaffected. --- docker/band_python_kit/Dockerfile | 21 ++++++- tests/docker/conftest.py | 22 ++++++- tests/docker/echo_agent.py | 53 ++++++++++++++++ tests/docker/test_band_python_kit.py | 7 +++ tests/docker/test_band_python_kit_live.py | 74 +++-------------------- tests/docker/toolkit/live_agent.py | 54 +++++++++++++++++ 6 files changed, 163 insertions(+), 68 deletions(-) create mode 100644 tests/docker/echo_agent.py create mode 100644 tests/docker/toolkit/live_agent.py diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index 8fedf041..f111c0ef 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -5,6 +5,9 @@ # is documentation, not an independent fallback). ARG PYTHON_BASE_IMAGE=python:3.12.13-slim-trixie@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 ARG UV_IMAGE=ghcr.io/astral-sh/uv:0.9.13@sha256:f07d1bf7b1fb4b983eed2b31320e25a2a76625bdf83d5ff0208fe105d4d8d2f5 +# Shared by both stages so the venv is built at the exact absolute path it +# will live at in the runtime image — see UV_PROJECT_ENVIRONMENT below. +ARG BAND_SDK_HOME=/opt/band # Named stage so the pinned uv image can be referenced by a fixed alias below # — COPY --from doesn't support ARG expansion directly. @@ -12,6 +15,7 @@ FROM ${UV_IMAGE} AS uv # ── Build stage ─────────────────────────────────────────────────────────── FROM ${PYTHON_BASE_IMAGE} AS builder +ARG BAND_SDK_HOME ENV DEBIAN_FRONTEND=noninteractive @@ -40,6 +44,12 @@ RUN sed -i '/^\[tool\.uv\.sources\]/,/^\[/{ /^\[tool\.uv\.sources\]/d; /^\[/!d; # resolve into the same venv. Any other framework is the customer's own # venv, created at sandbox runtime, isolated from this one. ARG SDK_EXTRA="" +# Build the venv directly at its final runtime path (not e.g. ./.venv, then +# relocated by COPY below): console-script shebangs bake in an absolute +# interpreter path at install time, so copying an already-built venv to a +# different path leaves every entry point (band-acp, band-trigger, ...) +# pointing at the deleted builder path. +ENV UV_PROJECT_ENVIRONMENT=${BAND_SDK_HOME}/venv RUN if [ -n "$SDK_EXTRA" ]; then \ uv sync --locked --no-dev --no-editable --extra "$SDK_EXTRA"; \ else \ @@ -48,6 +58,7 @@ RUN if [ -n "$SDK_EXTRA" ]; then \ # ── Runtime stage ───────────────────────────────────────────────────────── FROM ${PYTHON_BASE_IMAGE} +ARG BAND_SDK_HOME ENV DEBIAN_FRONTEND=noninteractive @@ -71,9 +82,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt -# Immutable SDK venv, outside the customer's writable workspace ($HOME). -ENV BAND_SDK_HOME=/opt/band -COPY --from=builder /build/.venv ${BAND_SDK_HOME}/venv +# Immutable SDK venv, outside the customer's writable workspace ($HOME). Copied +# from the exact same absolute path it was built at (see UV_PROJECT_ENVIRONMENT +# in the builder stage) — console-script shebangs bake in an absolute +# interpreter path, so copying to a *different* path would leave every entry +# point (band-acp, band-trigger, ...) pointing at the deleted builder path. +ENV BAND_SDK_HOME=${BAND_SDK_HOME} +COPY --from=builder ${BAND_SDK_HOME}/venv ${BAND_SDK_HOME}/venv RUN chmod -R a-w ${BAND_SDK_HOME} # Fixed, absolute interpreter path for launching the SDK. Deliberately not diff --git a/tests/docker/conftest.py b/tests/docker/conftest.py index f062d413..4775846b 100644 --- a/tests/docker/conftest.py +++ b/tests/docker/conftest.py @@ -1,10 +1,11 @@ from __future__ import annotations -from collections.abc import Iterator +from collections.abc import AsyncIterator, Iterator import pytest from tests.docker.toolkit.docker_cli import BAND_PYTHON_KIT_DOCKERFILE, Container, Image +from tests.docker.toolkit.live_agent import live_containerized_echo_agent # Re-exported (not just imported) so pytest can find them as fixtures — mirrors # tests/integration/conftest.py's re-export of tests/conftest_integration.py. @@ -21,6 +22,8 @@ resource_manager, user_ops, ) +from tests.e2e.baseline.settings import BaselineSettings +from tests.e2e.baseline.toolkit.provisioning import ProvisionedAgent, ResourceManager @pytest.fixture(scope="session") @@ -39,3 +42,20 @@ def band_python_kit_container(band_python_kit_image: Image) -> Iterator[Containe band_python_kit_image, name_prefix="band-python-kit-test" ) as container: yield container + + +@pytest.fixture +async def live_containerized_agent( + band_python_kit_image: Image, + resource_manager: ResourceManager, # noqa: F811 -- pytest fixture injection, not the import above + baseline_settings: BaselineSettings, # noqa: F811 -- same +) -> AsyncIterator[tuple[ProvisionedAgent, str]]: + """A real agent's echo process, running in a real container, plus the + room it's in — yields ``(agent, room_id)`` for a test to send a turn to.""" + async with live_containerized_echo_agent( + band_python_kit_image, + resource_manager, + baseline_settings, + label="live-container", + ) as result: + yield result diff --git a/tests/docker/echo_agent.py b/tests/docker/echo_agent.py new file mode 100644 index 00000000..6000f686 --- /dev/null +++ b/tests/docker/echo_agent.py @@ -0,0 +1,53 @@ +"""Minimal echo agent, run inside a real band-python-kit container. + +Not a pytest test module (no test_* functions) — this is real, standalone, +ruff-checked Python whose *source text* gets shipped into a container and +run via `$BAND_SDK_PYTHON -c ` (see tests/docker/toolkit/live_agent.py). +Keeping it a real file rather than an inline string literal means a rename +or signature change in band.core.simple_adapter/Agent.create shows up here +too, instead of silently drifting until the live test actually runs it. + +Core band-sdk only (SimpleAdapter, no framework) — matches the image's +core-only default build (no SDK_EXTRA). Echoes every message, including the +first: is_session_bootstrap is True for a room's first message, but the +live test's whole scenario *is* one message in a brand-new room, so there's +no "later, real" turn to defer replying to. +""" + +from __future__ import annotations + +import asyncio +import os + +from band import Agent +from band.core.simple_adapter import SimpleAdapter + + +class EchoAdapter(SimpleAdapter[str]): + async def on_message( + self, + msg, + tools, + history, + participants_msg, + contacts_msg, + *, + is_session_bootstrap, + room_id, + ): + await tools.send_message(f"echo: {msg.content}", mentions=[msg.sender_id]) + + +async def main() -> None: + agent = Agent.create( + adapter=EchoAdapter(), + agent_id=os.environ["BAND_AGENT_ID"], + api_key=os.environ["BAND_API_KEY"], + ws_url=os.environ["BAND_WS_URL"], + rest_url=os.environ["BAND_REST_URL"], + ) + await agent.run() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index 82a6e4de..34e0e6ec 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -17,8 +17,15 @@ # own httpx (0.28.1 as of writing) — not just a different patch version. CONFLICTING_HTTPX_VERSION = "0.13.3" +# The repo-wide 30s pytest-timeout default (pyproject.toml) covers fixture +# setup too, so it bounds the session-scoped image build — well under +# Image.build()'s own 600s subprocess timeout, on a machine with no cached +# layers. 660 = that 600s ceiling + margin for the rest of this test's body. +_BUILD_TEST_TIMEOUT = 660 + @pytest.mark.docker_build +@pytest.mark.timeout(_BUILD_TEST_TIMEOUT) def test_conflicting_customer_pin_does_not_break_sdk_venv( band_python_kit_container: Container, ) -> None: diff --git a/tests/docker/test_band_python_kit_live.py b/tests/docker/test_band_python_kit_live.py index 1660ba42..0fa82838 100644 --- a/tests/docker/test_band_python_kit_live.py +++ b/tests/docker/test_band_python_kit_live.py @@ -8,23 +8,21 @@ Deliberately outside tests/e2e/baseline/'s adapter matrix: there is no framework adapter here, just the raw SDK running inside the actual -container, so @per_adapter/@with_adapters would not fit. Provisioning and -the reply barrier reuse the baseline toolkit's fixtures directly instead. +container, so @per_adapter/@with_adapters would not fit. Provisioning, +the container, and its echo agent are fixture-only (tests/docker/conftest.py +/ tests/docker/toolkit/live_agent.py) — this file is scenario only. """ from __future__ import annotations import pytest -from tests.docker.toolkit.docker_cli import Container, Image from tests.e2e.baseline.settings import BaselineSettings from tests.e2e.baseline.toolkit.capture import CaptureFactory -from tests.e2e.baseline.toolkit.provisioning import ResourceManager +from tests.e2e.baseline.toolkit.provisioning import ProvisionedAgent from tests.e2e.baseline.toolkit.user_ops import UserOps from tests.toolkit.timeouts import backstop_timeout -SDK_PYTHON = "$BAND_SDK_PYTHON" - # tests/e2e/baseline/conftest.py auto-applies effective_timeout() to every # test under its own directory; this test lives in tests/docker/, outside # that scope, so the same backstop has to be applied explicitly here. Extra @@ -32,77 +30,25 @@ # of a normal in-process live turn. _LIVE_TEST_TIMEOUT = backstop_timeout(BaselineSettings().e2e_timeout, extra_s=90) -# Core band-sdk only (SimpleAdapter, no framework) — matches the image's -# core-only default build (no SDK_EXTRA). Echoes every message, including the -# first: is_session_bootstrap is True for a room's first message, but this -# test's whole scenario *is* one message in a brand-new room, so there's no -# "later, real" turn to defer replying to. -ECHO_AGENT_SCRIPT = """ -import asyncio -import os - -from band import Agent -from band.core.simple_adapter import SimpleAdapter - - -class EchoAdapter(SimpleAdapter[str]): - async def on_message( - self, msg, tools, history, participants_msg, contacts_msg, - *, is_session_bootstrap, room_id, - ): - await tools.send_message(f"echo: {msg.content}", mentions=[msg.sender_id]) - - -async def main() -> None: - agent = Agent.create( - adapter=EchoAdapter(), - agent_id=os.environ["BAND_AGENT_ID"], - api_key=os.environ["BAND_API_KEY"], - ws_url=os.environ["BAND_WS_URL"], - rest_url=os.environ["BAND_REST_URL"], - ) - await agent.run() - - -asyncio.run(main()) -""" - @pytest.mark.docker_build @pytest.mark.e2e @pytest.mark.asyncio(loop_scope="session") @pytest.mark.timeout(_LIVE_TEST_TIMEOUT) async def test_containerized_agent_replies_over_live_platform( - band_python_kit_image: Image, - resource_manager: ResourceManager, + live_containerized_agent: tuple[ProvisionedAgent, str], user_ops: UserOps, reply_capture: CaptureFactory, - baseline_settings: BaselineSettings, ) -> None: """An agent running the baked SDK inside the real image, over the real platform, actually receives a message and replies to it.""" - agent = await resource_manager.provision_agent("live-container") - room_id = await resource_manager.provision_room(participants=[agent.id]) + agent, room_id = live_containerized_agent - with Container.run( - band_python_kit_image, - name_prefix="band-python-kit-live-test", - env={ - "BAND_AGENT_ID": agent.id, - "BAND_API_KEY": agent.api_key, - "BAND_WS_URL": baseline_settings.endpoints.ws_url, - "BAND_REST_URL": baseline_settings.endpoints.rest_url, - }, - ) as container: - container.run_python_background( - ECHO_AGENT_SCRIPT, interpreter=SDK_PYTHON, user="agent" + async with reply_capture(room_id) as capture: + mid = await user_ops.send_message( + room_id, "ping", mention_id=agent.id, mention_name=agent.name ) - - async with reply_capture(room_id) as capture: - mid = await user_ops.send_message( - room_id, "ping", mention_id=agent.id, mention_name=agent.name - ) - replies = await capture.wait_for_reply(mid, agent.id) + replies = await capture.wait_for_reply(mid, agent.id) # msg.content carries the platform's literal mention token ahead of the # text (e.g. "@[[agent-id]]/agent-name ping"), not just the bare text, so diff --git a/tests/docker/toolkit/live_agent.py b/tests/docker/toolkit/live_agent.py new file mode 100644 index 00000000..225be691 --- /dev/null +++ b/tests/docker/toolkit/live_agent.py @@ -0,0 +1,54 @@ +"""Provision + run a real containerized echo agent against a live platform. + +Bundles what a live container-based test needs to get to the actual +scenario: a provisioned agent identity, a room, and that agent's echo +process running inside a real container as the non-root ``agent`` user. +Lives here (not in docker_cli.py) because it's band/agent-specific, not +generic Docker plumbing. +""" + +from __future__ import annotations + +from collections.abc import AsyncIterator +from contextlib import asynccontextmanager +from pathlib import Path + +from tests.docker.toolkit.docker_cli import Container, Image +from tests.e2e.baseline.settings import BaselineSettings +from tests.e2e.baseline.toolkit.provisioning import ProvisionedAgent, ResourceManager + +SDK_PYTHON = "$BAND_SDK_PYTHON" + +# Real, standalone, ruff-checked script (tests/docker/echo_agent.py) — read as +# text and shipped into the container via `$BAND_SDK_PYTHON -c `, so a +# refactor there shows up here instead of silently drifting until this runs. +ECHO_AGENT_SCRIPT = (Path(__file__).parents[1] / "echo_agent.py").read_text() + + +@asynccontextmanager +async def live_containerized_echo_agent( + image: Image, + resource_manager: ResourceManager, + baseline_settings: BaselineSettings, + *, + label: str, +) -> AsyncIterator[tuple[ProvisionedAgent, str]]: + """Provision an agent + room, run its echo process in a real container, + and yield ``(agent, room_id)`` for the caller to drive a turn against.""" + agent = await resource_manager.provision_agent(label) + room_id = await resource_manager.provision_room(participants=[agent.id]) + + with Container.run( + image, + name_prefix="band-python-kit-live-test", + env={ + "BAND_AGENT_ID": agent.id, + "BAND_API_KEY": agent.api_key, + "BAND_WS_URL": baseline_settings.endpoints.ws_url, + "BAND_REST_URL": baseline_settings.endpoints.rest_url, + }, + ) as container: + container.run_python_background( + ECHO_AGENT_SCRIPT, interpreter=SDK_PYTHON, user="agent" + ) + yield agent, room_id From 33d4c987b77102c88b4a57fb75447f9949cc43a0 Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 12:42:04 +0300 Subject: [PATCH 11/15] fix: entrypoint path independence + build-timeout DRY [INT-977] Code review findings, both verified live before fixing: [P2 CONFIRMED] --build-arg BAND_SDK_HOME=/srv/band correctly relocated the venv and entrypoint.sh, but ENTRYPOINT's exec-form JSON array is one of the few Dockerfile instructions Docker does not substitute ARG/ENV into, so it stayed hardcoded at /opt/band/entrypoint.sh -- reproduced: container failed outright ("stat /opt/band/entrypoint.sh: no such file or directory"). Fixed by decoupling the entrypoint script's location from the configurable SDK home: it now always copies to a fixed system path (/usr/local/bin/band-entrypoint.sh, matching how uv/uvx are placed there too), so no --build-arg override can ever break it. Kept exec-form ENTRYPOINT rather than switching to shell-form to gain variable expansion -- that would trade away correct SIGTERM forwarding to PID 1 for a rarely-used customization path. Verified: both the default build and a BAND_SDK_HOME override now start correctly and drop privileges to `agent` as expected. [P2 CONFIRMED] The live test's timeout only budgeted the live-turn backstop (210s), not the session-scoped image-build fixture it shares with the sibling pin test (which explicitly budgets for a 600s cold build). If this file is selected alone on a machine with no cached layers, a valid cold build could get killed well before Image.build()'s own ceiling. Fixed by DRYing that ceiling into a named BUILD_TIMEOUT_S constant in docker_cli.py (was a bare 600 literal) and having both tests' timeouts derive from it, so they can't drift apart again. [P2 PARTIALLY RIGHT] The live-agent fixture yields right after `docker exec -d` launches the echo process, without an explicit readiness wait. Verified the underlying claim is real at the raw protocol level (a bare Phoenix channel subscribe does not replay a message sent before it joins -- 0 received in a direct test), but the predicted consequence for this fixture doesn't reproduce: Agent.start() does REST-based room reconciliation on startup, which picks up a message sent to a room the agent is already a participant of regardless of live-WS timing. Verified empirically with an injected 5s pre-connect delay (~25x measured `import band` overhead) -- reply still arrived. Documented the reasoning and its scope (relies on the bootstrap/first- message path) in the fixture rather than adding synchronization machinery for a risk that's empirically absent in the current scenario. Verified: both docker_build tests pass (pin-isolation and live, against dev end-to-end), default run still skips both, cleanup confirmed empty, ruff+pyrefly clean, full standard suite (3798 passed) unaffected. --- docker/band_python_kit/Dockerfile | 11 ++++++++--- tests/docker/test_band_python_kit.py | 8 ++++---- tests/docker/test_band_python_kit_live.py | 15 +++++++++++---- tests/docker/toolkit/docker_cli.py | 9 ++++++++- tests/docker/toolkit/live_agent.py | 19 ++++++++++++++++++- 5 files changed, 49 insertions(+), 13 deletions(-) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index f111c0ef..687c3693 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -95,8 +95,13 @@ RUN chmod -R a-w ${BAND_SDK_HOME} # added to PATH, so it can never shadow the customer's own venv at runtime. ENV BAND_SDK_PYTHON=${BAND_SDK_HOME}/venv/bin/python -COPY docker/band_python_kit/entrypoint.sh ${BAND_SDK_HOME}/entrypoint.sh -RUN chmod +x ${BAND_SDK_HOME}/entrypoint.sh +# Fixed system path, deliberately NOT under ${BAND_SDK_HOME}: ENTRYPOINT's +# exec-form JSON array is one of the few Dockerfile instructions Docker does +# NOT substitute ARG/ENV into, so a literal path is unavoidable here — keep +# it independent of the configurable SDK home rather than letting a +# --build-arg BAND_SDK_HOME override silently break container startup. +COPY docker/band_python_kit/entrypoint.sh /usr/local/bin/band-entrypoint.sh +RUN chmod +x /usr/local/bin/band-entrypoint.sh RUN useradd -m -u 1000 -s /bin/bash agent ENV HOME=/home/agent @@ -105,5 +110,5 @@ WORKDIR /home/agent # Container starts as root: the entrypoint decodes the sandbox's per-session # proxy CA (only root can update the system trust store), then drops to the # non-root "agent" user via setpriv before handing off to CMD. -ENTRYPOINT ["/opt/band/entrypoint.sh"] +ENTRYPOINT ["/usr/local/bin/band-entrypoint.sh"] CMD ["bash"] diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index 34e0e6ec..56721d5d 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -9,7 +9,7 @@ import pytest -from tests.docker.toolkit.docker_cli import Container +from tests.docker.toolkit.docker_cli import BUILD_TIMEOUT_S, Container SDK_PYTHON = "$BAND_SDK_PYTHON" @@ -19,9 +19,9 @@ # The repo-wide 30s pytest-timeout default (pyproject.toml) covers fixture # setup too, so it bounds the session-scoped image build — well under -# Image.build()'s own 600s subprocess timeout, on a machine with no cached -# layers. 660 = that 600s ceiling + margin for the rest of this test's body. -_BUILD_TEST_TIMEOUT = 660 +# Image.build()'s own BUILD_TIMEOUT_S, on a machine with no cached layers. +# +60 margin for the rest of this test's (fast) body. +_BUILD_TEST_TIMEOUT = BUILD_TIMEOUT_S + 60 @pytest.mark.docker_build diff --git a/tests/docker/test_band_python_kit_live.py b/tests/docker/test_band_python_kit_live.py index 0fa82838..28762292 100644 --- a/tests/docker/test_band_python_kit_live.py +++ b/tests/docker/test_band_python_kit_live.py @@ -17,6 +17,7 @@ import pytest +from tests.docker.toolkit.docker_cli import BUILD_TIMEOUT_S from tests.e2e.baseline.settings import BaselineSettings from tests.e2e.baseline.toolkit.capture import CaptureFactory from tests.e2e.baseline.toolkit.provisioning import ProvisionedAgent @@ -25,10 +26,16 @@ # tests/e2e/baseline/conftest.py auto-applies effective_timeout() to every # test under its own directory; this test lives in tests/docker/, outside -# that scope, so the same backstop has to be applied explicitly here. Extra -# margin (vs. the default 60s) covers docker build/run/exec overhead on top -# of a normal in-process live turn. -_LIVE_TEST_TIMEOUT = backstop_timeout(BaselineSettings().e2e_timeout, extra_s=90) +# that scope, so the same backstop has to be applied explicitly here. This +# test also depends on the same session-scoped image-build fixture as the +# sibling pin test — if this file is selected alone on a machine with no +# cached layers, that build runs under *this* test's timeout, so it needs +# the same BUILD_TIMEOUT_S ceiling added on top of the live-turn budget +# (not just the turn budget alone, which was the bug: a cold build could +# get killed long before Image.build()'s own 600s allowance was reached). +_LIVE_TEST_TIMEOUT = BUILD_TIMEOUT_S + backstop_timeout( + BaselineSettings().e2e_timeout, extra_s=90 +) @pytest.mark.docker_build diff --git a/tests/docker/toolkit/docker_cli.py b/tests/docker/toolkit/docker_cli.py index 6c8fa9dd..a44767e6 100644 --- a/tests/docker/toolkit/docker_cli.py +++ b/tests/docker/toolkit/docker_cli.py @@ -20,6 +20,11 @@ REPO_ROOT = Path(__file__).resolve().parents[3] BAND_PYTHON_KIT_DOCKERFILE = REPO_ROOT / "docker" / "band_python_kit" / "Dockerfile" +# Image.build()'s own subprocess timeout, and the ceiling any test using it +# needs to add into its own @pytest.mark.timeout on top of the rest of its +# body's budget — named so the two can't drift apart again. +BUILD_TIMEOUT_S = 600 + @dataclass(frozen=True) class Image: @@ -47,7 +52,9 @@ def build( for key, value in (build_args or {}).items(): command += ["--build-arg", f"{key}={value}"] command.append(str(REPO_ROOT)) - subprocess.run(command, capture_output=True, text=True, check=True, timeout=600) + subprocess.run( + command, capture_output=True, text=True, check=True, timeout=BUILD_TIMEOUT_S + ) try: yield cls(tag) finally: diff --git a/tests/docker/toolkit/live_agent.py b/tests/docker/toolkit/live_agent.py index 225be691..97721c0c 100644 --- a/tests/docker/toolkit/live_agent.py +++ b/tests/docker/toolkit/live_agent.py @@ -34,7 +34,24 @@ async def live_containerized_echo_agent( label: str, ) -> AsyncIterator[tuple[ProvisionedAgent, str]]: """Provision an agent + room, run its echo process in a real container, - and yield ``(agent, room_id)`` for the caller to drive a turn against.""" + and yield ``(agent, room_id)`` for the caller to drive a turn against. + + Yields right after launching the echo process in the background + (``docker exec -d`` returns as soon as it's launched, not once it's + actually connected) without waiting for an explicit readiness signal. + That's deliberate, not an oversight: a bare Phoenix channel subscribe + does NOT replay a message sent before it joins (verified directly), but + ``Agent.start()`` doesn't just subscribe — it fetches room state via + REST as part of its own startup, which picks up a message sent to a + room the agent is already a participant of (true here: provision_room + adds it before the container even starts) regardless of live-WS + subscribe timing. Verified empirically: an injected 5s delay before + Agent.create() was even called (~25x the ~0.4s `import band` cost + measured on this machine) still got a reply. If this fixture is ever + reused for a scenario that ISN'T the room's first message (i.e. not + is_session_bootstrap), re-verify this holds — the bootstrap/hydrate + path is what's actually relied on here, not general message delivery. + """ agent = await resource_manager.provision_agent(label) room_id = await resource_manager.provision_room(participants=[agent.id]) From e9d428c38b158cb2f12f66a32ac81461b959f92e Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 13:14:20 +0300 Subject: [PATCH 12/15] docs: surface Docker Sandboxes base image [INT-977] --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index ecd0b5e6..6543cca5 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,17 @@ With `pip`, use the same package spec: pip install "band-sdk[langgraph]" ``` +### Docker Sandboxes + +Building an agent for [Docker Sandboxes](https://docs.docker.com/ai/sandboxes/)? +The repository includes a `band-python-kit` base image with the Band SDK in an +isolated, read-only virtual environment, automatic sandbox proxy-CA trust +wiring, and support for both arm64 and x86_64. + +See the [band-python-kit image guide](docker/band_python_kit/README.md) for +build options, framework extras, image layout, and direct Docker usage. The +declarative kit and published GHCR image are separate release deliverables. + --- ## Quickstart From b11026963613d507219ea36be9b45168d674670a Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 13:16:34 +0300 Subject: [PATCH 13/15] docs: remove issue references from implementation --- docker/band_python_kit/Dockerfile | 4 ++-- docker/band_python_kit/README.md | 4 ++-- tests/docker/test_band_python_kit.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index 687c3693..c7df9953 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -70,8 +70,8 @@ ENV DEBIAN_FRONTEND=noninteractive # bundle and never see certs update-ca-certificates adds at sandbox runtime. # git + openssh-client: band.docker.repo_init (always in the baked venv, part # of core band-sdk) shells out to git for clone/checkout/rev-parse and to -# ssh-keygen for SSH host-key verification — both needed here since this -# image is what INT-978's launcher runs repo_init from, not a later layer. +# ssh-keygen for SSH host-key verification — both are needed in the base +# runtime image because repo initialization runs directly inside it. RUN apt-get update && apt-get install -y --no-install-recommends \ bash \ ca-certificates \ diff --git a/docker/band_python_kit/README.md b/docker/band_python_kit/README.md index 277cb214..3e377ba8 100644 --- a/docker/band_python_kit/README.md +++ b/docker/band_python_kit/README.md @@ -6,8 +6,8 @@ connected to Band. This image provides the immutable Band SDK layer; the customer's own framework lives in a separate venv created at sandbox runtime (not part of this image). -Publishes to `ghcr.io/thenvoi/band-python-kit` (see INT-979 for the publish -workflow). This README covers building and running the image directly. +The publishing workflow is a separate release deliverable. This README covers +building and running the image directly. ## Build diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index 56721d5d..f53de60e 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -36,8 +36,8 @@ def test_conflicting_customer_pin_does_not_break_sdk_venv( ) assert baseline_httpx, "expected the baked SDK venv to report an httpx version" - # Simulate the customer venv INT-978's launcher creates at sandbox - # runtime, with a deliberately ancient, conflicting httpx pin. + # Simulate the customer venv created at sandbox runtime, with a + # deliberately ancient, conflicting httpx pin. band_python_kit_container.exec( "python3 -m venv /tmp/customer-venv && " f"/tmp/customer-venv/bin/pip install --quiet 'httpx=={CONFLICTING_HTTPX_VERSION}'" From 8ce0046440efbff6239eb980f3319c2cc5aed38f Mon Sep 17 00:00:00 2001 From: Alexander Zaikman Date: Thu, 16 Jul 2026 16:05:42 +0300 Subject: [PATCH 14/15] fix: ship the pinned uv in the runtime image at $BAND_SDK_UV [INT-977] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The base-image contract requires the digest-pinned uv at a fixed image-owned path so the sandbox launcher can run locked customer-venv sync without ever downloading uv at runtime — but the binary was only copied into the builder stage. Copy it into the runtime stage under the read-only SDK home, off PATH (same rationale as BAND_SDK_PYTHON), and cover it with a docker-gated test that runs as the non-root agent user, the launcher's actual uid after the entrypoint's privilege drop. Co-Authored-By: Claude Fable 5 --- docker/band_python_kit/Dockerfile | 8 ++++++++ docker/band_python_kit/README.md | 1 + tests/docker/test_band_python_kit.py | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index c7df9953..872457e1 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -89,11 +89,19 @@ ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ # point (band-acp, band-trigger, ...) pointing at the deleted builder path. ENV BAND_SDK_HOME=${BAND_SDK_HOME} COPY --from=builder ${BAND_SDK_HOME}/venv ${BAND_SDK_HOME}/venv +# Same digest-pinned uv as the build stage, for the sandbox launcher's locked +# customer-venv sync (`uv sync --locked`) at runtime. Lives under the +# read-only SDK home and stays off PATH for the same reason as +# BAND_SDK_PYTHON: the customer's own tooling must never be shadowed. +COPY --from=uv /uv ${BAND_SDK_HOME}/bin/uv RUN chmod -R a-w ${BAND_SDK_HOME} # Fixed, absolute interpreter path for launching the SDK. Deliberately not # added to PATH, so it can never shadow the customer's own venv at runtime. ENV BAND_SDK_PYTHON=${BAND_SDK_HOME}/venv/bin/python +# Fixed, absolute path to the pinned uv binary; the launcher must use this +# and never download or upgrade uv at runtime. +ENV BAND_SDK_UV=${BAND_SDK_HOME}/bin/uv # Fixed system path, deliberately NOT under ${BAND_SDK_HOME}: ENTRYPOINT's # exec-form JSON array is one of the few Dockerfile instructions Docker does diff --git a/docker/band_python_kit/README.md b/docker/band_python_kit/README.md index 3e377ba8..a653110c 100644 --- a/docker/band_python_kit/README.md +++ b/docker/band_python_kit/README.md @@ -47,6 +47,7 @@ docker buildx build --platform linux/amd64,linux/arm64 \ |---|---| | `$BAND_SDK_HOME` (`/opt/band`) | Root of the baked SDK install. Read-only to every user, including root, after build (`chmod -R a-w`). | | `$BAND_SDK_PYTHON` (`/opt/band/venv/bin/python`) | Fixed, absolute interpreter for the Band SDK. **Not on `PATH`** — the SDK venv can never shadow the customer's own venv or interpreter. Invoke the SDK only via this path. | +| `$BAND_SDK_UV` (`/opt/band/bin/uv`) | The build's digest-pinned `uv`, for the sandbox launcher's locked customer-venv sync at runtime. **Not on `PATH`**, read-only like the rest of `$BAND_SDK_HOME`; never downloaded or upgraded at runtime. | | `agent` (uid 1000, `$HOME=/home/agent`) | The non-root user every process ends up running as. Matches the sandbox's `$HOME`-mounted workspace convention. | ## CA trust diff --git a/tests/docker/test_band_python_kit.py b/tests/docker/test_band_python_kit.py index f53de60e..34adddde 100644 --- a/tests/docker/test_band_python_kit.py +++ b/tests/docker/test_band_python_kit.py @@ -12,6 +12,7 @@ from tests.docker.toolkit.docker_cli import BUILD_TIMEOUT_S, Container SDK_PYTHON = "$BAND_SDK_PYTHON" +SDK_UV = "$BAND_SDK_UV" # Ancient enough to be a real, meaningful API break against the SDK venv's # own httpx (0.28.1 as of writing) — not just a different patch version. @@ -24,6 +25,21 @@ _BUILD_TEST_TIMEOUT = BUILD_TIMEOUT_S + 60 +@pytest.mark.docker_build +@pytest.mark.timeout(_BUILD_TEST_TIMEOUT) +def test_pinned_uv_available_in_runtime_image( + band_python_kit_container: Container, +) -> None: + """The runtime image must carry the build's pinned uv at $BAND_SDK_UV — + the sandbox launcher runs it for locked customer-venv sync and must never + download uv at runtime. Runs as the non-root agent user, the launcher's + actual uid after the entrypoint's privilege drop.""" + version = band_python_kit_container.exec(f'"{SDK_UV}" --version', user="agent") + assert version.startswith("uv "), ( + f"expected {SDK_UV} to run and report a version, got {version!r}" + ) + + @pytest.mark.docker_build @pytest.mark.timeout(_BUILD_TEST_TIMEOUT) def test_conflicting_customer_pin_does_not_break_sdk_venv( From 9dba68220bbae1147d93dcd84cc23735ee5d3249 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 17 Jul 2026 15:39:18 +0000 Subject: [PATCH 15/15] fix: address band-python-kit PR review comments - Dockerfile: clarify the [tool.uv.sources] sed as a defensive no-op guard against a developer's local override, not a load-bearing step. - Dockerfile: install util-linux explicitly (provides setpriv used by the entrypoint privilege drop) so startup can't break on a base image bump. - Dockerfile + entrypoint.sh: install openssl and validate the decoded proxy CA with `openssl x509` before trusting it, failing loud instead of silently leaving trust unwired when the payload decodes but isn't valid PEM. - Dockerfile: make DEBIAN_FRONTEND a build-only ARG in both stages so it doesn't leak into the final runtime image env. - echo_agent.py: read config via pydantic-settings BaseSettings instead of os.environ, matching the repo standard (pydantic-settings is a core dep, so it is present in the image's core-only venv). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_014ozKPk28YZ7mBjNHG5RTmB --- docker/band_python_kit/Dockerfile | 20 +++++++++++++++++--- docker/band_python_kit/entrypoint.sh | 11 ++++++++++- tests/docker/echo_agent.py | 25 ++++++++++++++++++++----- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/docker/band_python_kit/Dockerfile b/docker/band_python_kit/Dockerfile index 872457e1..4c3a925b 100644 --- a/docker/band_python_kit/Dockerfile +++ b/docker/band_python_kit/Dockerfile @@ -17,7 +17,8 @@ FROM ${UV_IMAGE} AS uv FROM ${PYTHON_BASE_IMAGE} AS builder ARG BAND_SDK_HOME -ENV DEBIAN_FRONTEND=noninteractive +# Build-only: ARG (not ENV) so it doesn't persist in any image env. +ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ git \ @@ -34,7 +35,11 @@ COPY src ./src RUN git config --global --add url."https://github.com/".insteadOf "git@github.com:" \ && git config --global --add url."https://github.com/".insteadOf "ssh://git@github.com/" -# Strip host-specific [tool.uv.sources] overrides so uv resolves from the registry. +# Defensive guard — a no-op against the committed pyproject.toml, which has no +# [tool.uv.sources] section. Strips any such section a developer's local +# override might introduce so it can't leak a filesystem/git source path into +# the image build; `uv sync --locked` below then resolves from the registry +# (and fails loud on a stale lock rather than pulling from a local source). RUN sed -i '/^\[tool\.uv\.sources\]/,/^\[/{ /^\[tool\.uv\.sources\]/d; /^\[/!d; }' pyproject.toml # Core-only by default: this venv is baked once and never touched again. @@ -60,7 +65,8 @@ RUN if [ -n "$SDK_EXTRA" ]; then \ FROM ${PYTHON_BASE_IMAGE} ARG BAND_SDK_HOME -ENV DEBIAN_FRONTEND=noninteractive +# Build-only: ARG (not ENV) so it doesn't leak into the final runtime image env. +ARG DEBIAN_FRONTEND=noninteractive # ca-certificates provides the system trust store that the sandbox's # session-generated proxy CA is installed into at runtime. No proxy env vars @@ -72,11 +78,19 @@ ENV DEBIAN_FRONTEND=noninteractive # of core band-sdk) shells out to git for clone/checkout/rev-parse and to # ssh-keygen for SSH host-key verification — both are needed in the base # runtime image because repo initialization runs directly inside it. +# util-linux: provides setpriv, which entrypoint.sh uses to drop from root to +# the non-root agent user. Essential in trixie-slim (so present today), but +# install it explicitly so container startup doesn't silently break on a base +# bump that stops shipping it. +# openssl: entrypoint.sh validates the decoded proxy CA with `openssl x509` +# before trusting it, so the CLI must be present in the runtime image. RUN apt-get update && apt-get install -y --no-install-recommends \ bash \ ca-certificates \ git \ openssh-client \ + openssl \ + util-linux \ && rm -rf /var/lib/apt/lists/* ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ diff --git a/docker/band_python_kit/entrypoint.sh b/docker/band_python_kit/entrypoint.sh index 58e2a915..dd5cd4f7 100644 --- a/docker/band_python_kit/entrypoint.sh +++ b/docker/band_python_kit/entrypoint.sh @@ -9,7 +9,16 @@ set -euo pipefail # The proxy CA is session-generated per sandbox, so it can only be installed # at container start, not baked into the image. Runs while still root. if [[ -n "${PROXY_CA_CERT_B64:-}" ]]; then - base64 -d <<<"${PROXY_CA_CERT_B64}" > /usr/local/share/ca-certificates/sandbox-proxy-ca.crt + ca_path=/usr/local/share/ca-certificates/sandbox-proxy-ca.crt + base64 -d <<<"${PROXY_CA_CERT_B64}" > "${ca_path}" + # A base64 payload that decodes cleanly but isn't a PEM certificate would be + # silently skipped by update-ca-certificates, leaving trust unwired and + # every TLS call failing with an opaque error deep in the sandbox. Validate + # up front and fail loud instead. (Invalid base64 already fails under -e.) + if ! openssl x509 -noout -in "${ca_path}" >/dev/null 2>&1; then + echo "[band-python-kit] ERROR: PROXY_CA_CERT_B64 did not decode to a valid PEM certificate" >&2 + exit 1 + fi update-ca-certificates >/dev/null fi diff --git a/tests/docker/echo_agent.py b/tests/docker/echo_agent.py index 6000f686..4acebde3 100644 --- a/tests/docker/echo_agent.py +++ b/tests/docker/echo_agent.py @@ -17,12 +17,26 @@ from __future__ import annotations import asyncio -import os + +from pydantic_settings import BaseSettings, SettingsConfigDict from band import Agent from band.core.simple_adapter import SimpleAdapter +class EchoAgentSettings(BaseSettings): + """Container-injected config. pydantic-settings is a core band-sdk + dependency, so it's present in the image's core-only venv that runs this + script via ``$BAND_SDK_PYTHON -c ``.""" + + model_config = SettingsConfigDict(env_prefix="BAND_", case_sensitive=False) + + agent_id: str # BAND_AGENT_ID + api_key: str # BAND_API_KEY + ws_url: str # BAND_WS_URL + rest_url: str # BAND_REST_URL + + class EchoAdapter(SimpleAdapter[str]): async def on_message( self, @@ -39,12 +53,13 @@ async def on_message( async def main() -> None: + settings = EchoAgentSettings() agent = Agent.create( adapter=EchoAdapter(), - agent_id=os.environ["BAND_AGENT_ID"], - api_key=os.environ["BAND_API_KEY"], - ws_url=os.environ["BAND_WS_URL"], - rest_url=os.environ["BAND_REST_URL"], + agent_id=settings.agent_id, + api_key=settings.api_key, + ws_url=settings.ws_url, + rest_url=settings.rest_url, ) await agent.run()