Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/agent/crewAI/research_crew/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ dependencies = [
"aiohttp>=3.14.1,<4",
"crewai[tools]>=0.203.1,<1.0.0",
"splunk-ao",
"python-dotenv",
"python-dotenv>=1.2.2",
]

# Project-level runtime dependencies used by the Crew (added so users can
Expand Down
2 changes: 1 addition & 1 deletion examples/agent/google-adk/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
google-adk>=1.28.1
openinference-instrumentation-google-adk
python-dotenv
python-dotenv>=1.2.2
splunk-ao
2 changes: 1 addition & 1 deletion examples/agent/langchain-middleware/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ openai
langchain
langchain-openai
splunk-ao
python-dotenv
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/agent/langgraph-fsi-agent/after/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ dependencies = [
"langgraph~=0.4.7",
"langgraph-supervisor>=0.0.26",
"pinecone[asyncio]>=6.0.2",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
]

[dependency-groups]
Expand Down
10 changes: 5 additions & 5 deletions examples/agent/langgraph-fsi-agent/before/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/agent/langgraph-fsi-agent/before/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies = [
"langgraph~=0.4.7",
"langgraph-supervisor>=0.0.26",
"pinecone[asyncio]>=6.0.2",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
]

[dependency-groups]
Expand Down
2 changes: 1 addition & 1 deletion examples/agent/langgraph-open-telemetry/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ dependencies = [
"langgraph>=0.6.0",
"langgraph-prebuilt>=0.6.0",
"openai",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
"splunk-ao",
"opentelemetry-instrumentation-langchain>=0.48.1",
"opentelemetry-instrumentation-openai-v2>=2.1b0",
Expand Down
2 changes: 1 addition & 1 deletion examples/agent/langgraph-otel/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies = [
"opentelemetry-exporter-otlp-proto-grpc>=1.36.0",
"opentelemetry-exporter-otlp-proto-http>=1.36.0",
"openinference-instrumentation-langchain>=0.1.0",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
"openinference-instrumentation-openai>=0.1.32",
]

Expand Down
2 changes: 1 addition & 1 deletion examples/agent/langgraph-telecom-agent/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ dependencies = [
"langgraph~=0.4.7",
"langgraph-supervisor>=0.0.26",
"pinecone[asyncio]>=6.0.2",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
]

[dependency-groups]
Expand Down
2 changes: 1 addition & 1 deletion examples/agent/langgraph-traceloop/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ dependencies = [
"langchain-core>=0.3.0",
"langchain-openai>=0.2.0",
"openai",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
"traceloop-sdk>=0.30.0",
]

Expand Down
2 changes: 1 addition & 1 deletion examples/agent/minimal-agent-example/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ six==1.17.0
typing_extensions==4.12.2
urllib3==2.7.0
yarl==1.18.3
python-dotenv>=1.0.0
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/agent/startup-simulator-3000/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pydantic-core
pydantic-settings
pyjwt==2.13.0
python-dateutil==2.9.0.post0
python-dotenv==1.1.0
python-dotenv==1.2.2

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (bug): python-dotenv 1.2.x raises its floor to Requires-Python >=3.10 (the root poetry.lock diff shows this: python-versions went >=3.9>=3.10). This example advertises and gates on older interpreters:

  • README.md:222 — "Ensure you're using Python 3.8+"
  • TUTORIAL.md:31 — "Check Python version (should be 3.8+)"
  • start.sh:17required_version="3.8", exits only below 3.8
  • start.bat:11 — "Please install Python 3.8+"

So on Python 3.8/3.9 start.sh now passes its version gate and then pip install -r requirements.txt fails to resolve. Either bump the documented/enforced floor to 3.10 in those four places, or leave this pin at a 1.1.x-compatible value and note the example as out of scope for the CVE. (README.md:49 and :283 already say 3.10+, so the docs are self-inconsistent today — worth settling on one number while you're here.)

🤖 Generated by the Astra agent

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This concern is valid and only partially addressed by the subsequent commits.

The four spots named here were fixed (README.md:222, TUTORIAL.md:31, start.sh:11,17,20, start.bat:11), and the author chose the "bump the floor to 3.10" option. But the actual enforcement logic in test_setup.py:18 was missed — only its message string was changed to "3.10+", while the comparison still reads py_version.minor < 8. So the specific failure mode described here still reproduces, just via a different entry point: on 3.9, test_setup.py reports ✅ Python 3.9.x is compatible and then blames a missing python-dotenv. Commented inline.

One refinement on the chosen number: 3.10 satisfies python-dotenv, but requirements.txt:8 pulls in splunk-ao, whose requires-python is >=3.11,<3.15. So this example is arguably 3.11+, not 3.10+, and picking 3.10 leaves a narrow band (exactly 3.10) that passes every gate and still fails to install. Worth settling on 3.11 across all five files.

pyyaml==6.0.2
regex==2024.11.6
requests==2.33.0
Expand Down
2 changes: 1 addition & 1 deletion examples/agent/strands-agents/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
opentelemetry-api
opentelemetry-exporter-otlp
opentelemetry-sdk
python-dotenv
python-dotenv>=1.2.2
strands-agents
strands-agents-tools
2 changes: 1 addition & 1 deletion examples/agent/weather-vibes-agent/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Core dependencies
fastapi
uvicorn
python-dotenv
python-dotenv>=1.2.2

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (documentation): As above: this pin requires Python 3.10+, but this example's tutorial still advertises 3.8 in four places — 00-tutorial/01-weather-vibes-overview.md:9, 00-tutorial/02-installation-instructions.md:9, 00-tutorial/02-installation-instructions.md:261 ("Check Python Version: Ensure you're using Python 3.8 or newer"), and 00-tutorial/weather-vibes-cookbook.md:24.

Worth noting 02-installation-instructions.md:239 has a troubleshooting entry for No module named 'dotenv' whose suggested fix is pip install python-dotenv — which is exactly what will fail on 3.9, so the troubleshooting guide would send a user in a circle.

🤖 Generated by the Astra agent

jinja2
pydantic
rich>=13.0.0
Expand Down
2 changes: 1 addition & 1 deletion examples/chatbot/elevenlabs-chatbot/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Edit `.env` with your credentials. Note for `ELEVENLABS_*` variables you can [si

## Requirements

- Python 3.10+
- Python 3.11+
- Microphone and headphones (to avoid audio feedback)

## Learn More
Expand Down
4 changes: 2 additions & 2 deletions examples/chatbot/elevenlabs-chatbot/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
name = "elevenlabs-chatbot"
version = "0.1.0"
description = "ElevenLabs Voice Chatbot with Splunk AO logging and tracing"
requires-python = ">=3.9"
requires-python = ">=3.11"
dependencies = [
"python-dotenv>=1.0.0",
"python-dotenv>=1.2.2",
"elevenlabs>=1.0.0",
"splunk-ao",
"pyaudio>=0.2.14",
Expand Down
2 changes: 1 addition & 1 deletion examples/chatbot/elevenlabs-chatbot/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
python-dotenv>=1.0.0
python-dotenv>=1.2.2
elevenlabs>=1.0.0
splunk-ao
pyaudio>=0.2.14
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
anthropic
splunk-ao
python-dotenv
python-dotenv>=1.2.2
pytest
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
azure-ai-inference
splunk-ao
python-dotenv
python-dotenv>=1.2.2
pytest
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
splunk-ao[openai]
python-dotenv
python-dotenv>=1.2.2
pytest
2 changes: 1 addition & 1 deletion examples/experiments/multi-turn/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
splunk-ao
python-dotenv
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/experiments/rag-and-tools/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
splunk-ao[openai]
python-dotenv
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/experiments/upload_experiment/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
splunk-ao
python-dotenv>=1.0.0
python-dotenv>=1.2.2
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Core dependencies
python-dotenv==1.1.1
python-dotenv==1.2.2
pydantic==2.11.9

# HTTP and Web Framework
Expand Down
2 changes: 1 addition & 1 deletion examples/logging-samples/log-mcp-calls/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
anthropic
splunk-ao
mcp>=1.27.2,<2
python-dotenv
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/logging-samples/openai-responses/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ pyjwt==2.13.0
# galileo-core
python-dateutil==2.9.0.post0
# via splunk-ao
python-dotenv==1.2.1
python-dotenv==1.2.2
# via pydantic-settings
six==1.17.0
# via python-dateutil
Expand Down
2 changes: 1 addition & 1 deletion examples/logging-samples/splunk-ao-logger/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
splunk-ao
python-dotenv
python-dotenv>=1.2.2
2 changes: 1 addition & 1 deletion examples/rag/cli-rag-demo/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ yarl==1.18.3
faiss-cpu>=1.7.4
sentence-transformers>=2.5.1
numpy>=1.24.0 # Required by FAISS and sentence-transformers
python-dotenv>=1.0.0 # Added for dotenv support
python-dotenv>=1.2.2 # Added for dotenv support

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (documentation): This pin now requires Python 3.10+, but README.md:13 in this same directory still advertises "Python 3.8+". A user following the README on 3.8/3.9 gets an unexplained resolver failure at pip install -r requirements.txt (README step 2). Please bump the documented prerequisite to match — the same fix that was applied to startup-simulator-3000's docs in this PR.

🤖 Generated by the Astra agent

datasets>=2.18.0 # Added for loading example datasets
3 changes: 2 additions & 1 deletion examples/rag/elastic-chatbot-rag-app/requirements.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# security floors (VULN-88795 / CVE-2026-54275 — aiohttp SNI bypass)
# security floors (VULN-88817 — python-dotenv symlink overwrite; VULN-88795 — aiohttp SNI bypass)
python-dotenv>=1.2.2
aiohttp>=3.14.1,<4

# core dependencies
Expand Down
2 changes: 1 addition & 1 deletion examples/rag/elastic-chatbot-rag-app/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ python-dateutil==2.9.0.post0
# via
# botocore
# google-cloud-bigquery
python-dotenv==1.0.1
python-dotenv==1.2.2
# via pydantic-settings
Comment on lines +381 to 382

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (other): This compiled file appears to have been hand-edited rather than regenerated from the updated requirements.in, so the two are now out of sync.

requirements.in was changed to declare python-dotenv as a direct requirement, but the annotation here still lists only the transitive source:

python-dotenv==1.2.2
    # via pydantic-settings

If pip-compile had actually been re-run, this would read # via\n# -r requirements.in\n# pydantic-settings — compare flask==3.1.0 at line 77 and elastic-opentelemetry==0.8.0 at line 63, which both carry the -r requirements.in annotation. The version pin happens to be correct, so nothing is broken today, but the next genuine pip-compile run will produce a spurious diff and the file no longer demonstrates that the pin is reproducible from its source.

Suggest re-running pip-compile in that directory and committing the result.

Suggested change
python-dotenv==1.2.2
# via pydantic-settings
python-dotenv==1.2.2
# via
# -r requirements.in
# pydantic-settings

🤖 Generated by the Astra agent

Comment on lines +381 to 382

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (other): This compiled file looks hand-edited rather than regenerated, so it is now out of sync with its source.

requirements.in:1-2 was changed to declare python-dotenv as a direct requirement, but the annotation here still lists only the transitive source. If pip-compile had actually been re-run it would read # via / # -r requirements.in / # pydantic-settings — compare flask==3.1.0 at line 77 and elastic-opentelemetry==0.8.0 at line 63, which both carry the -r requirements.in line.

The version pin is correct, so nothing installs wrong today. The cost is that the next genuine pip-compile run produces a spurious diff, and the file no longer demonstrates that the pin is reproducible from its declared source — which is the whole point of committing a compiled output. Prefer re-running pip-compile in that directory over applying the suggestion below by hand.

Suggested change
python-dotenv==1.2.2
# via pydantic-settings
python-dotenv==1.2.2
# via
# -r requirements.in
# pydantic-settings

🤖 Generated by the Astra agent

pyyaml==6.0.2
# via
Expand Down
10 changes: 5 additions & 5 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ opentelemetry-api = "^1.38.0"
opentelemetry-exporter-otlp-proto-http = "^1.38.0"
filelock = ">=3.20.1"
idna = ">=3.15,<4"
python-dotenv = ">=1.2.2"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Constrain dotenv in the a2a package too

This lower bound only fixes the root splunk-ao package; repo-wide search still shows the separately packaged splunk-ao-a2a manifest allows python-dotenv>=1.1.0 (splunk-ao-a2a/pyproject.toml:52). In environments that install splunk-ao-a2a standalone or use constraints that keep dotenv below 1.2.2, the vulnerable versions remain admissible, so the security bump does not actually cover all published package manifests in this repo.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is already addressed in the current head (d5cc6f7) — splunk-ao-a2a/pyproject.toml:53 now reads "python-dotenv>=1.2.2" in the examples extra. The comment was authored against cdc6b7d, before that bump landed.

The underlying concern about non-root manifests is valid, though, and is still live for other paths — most importantly examples/agent/langgraph-fsi-agent/before/poetry.lock, which pins 1.1.1 exactly. Flagged separately.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirming this is resolved at the current head: splunk-ao-a2a/pyproject.toml:53 reads "python-dotenv>=1.2.2" in the examples extra. The comment was authored against cdc6b7d, before that bump landed.

The follow-up concern about non-root manifests is also resolved for the path called out: examples/agent/langgraph-fsi-agent/before/poetry.lock:3597 now locks 1.2.2, not 1.1.1. I checked the remaining lock files repo-wide — poetry.lock and examples/agent/langgraph-fsi-agent/before/poetry.lock are the only two, and both are at 1.2.2. This thread can be resolved.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (question): splunk_ao never imports dotenvrg -n dotenv src/ returns nothing. This adds python-dotenv to the published splunk-ao package's direct runtime requirements purely to raise a floor on a transitive dep (it arrives via galileo-core's python-dotenv = ">=1.1.1", pydantic-settings, and litellm).

I see this matches an existing convention here (filelock, idna are the same shape), so I'm not blocking on it — but it does mean every downstream consumer of splunk-ao now inherits a hard constraint on a package we don't use, and it will silently rot once galileo-core bumps its own floor past 1.2.2. Was bumping galileo-core (whose floor is the actual source of the 1.1.1 resolution) considered as an alternative? If the direct-floor approach is the deliberate house pattern for CVE remediation, a one-line comment above these entries marking them as vuln floors — rather than real dependencies — would keep a future reader from treating them as load-bearing.

Also worth a thought: unlike the adjacent idna = ">=3.15,<4", this has no upper bound, so a future python-dotenv 2.0 is admissible for a dependency we never exercise.

🤖 Generated by the Astra agent

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independently confirmed the factual premise: rg -n dotenv src/ returns nothing, so splunk_ao does not import dotenv, and poetry.lock:839 shows the resolution genuinely originates from galileo-core's python-dotenv = ">=1.1.1". The floor here is a pure vuln floor on a package the SDK never exercises.

On the concrete, non-blocking part of the ask — the explanatory comment — that suggestion has effectively been accepted elsewhere in this same PR but not here: examples/rag/elastic-chatbot-rag-app/requirements.in:1 now carries # security floor (VULN-88817 — python-dotenv symlink overwrite). Applying the identical one-liner above pyproject.toml:62 (and splunk-ao-a2a/pyproject.toml:53) would make the treatment consistent and costs nothing. I have raised that as a PR-level comment.

On the upper-bound point: I would not add one. A <2 cap on a floor-only constraint we never import converts a silent-rot problem into an active-blocker problem — it would force a release of splunk-ao the moment any real consumer of dotenv in the tree wants 2.x. The rot risk you describe (constraint becomes redundant once galileo-core moves past 1.2.2) is the cheaper failure mode, and the explanatory comment is the right mitigation for it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 minor (documentation): The explanatory comment convention introduced in this PR was applied in one place but not the other two.

examples/rag/elastic-chatbot-rag-app/requirements.in:1 now carries # security floor (VULN-88817 — python-dotenv symlink overwrite), which is exactly the right annotation. The same one-liner is missing here and at splunk-ao-a2a/pyproject.toml:53.

This matters more than usual because the entry is genuinely not a real dependency: I confirmed src/ contains no dotenv import, and the resolution actually originates from galileo-core's python-dotenv = ">=1.1.1" (poetry.lock:839). It is also not obvious from context — filelock (line 60), idna (line 61), and requests (line 63) are likewise never imported in src/, so the whole cluster reads as load-bearing runtime deps when none of them are. Without the marker, a future reader has no way to tell which of these can be dropped once the upstream floor moves past them.

Applying the identical comment in both manifests costs nothing and makes the treatment consistent across the PR.

Suggested change
python-dotenv = ">=1.2.2"
# security floor (VULN-88817 — python-dotenv symlink overwrite)
python-dotenv = ">=1.2.2"

🤖 Generated by the Astra agent

requests = ">=2.33.0"
uv = { version = ">=0.9.6", optional = true, python = ">=3.11,<3.14" }
mcp = { version = ">=1.27.2,<2", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion splunk-ao-a2a/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ examples = [
"langchain>=1.2.13",
"langchain-openai>=1.1.12",
"langgraph>=1.1.3",
"python-dotenv>=1.1.0",
"python-dotenv>=1.2.2",
]

[build-system]
Expand Down
Loading