Skip to content
Closed
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
17 changes: 9 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ dependencies = [
"urllib3>=2.7.0,<3",
# cryptography is pulled in transitively by PyJWT[crypto]; pin it explicitly
# so the WeCom/Weixin crypto paths can't drift below the CVE-fixed floor.
"cryptography==46.0.7", # CVE-2026-39892, CVE-2026-34073
"cryptography==49.0.0", # CVE-2026-39892, CVE-2026-34073 + GHSA-537c-gmf6-5ccf (vulnerable OpenSSL in wheels)
# Windows has no IANA tzdata shipped with the OS, so Python's ``zoneinfo``
# (PEP 615) raises ``ZoneInfoNotFoundError`` for every non-UTC timezone
# out of the box. ``tzdata`` ships the Olson database as a data package
Expand All @@ -113,7 +113,7 @@ dependencies = [
# FastAPI's UploadFile/Form depend on python-multipart; it is NOT pulled in
# by fastapi itself, so the dashboard's multipart upload endpoint would 500
# without an explicit dependency here (and in the `web` extra below).
"python-multipart>=0.0.9,<1",
"python-multipart>=0.0.32,<1", # CVE-2026-53537/53538/53539/53540
"ptyprocess>=0.7.0,<1; sys_platform != 'win32'",
"pywinpty>=2.0.0,<3; sys_platform == 'win32'",
# Image resize recovery for the vision tools. Pillow shrinks oversized images
Expand Down Expand Up @@ -157,7 +157,7 @@ edge-tts = ["edge-tts==7.2.7"]
modal = ["modal==1.3.4"]
daytona = ["daytona==0.155.0"]
hindsight = ["hindsight-client==0.6.1"]
dev = ["debugpy==1.8.20", "pytest==9.0.2", "pytest-asyncio==1.3.0", "mcp==1.26.0", "starlette==1.0.1", "ty==0.0.21", "ruff==0.15.10", "setuptools==81.0.0"] # starlette: CVE-2026-48710; setuptools: latest <82 (torch >=2.11 caps setuptools<82)
dev = ["debugpy==1.8.20", "pytest==9.0.2", "pytest-asyncio==1.3.0", "mcp==1.26.0", "starlette==1.3.1", "ty==0.0.21", "ruff==0.15.10", "setuptools==81.0.0"] # starlette: CVE-2026-48710 + CVE-2026-54282/54283/48817/48818; setuptools: latest <82 (torch >=2.11 caps setuptools<82)
messaging = ["python-telegram-bot[webhooks]==22.6", "discord.py[voice]==2.7.1", "aiohttp==3.14.1", "brotlicffi==1.2.0.1", "slack-bolt==1.27.0", "slack-sdk==3.40.1", "qrcode==7.4.2"] # aiohttp 3.14.1: CVE-2026-34513/34518/34519/34520/34525 + 34993(RCE)/47265
cron = [] # croniter is now a core dependency; this extra kept for back-compat
slack = ["slack-bolt==1.27.0", "slack-sdk==3.40.1", "aiohttp==3.14.1"]
Expand Down Expand Up @@ -204,7 +204,7 @@ vision = []
# `request.url` can be bypassed. We pin a patched Starlette directly in every
# extra that exposes a Starlette-backed server surface so pip/uv can't resolve
# a vulnerable pre-1.0.1 transitive. Bump in lockstep with uv.lock.
mcp = ["mcp==1.26.0", "starlette==1.0.1"] # starlette: CVE-2026-48710
mcp = ["mcp==1.26.0", "starlette==1.3.1"] # starlette: CVE-2026-48710 + CVE-2026-54282/54283/48817/48818
nemo-relay = ["nemo-relay==0.3"]
homeassistant = ["aiohttp==3.14.1"]
sms = ["aiohttp==3.14.1"]
Expand All @@ -213,7 +213,7 @@ teams = ["microsoft-teams-apps==2.0.13.4", "aiohttp==3.14.1"] # aiohttp 3.14.1:
# The cua-driver binary itself is installed via `hermes tools` post-setup
# (curl install script); this extra just pins the MCP client used to talk
# to it, which is already provided by the `mcp` extra.
computer-use = ["mcp==1.26.0", "starlette==1.0.1"] # starlette: CVE-2026-48710
computer-use = ["mcp==1.26.0", "starlette==1.3.1"] # starlette: CVE-2026-48710 + CVE-2026-54282/54283/48817/48818
acp = ["agent-client-protocol==0.9.0"]
# mistral: Voxtral STT + TTS. Pinned to an exact verified-clean version.
# The `mistralai` PyPI project was quarantined 2026-05-12 after the malicious
Expand Down Expand Up @@ -267,9 +267,10 @@ youtube = [
"youtube-transcript-api==1.2.4",
]
# `hermes dashboard` (localhost SPA + API). Not in core to keep the default install lean.
# starlette==1.0.1 pinned for CVE-2026-48710 (BadHost) — fastapi pulls Starlette
# transitively and pre-1.0.1 is the vulnerable range. See the mcp extra above.
web = ["fastapi==0.133.1", "uvicorn[standard]==0.41.0", "starlette==1.0.1", "python-multipart==0.0.27"]
# starlette==1.3.1 pinned for CVE-2026-48710 (BadHost) and the 2026 batch
# (CVE-2026-54282/54283/48817/48818) — fastapi pulls Starlette transitively and
# pre-1.3.1 resolutions stay in the vulnerable range. See the mcp extra above.
web = ["fastapi==0.133.1", "uvicorn[standard]==0.41.0", "starlette==1.3.1", "python-multipart==0.0.32"]
all = [
# Policy (2026-05-12): `[all]` includes only extras that genuinely
# CAN'T be lazy-installed via `tools/lazy_deps.py` — i.e. things every
Expand Down
2 changes: 1 addition & 1 deletion tests/tools/test_computer_use.py
Original file line number Diff line number Diff line change
Expand Up @@ -1203,7 +1203,7 @@ def test_feature_registered_in_allowlist(self):
from tools import lazy_deps
assert lazy_deps.feature_specs("tool.computer_use") == (
"mcp==1.26.0",
"starlette==1.0.1",
"starlette==1.3.1",
)

def test_start_lazy_installs_mcp(self):
Expand Down
6 changes: 3 additions & 3 deletions tools/lazy_deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,8 @@
"tool.dashboard": (
"fastapi==0.133.1",
"uvicorn[standard]==0.41.0",
"starlette==1.0.1", # CVE-2026-48710 (BadHost) — keep lazy-install in sync with pyproject [web]
"python-multipart==0.0.27", # FastAPI UploadFile/Form for streaming uploads (NS-501)
"starlette==1.3.1", # CVE-2026-48710 + CVE-2026-54282/54283/48817/48818 — keep in sync with pyproject [web]
"python-multipart==0.0.32", # FastAPI UploadFile/Form for streaming uploads (NS-501)
),
# Vision image-resize recovery (Pillow). Pillow is now a CORE dependency
# (pyproject `dependencies`), so this entry is a belt-and-suspenders fallback
Expand All @@ -236,7 +236,7 @@
# installs so computer_use never dead-ends on `No module named 'mcp'`.
"tool.computer_use": (
"mcp==1.26.0",
"starlette==1.0.1", # CVE-2026-48710 — keep in sync with pyproject [computer-use]
"starlette==1.3.1", # CVE-2026-48710 + CVE-2026-54282/54283/48817/48818 — keep in sync with pyproject [computer-use]
),
}

Expand Down
Loading