diff --git a/.github/workflows/ci-tests-splunk-ao-a2a.yaml b/.github/workflows/ci-tests-splunk-ao-a2a.yaml index 6addb969..d66a40b7 100644 --- a/.github/workflows/ci-tests-splunk-ao-a2a.yaml +++ b/.github/workflows/ci-tests-splunk-ao-a2a.yaml @@ -43,7 +43,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6 with: - version: "0.12.1" + version: "0.13.4" enable-cache: true cache-dependency-glob: "**/splunk-ao-a2a/pyproject.toml" diff --git a/.github/workflows/ci-tests-splunk-ao-adk.yaml b/.github/workflows/ci-tests-splunk-ao-adk.yaml index 42e248b9..9e38d3db 100644 --- a/.github/workflows/ci-tests-splunk-ao-adk.yaml +++ b/.github/workflows/ci-tests-splunk-ao-adk.yaml @@ -43,7 +43,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6 with: - version: "0.12.1" + version: "0.13.4" enable-cache: true cache-dependency-glob: "**/splunk-ao-adk/pyproject.toml" diff --git a/CHANGELOG.md b/CHANGELOG.md index 72556781..fec4614c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.0] + ### Added - `create_decision_evaluator()` (also `Evaluators.create_decision_evaluator`) and `DecisionEvaluator` create and @@ -19,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Require `certifi>=2026.10.19` and `uv>=0.13.4` (where used) to remove trust in the compromised + eMudhra certificate authorities (CVE-2026-111943). Update CI tooling and example certificate bundle pins. - `SplunkAOTracingProcessor` (OpenAI Agents) now records Responses API LLM spans, the Agents SDK default, as chat messages: tool calls and tool results keep their own roles instead of one JSON `user` message, the output is a single assistant message, and workflow/agent spans show the @@ -227,6 +231,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 unknown before an acknowledgement and after ordinary transport or non-2xx failures; it is not a delivery guarantee. +[0.6.0]: https://pypi.org/project/splunk-ao/0.6.0/ [0.5.0]: https://pypi.org/project/splunk-ao/0.5.0/ [0.4.0]: https://pypi.org/project/splunk-ao/0.4.0/ [0.3.0]: https://pypi.org/project/splunk-ao/0.3.0/ diff --git a/examples/agent/langgraph-fsi-agent/before/poetry.lock b/examples/agent/langgraph-fsi-agent/before/poetry.lock index 0ec5e364..205f93c2 100644 --- a/examples/agent/langgraph-fsi-agent/before/poetry.lock +++ b/examples/agent/langgraph-fsi-agent/before/poetry.lock @@ -318,14 +318,14 @@ files = [ [[package]] name = "certifi" -version = "2025.6.15" +version = "2026.10.19" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"}, - {file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"}, + {file = "certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b"}, + {file = "certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae"}, ] [[package]] diff --git a/examples/agent/minimal-agent-example/requirements.txt b/examples/agent/minimal-agent-example/requirements.txt index 5fe1dde3..8c93d1e7 100644 --- a/examples/agent/minimal-agent-example/requirements.txt +++ b/examples/agent/minimal-agent-example/requirements.txt @@ -7,7 +7,7 @@ aiohappyeyeballs==2.6.1 aiohttp==3.14.3 aiosignal==1.4.0 attrs==25.1.0 -certifi==2025.1.31 +certifi==2026.10.19 frozenlist==1.5.0 idna==3.15 multidict==6.1.0 diff --git a/examples/agent/startup-simulator-3000/requirements.txt b/examples/agent/startup-simulator-3000/requirements.txt index 2187e916..a24d9378 100644 --- a/examples/agent/startup-simulator-3000/requirements.txt +++ b/examples/agent/startup-simulator-3000/requirements.txt @@ -2,7 +2,7 @@ annotated-types==0.7.0 anyio==4.9.0 aiohttp==3.14.3 attrs==25.3.0 -certifi==2025.4.26 +certifi==2026.10.19 charset-normalizer==3.4.2 distro==1.9.0 splunk-ao @@ -53,4 +53,4 @@ xxhash==3.5.0 zstandard==0.23.0 rich flask -flask-cors \ No newline at end of file +flask-cors diff --git a/examples/logging-samples/openai-responses/requirements.txt b/examples/logging-samples/openai-responses/requirements.txt index d83e3f8f..b24f8d63 100644 --- a/examples/logging-samples/openai-responses/requirements.txt +++ b/examples/logging-samples/openai-responses/requirements.txt @@ -10,7 +10,7 @@ attrs==25.4.0 # via splunk-ao backoff==2.2.1 # via splunk-ao -certifi==2026.1.4 +certifi==2026.10.19 # via # httpcore # httpx diff --git a/examples/rag/cli-rag-demo/requirements.txt b/examples/rag/cli-rag-demo/requirements.txt index 6dcebed2..48157a8d 100644 --- a/examples/rag/cli-rag-demo/requirements.txt +++ b/examples/rag/cli-rag-demo/requirements.txt @@ -7,7 +7,7 @@ aiohappyeyeballs==2.6.1 aiohttp==3.14.3 aiosignal==1.4.0 attrs==25.1.0 -certifi==2025.1.31 +certifi==2026.10.19 frozenlist==1.5.0 idna==3.15 multidict==6.1.0 diff --git a/examples/rag/elastic-chatbot-rag-app/requirements.txt b/examples/rag/elastic-chatbot-rag-app/requirements.txt index 07357dda..15695ec7 100644 --- a/examples/rag/elastic-chatbot-rag-app/requirements.txt +++ b/examples/rag/elastic-chatbot-rag-app/requirements.txt @@ -30,7 +30,7 @@ botocore==1.37.13 # s3transfer cachetools==5.5.2 # via google-auth -certifi==2025.1.31 +certifi==2026.10.19 # via # elastic-transport # httpcore @@ -532,4 +532,4 @@ opentelemetry-instrumentation-urllib3==0.52b0 elastic-opentelemetry-instrumentation-openai==0.6.1 splunk-ao -langgraph \ No newline at end of file +langgraph diff --git a/poetry.lock b/poetry.lock index 68a4dc3a..2deb77d3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -398,14 +398,14 @@ files = [ [[package]] name = "certifi" -version = "2025.8.3" +version = "2026.10.19" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main", "dev", "test"] files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b"}, + {file = "certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae"}, ] [[package]] @@ -5799,32 +5799,32 @@ markers = {main = "extra == \"langchain\" or extra == \"all\""} [[package]] name = "uv" -version = "0.12.3" +version = "0.13.4" description = "An extremely fast Python package and project manager, written in Rust." optional = true python-versions = ">=3.8" groups = ["main"] markers = "python_version <= \"3.13\" and (extra == \"crewai\" or extra == \"all\")" files = [ - {file = "uv-0.12.3-py3-none-linux_armv6l.whl", hash = "sha256:0c0561cd369002a5968e138ea477e86507a337b3ede44f441c90d85ed2f54714"}, - {file = "uv-0.12.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0550669163cc67d5a7dc8e1702bc011e4a075a4ae52ad50891be654fc6635e0d"}, - {file = "uv-0.12.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c99f2524fe4b11d74dec85cef9b4d8b725d142dec04cd237f1c06fbdae1ee54"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:ac21bea426ddf95fa76d8dc1f67350faed7b4a81951825cf2aaef99fc4144815"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:1e569258e17a536c1bd90a68935dc8250b0ecc81ba80efd814ed169c33de0f93"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8e5a2d2ce4ea511293f919357c427dab0f12104ebfdd6602727f5c38958c22"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:115e96e176fa3525ffb999572ec6041b915f15189403613ccefcc1f128f0ea0c"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:913dc068e906f459df892cac789e6e9e10ac9d6af0bbb3c36fcc09347b0c986c"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77fa7f501baa7c4d097b0c424914d7924db8e54f882c4f40056228ecf56feb98"}, - {file = "uv-0.12.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1482d1462b1aecd18ee33627363fe1c63d6a194f12d40d37efc446d9e0d800a1"}, - {file = "uv-0.12.3-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:248b6b282f96f98d79dddecd1b2acd1893efd84667321f26703feffff6433211"}, - {file = "uv-0.12.3-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:9201c7a1edadb07f64b695f17eac9db2d264eeb4b888c195aa11e7908d0ebf41"}, - {file = "uv-0.12.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6114afd294411995a761c4cde0b721d550ff6d2fc2312046e8403eca6adacda5"}, - {file = "uv-0.12.3-py3-none-musllinux_1_1_i686.whl", hash = "sha256:ba034f32abf966a101cf2434455faaf8d54dfacfff0d4b4c70d673f36e985728"}, - {file = "uv-0.12.3-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:13535c7d40faa7821c3763f5b6c605eef8556ea16277dc1a07a21203fd3c19e4"}, - {file = "uv-0.12.3-py3-none-win32.whl", hash = "sha256:67b639a56dd36193b55a3bcea10f9dffcab37ed3c1eb26e964e52896df0bb205"}, - {file = "uv-0.12.3-py3-none-win_amd64.whl", hash = "sha256:aeafd6e02b9a8d8beb447040bfc57ab172bdf244208f7147b4f7bbc327135797"}, - {file = "uv-0.12.3-py3-none-win_arm64.whl", hash = "sha256:59121ef7217567adf4af41f7d3b04e42abb0c6a11bc87c930b838f9354f9c651"}, - {file = "uv-0.12.3.tar.gz", hash = "sha256:1eb3fea456aea47489d92e10451c9129b7dd9fd8854c4eb17020ba68489d5d9a"}, + {file = "uv-0.13.4-py3-none-linux_armv6l.whl", hash = "sha256:205a4f93e568fb24f45a2f3834f1c0a8f1adb5f396bf473c71030ed707dce048"}, + {file = "uv-0.13.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b4bbacea78c9db136cd2ec3147cbfd9ed910b4db5e1877109bd74d0e73bb2eaf"}, + {file = "uv-0.13.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:95f4eb2b991b53b50ec2b18ab612fca8ba1e7a75a47af0331fb8bcd21da3eb03"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:e90ab42825587821096cb0d071e387468da38cfa22818c91f9c0b3c0453048e8"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:3a9dcb6762c3ba249d8c084315ba03839082af3ece3536cc4164ec735c351d68"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ae6ff2b07892379dc767c9064c2b8bbfac88e767edac7ce28e1b0f15d86abb4"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25cc14ff4fd8335d3be2cc493a621a003fdafcb0fb1c953c905daabe4def5ab8"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77062b02856c74697f48328d8a6583ab07e6da0a993e86c2db46f3d1da27c637"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb0e2028d9a8929884344afb7d91d0f65d9783f640d28aede89fca3602bedde9"}, + {file = "uv-0.13.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e4332791b4d55b6dde8695b7fa6079b26991519f44760887c5dfbd5ca4fe53"}, + {file = "uv-0.13.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7b3cdf868e5415631fe797b648c0d6945d38d388f23367bdd0b6332e80a1fcb0"}, + {file = "uv-0.13.4-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:4e6b08578c920b86910897f36bb6da7229c8e7e0187976570e2a538cb28b777e"}, + {file = "uv-0.13.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:d86a5dec8ab30c70519c71ca5085c8aaf28664836cbc600951cedaa3fc678cbf"}, + {file = "uv-0.13.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:5d89d1028c2e22977d9215cbb79cfe12559cb0c8a507a12e2f3a7e47930cf1bf"}, + {file = "uv-0.13.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:52b5c753a7c2d5f8323a70bb4c93118988356331d0758afa6446c81f974e7196"}, + {file = "uv-0.13.4-py3-none-win32.whl", hash = "sha256:d333f01852b817ba05612de31474739da1af7e5463d119b30a9c4331eba1f408"}, + {file = "uv-0.13.4-py3-none-win_amd64.whl", hash = "sha256:b2ff80397273fff0e02c20eacae6882834c811827d6fc08f658db156fe754386"}, + {file = "uv-0.13.4-py3-none-win_arm64.whl", hash = "sha256:deffa5a4afdb48f3e44fb26e80377d256b330ddcad0373daff4b54f6162b43a4"}, + {file = "uv-0.13.4.tar.gz", hash = "sha256:b0bff5b9a5061f7a35b1d0c1a94c19af134222c48eb7aadc42f85a038be1b248"}, ] [[package]] @@ -6706,4 +6706,4 @@ openai = ["cryptography", "mcp", "openai", "openai-agents", "packaging"] [metadata] lock-version = "2.1" python-versions = "^3.11,<3.15" -content-hash = "8219ff5a4bc2c3be82d45473a92cb251482d8b3b5c02ca3a41ef68432f52deb1" +content-hash = "1e65e08ec06b7be4173f279f9e1e2faa896e0948576c03d5c20d7d2fa38d2d8f" diff --git a/pyproject.toml b/pyproject.toml index 68b51b12..0354525e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "splunk-ao" -version = "0.5.0" +version = "0.6.0" description = "Splunk Agent Observability SDK for Python." authors = [{ name = "Splunk Inc." }] readme = "README.md" @@ -28,10 +28,10 @@ packages = [ [project.optional-dependencies] langchain = ["langchain-core", "langchain", "langsmith (>=0.8.0)"] openai = ["openai (>=2.8.0,<3.0.0)", "packaging (>=24.2,<25.0)", "openai-agents (>=0.4.0,<1.0.0)", "cryptography (>=50.0.0)", "mcp (>=1.27.2,<2)"] -crewai = ["crewai (>=0.152.0,<2.0.0); python_version < '3.14'", "litellm (>=1.83.14,<2.0.0); python_version < '3.14'", "uv (>=0.9.6); python_version < '3.14'", "aiohttp (>=3.14.1,<4); python_version < '3.14'", "cryptography (>=50.0.0)", "mcp (>=1.27.2,<2)", "pdfminer-six (>=20251107)"] +crewai = ["crewai (>=0.152.0,<2.0.0); python_version < '3.14'", "litellm (>=1.83.14,<2.0.0); python_version < '3.14'", "uv (>=0.13.4); python_version < '3.14'", "aiohttp (>=3.14.1,<4); python_version < '3.14'", "cryptography (>=50.0.0)", "mcp (>=1.27.2,<2)", "pdfminer-six (>=20251107)"] middleware = ["starlette"] distributed-tracing = ["aiohttp (>=3.14.1,<4)", "opentelemetry-instrumentation-fastapi (==0.59b0)", "opentelemetry-instrumentation-starlette (==0.59b0)", "opentelemetry-instrumentation-requests (==0.59b0)", "opentelemetry-instrumentation-httpx (==0.59b0)", "opentelemetry-instrumentation-aiohttp-client (==0.59b0)"] -all = ["langchain-core", "langchain", "langsmith (>=0.8.0)", "openai (>=2.8.0,<3.0.0)", "packaging (>=24.2,<25.0)", "openai-agents (>=0.4.0,<1.0.0)", "crewai (>=0.152.0,<2.0.0); python_version < '3.14'", "starlette", "litellm (>=1.83.14,<2.0.0); python_version < '3.14'", "uv (>=0.9.6); python_version < '3.14'", "aiohttp (>=3.14.1,<4)", "cryptography (>=50.0.0)", "mcp (>=1.27.2,<2)", "pdfminer-six (>=20251107)", "opentelemetry-instrumentation-fastapi (==0.59b0)", "opentelemetry-instrumentation-starlette (==0.59b0)", "opentelemetry-instrumentation-requests (==0.59b0)", "opentelemetry-instrumentation-httpx (==0.59b0)", "opentelemetry-instrumentation-aiohttp-client (==0.59b0)"] +all = ["langchain-core", "langchain", "langsmith (>=0.8.0)", "openai (>=2.8.0,<3.0.0)", "packaging (>=24.2,<25.0)", "openai-agents (>=0.4.0,<1.0.0)", "crewai (>=0.152.0,<2.0.0); python_version < '3.14'", "starlette", "litellm (>=1.83.14,<2.0.0); python_version < '3.14'", "uv (>=0.13.4); python_version < '3.14'", "aiohttp (>=3.14.1,<4)", "cryptography (>=50.0.0)", "mcp (>=1.27.2,<2)", "pdfminer-six (>=20251107)", "opentelemetry-instrumentation-fastapi (==0.59b0)", "opentelemetry-instrumentation-starlette (==0.59b0)", "opentelemetry-instrumentation-requests (==0.59b0)", "opentelemetry-instrumentation-httpx (==0.59b0)", "opentelemetry-instrumentation-aiohttp-client (==0.59b0)"] @@ -68,11 +68,13 @@ filelock = ">=3.20.1" idna = ">=3.15,<4" python-dotenv = ">=1.2.2" requests = ">=2.33.0" +# Exclude CA bundles that still trust the compromised eMudhra intermediates (CVE-2026-111943). +certifi = ">=2026.10.19" # Security floor only (VULN-106433 / CVE-2026-69247): not imported directly under src/; # pulled in transitively via pdfminer-six (crewai/all) and mcp -> pyjwt[crypto] (openai). # Do not remove as "unused". cryptography = { version = ">=50.0.0", optional = true } -uv = { version = ">=0.9.6", optional = true, python = ">=3.11,<3.14" } +uv = { version = ">=0.13.4", optional = true, python = ">=3.11,<3.14" } mcp = { version = ">=1.27.2,<2", optional = true } pdfminer-six = { version = ">=20251107", optional = true } diff --git a/splunk-ao-a2a/CHANGELOG.md b/splunk-ao-a2a/CHANGELOG.md index fb98ccbe..a6376dd9 100644 --- a/splunk-ao-a2a/CHANGELOG.md +++ b/splunk-ao-a2a/CHANGELOG.md @@ -2,6 +2,21 @@ ## Unreleased +## 0.2.0 + +### Changed + +- Raised the `python-dotenv` minimum version to `1.2.2` for the optional + examples dependencies. + +### Security + +- Require `uv>=0.13.4` for development and use `uv 0.13.4` in CI, which + removes trust in the compromised eMudhra certificate authorities + (CVE-2026-111943). + +## 0.1.0 - 2026-07-31 + ### Added - Added automatic OpenTelemetry instrumentation for A2A client and server diff --git a/splunk-ao-a2a/pyproject.toml b/splunk-ao-a2a/pyproject.toml index 780a73f9..be8f381f 100644 --- a/splunk-ao-a2a/pyproject.toml +++ b/splunk-ao-a2a/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "splunk-ao-a2a" -version = "0.1.0" +version = "0.2.0" description = "Splunk AO observability auto-instrumentation for A2A (Agent-to-Agent) protocol" readme = "README.md" requires-python = ">=3.11,<3.15" @@ -26,7 +26,7 @@ Repository = "https://github.com/splunk/splunk-ao-python" # UV-specific configuration (path for dev, ignored when installed from PyPI) [tool.uv] -required-version = ">=0.9.6" +required-version = ">=0.13.4" sources = { "splunk-ao" = { path = "../", editable = true } } [dependency-groups] diff --git a/splunk-ao-a2a/src/splunk_ao_a2a/_version.py b/splunk-ao-a2a/src/splunk_ao_a2a/_version.py index 3dc1f76b..d3ec452c 100644 --- a/splunk-ao-a2a/src/splunk_ao_a2a/_version.py +++ b/splunk-ao-a2a/src/splunk_ao_a2a/_version.py @@ -1 +1 @@ -__version__ = "0.1.0" +__version__ = "0.2.0" diff --git a/splunk-ao-adk/CHANGELOG.md b/splunk-ao-adk/CHANGELOG.md index fd4eff22..6e7be504 100644 --- a/splunk-ao-adk/CHANGELOG.md +++ b/splunk-ao-adk/CHANGELOG.md @@ -2,6 +2,24 @@ ## Unreleased +## 0.2.0 + +### Added + +- Capture the image/audio token breakdown that Gemini reports in + `prompt_tokens_details` / `candidates_tokens_details` on LLM spans, so + per-modality pricing applies to the span's cost. Carry the counts through + both the OpenTelemetry and compatibility ingestion-hook paths. Missing or + unreadable breakdowns remain unknown without dropping the LLM span. + +### Security + +- Require `uv>=0.13.4` for development and use `uv 0.13.4` in CI, which + removes trust in the compromised eMudhra certificate authorities + (CVE-2026-111943). + +## 0.1.0 - 2026-07-31 + ### Added - Added automatic tracing for Google ADK agent runs, model calls, tool calls, @@ -15,6 +33,3 @@ - Retained the proprietary ingestion hook as deprecated migration compatibility; new custom pipelines should use OpenTelemetry extension points. -- Captures the image/audio token breakdown that Gemini reports in - `prompt_tokens_details` / `candidates_tokens_details` on LLM spans, so - per-modality pricing applies to the span's cost. diff --git a/splunk-ao-adk/pyproject.toml b/splunk-ao-adk/pyproject.toml index 7aca7e10..19df4060 100644 --- a/splunk-ao-adk/pyproject.toml +++ b/splunk-ao-adk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "splunk-ao-adk" -version = "0.1.0" +version = "0.2.0" description = "Splunk AO observability integration for Google ADK" readme = "README.md" requires-python = ">=3.11,<3.15" @@ -24,7 +24,7 @@ Repository = "https://github.com/splunk/splunk-ao-python" # UV-specific configuration (path for dev, ignored when installed from PyPI) [tool.uv] -required-version = ">=0.9.6" +required-version = ">=0.13.4" sources = { "splunk-ao" = { path = "../", editable = true } } [tool.hatch.build.targets.wheel] diff --git a/splunk-ao-adk/src/splunk_ao_adk/__init__.py b/splunk-ao-adk/src/splunk_ao_adk/__init__.py index 0c0bbd87..9218bfb5 100644 --- a/splunk-ao-adk/src/splunk_ao_adk/__init__.py +++ b/splunk-ao-adk/src/splunk_ao_adk/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.1.0" +__version__ = "0.2.0" from splunk_ao_adk.callback import SplunkAOADKCallback from splunk_ao_adk.decorator import splunk_ao_retriever diff --git a/src/splunk_ao/__init__.py b/src/splunk_ao/__init__.py index 3acf0294..dd077c5e 100644 --- a/src/splunk_ao/__init__.py +++ b/src/splunk_ao/__init__.py @@ -93,7 +93,7 @@ from splunk_ao.types import MetricSpec from splunk_ao.utils.log_config import enable_console_logging -__version__ = "0.5.0" +__version__ = "0.6.0" __all__ = [ # Stable / unchanged