- First stable release. Requires
caveman-sdk1.2.0 or later
(caveman-sdk>=1.2,<2): 1.1.0 lacks APIs the adapters import. caveman_middleware.__version__is read from the installed distribution.- A refused
caveman_retrieve(an unknown or expired handle, or a
404/410/503) returns{"error": code}through each framework's tool-error
result and warns once. The run carries on, and cancellation still
propagates. - Recovery arguments that are not an object with a string
handle(None,
a list) return{"error": "invalid_request"}in the OpenAI, Anthropic and
MCP adapters. - Wrapping a client, agent or model twice runs one Caveman layer instead of
stacking middleware and turning compression off. - A wrapped
AnthropicBedrockclient keepsaws_profile, so calls are signed
with the caller's AWS identity. - LiteLLM registers one process-wide callback however many instances are
live, so the host's own callbacks are never dropped. - Importing an adapter whose framework is out of range names the installed
version and the supported range. - Every reported reason is a spec §8 catalog code. Calls that were never LLM
calls (embeddings, token counting, non-LLM ASGI routes) report nothing. Adapter.versionis the installed package version.- Strands 1.43 recovery no longer fails on a missing
cancel_signal. - CI tests the installed wheel, adds a Python 3.14 lane and classifier, and
watchestests/middleware-e2e/**. recovery_name_conflictnow reacheson_diagnostic, and strictready()
raises it.- Version-gate warnings name the adapter through
decline(), on both sync
and async runtimes. - Every adapter fails open: outside strict mode, an adapter or runtime error
sends the original request and records a reason code (adapter_errorfor
adapter bugs). Strict mode raisesMiddlewareError. Every pass-through
reason is logged once oncaveman.middleware. - Version gate: a framework outside its tested range is skipped with
unsupported_versionand one warning.accept_framework_version=True
overrides it, and an unreadable version runs withversion_unverified. New
preflight()andready()for startup checks;COMPATIBILITYlists tiers
and ranges. - Certified tier: langchain, openai, anthropic, litellm. Everything else is
experimental. - openai 2.x (httpx) and 3.x (httpx2) are both supported, so importing the
adapter no longer fails withNo module named 'httpx2'. Stored Responses
calls pass through withprovider_state_retainedunlessstore=Falseor
allow_stored_responses=True. - Anthropic Bedrock and Vertex clients are supported.
- An existing
caveman_retrievetool no longer raises: recovery is disabled
for that registration andrecovery_name_conflictis logged once. - Free-form thread and session ids are hashed into valid scopes. A missing
scope passes through instead of failing the agent call. - Adapters accept a sync or async runtime on either code path.
- Long histories are budgeted (
manifest_bytes, 2 MiB), and bytes and images
are hashed instead of skipping the call. ASGI reportspayload_budgetfor
oversize bodies and no longer requires fastapi or starlette. - Google: wrapping returns clones and never mutates or closes your client, and
unwrap_google()returns the original. - LiteLLM: bounded in-flight state, sync Router support for OpenAI and
Anthropic,unsupported_providerfor other providers. - CrewAI registers its hooks once per process. AutoGen lists workbench tools
once per turn. - Accepted ranges now match the lowest versions actually tested. Python 3.11–3.13.
Thepydantic-aiextra usespydantic-ai-slim. - CI: floor and latest lanes with constraints files, and a nightly canary that
opens an issue on failure. - Breaking (license): relicensed from MIT to Apache-2.0, along with the rest of
the repository in Caveman 3.0.0. Releases before this one keep the MIT license. - Release process: each release gets a GitHub Release with these notes and a
CycloneDX SBOM of its dependency graph.
Verify this release
- Registry provenance (trusted publishing from this workflow): https://pypi.org/project/caveman-middleware/1.0.0/#files
- CycloneDX SBOM of the published dependency graph: attached
.cdx.json - Built from annotated, GitHub-verified tag
middleware-python-v1.0.0onmain