build: drop the hermes-agent[hindsight] extra
The catalog plugin declares hindsight-client in its own plugin.yaml and the plugin installer resolves it (into HERMES_LAZY_INSTALL_TARGET on the sealed Docker image), so the pyproject extra, its exclude-newer entry and every consumer that pre-installed it — the Dockerfile, the nix full package / module examples / check override, and the CI `uv sync` matrices — stop naming it. uv.lock regenerated with `uv lock` (only the hindsight-client package and the extra leave the lock; the exclude-newer block is re-sorted by uv).
This commit is contained in:
2
.github/workflows/tests-os.yml
vendored
2
.github/workflows/tests-os.yml
vendored
@@ -92,7 +92,7 @@ jobs:
|
||||
# because it could not build here).
|
||||
uses: ./.github/actions/retry
|
||||
with:
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra hindsight --extra parallel-web
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra parallel-web
|
||||
|
||||
- name: Minimize uv cache
|
||||
run: uv cache prune --ci
|
||||
|
||||
6
.github/workflows/tests.yml
vendored
6
.github/workflows/tests.yml
vendored
@@ -73,14 +73,14 @@ jobs:
|
||||
# The trailing extras beyond all/dev are the lazy-install features
|
||||
# (tools/lazy_deps.py) that tests exercise for real: provider.anthropic,
|
||||
# stt/tts.mistral, image.fal, terminal.modal, terminal.daytona,
|
||||
# memory.hindsight, search.parallel. The hermetic test env forbids
|
||||
# search.parallel. The hermetic test env forbids
|
||||
# mid-run pip installs (HERMES_DISABLE_LAZY_INSTALLS=1 in
|
||||
# tests/conftest.py), so the SDKs those tests need must be in the
|
||||
# venv up front — resolved from uv.lock like everything else, which
|
||||
# also honors the exact supply-chain pins these extras carry.
|
||||
uses: ./.github/actions/retry
|
||||
with:
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra hindsight --extra parallel-web
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra parallel-web
|
||||
|
||||
- name: Minimize uv cache
|
||||
# Optimized for CI: prunes pre-built wheels that are cheap to
|
||||
@@ -204,7 +204,7 @@ jobs:
|
||||
# in the venv up front.
|
||||
uses: ./.github/actions/retry
|
||||
with:
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra hindsight --extra parallel-web
|
||||
command: uv sync --locked --python 3.11 --extra all --extra dev --extra anthropic --extra mistral --extra fal --extra modal --extra daytona --extra parallel-web
|
||||
|
||||
- name: Minimize uv cache
|
||||
# Optimized for CI: prunes pre-built wheels that are cheap to
|
||||
|
||||
12
Dockerfile
12
Dockerfile
@@ -247,12 +247,10 @@ RUN cd plugins/platforms/photon/sidecar && \
|
||||
# Health export is enabled. Collector and observability-backend dependencies
|
||||
# remain external and are not part of the Hermes production image.
|
||||
#
|
||||
# The hindsight memory provider's client (hindsight-client) is baked in
|
||||
# for the same reason: it lazy-installs into /opt/hermes/.venv at first
|
||||
# use, which lives inside the (immutable) image layer rather than the
|
||||
# mounted /opt/data volume, so it is lost on every container recreate /
|
||||
# image update and recall/retain then fails with
|
||||
# `ModuleNotFoundError: No module named 'hindsight_client'` (#38128).
|
||||
# Catalog memory plugins (e.g. hindsight, since it left the tree) are not
|
||||
# baked in: their pip dependencies install at plugin-install time through
|
||||
# tools/lazy_deps.py into HERMES_LAZY_INSTALL_TARGET (the durable /opt/data
|
||||
# volume, see below), so they survive container recreates (#38128).
|
||||
#
|
||||
# The Matrix gateway's deps ([matrix] extra) are baked in because
|
||||
# python-olm (transitive via mautrix[encryption]) builds from source on
|
||||
@@ -269,7 +267,7 @@ RUN cd plugins/platforms/photon/sidecar && \
|
||||
# The editable link is created after the source copy below.
|
||||
COPY pyproject.toml uv.lock ./
|
||||
RUN touch ./README.md
|
||||
RUN uv sync --frozen --no-install-project --extra all --extra messaging --extra otlp --extra anthropic --extra bedrock --extra azure-identity --extra hindsight --extra matrix --extra google-chat
|
||||
RUN uv sync --frozen --no-install-project --extra all --extra messaging --extra otlp --extra anthropic --extra bedrock --extra azure-identity --extra matrix --extra google-chat
|
||||
|
||||
# ---------- Frontend build (cached independently from Python source) ----------
|
||||
# Copy only the frontend source trees first so that Python-only changes don't
|
||||
|
||||
@@ -380,7 +380,7 @@ json.dump(sorted(leaf_paths(DEFAULT_CONFIG)), sys.stdout, indent=2)
|
||||
# IS the default package, so a launcher that pinned the plain
|
||||
# default would look correct while it shipped a second
|
||||
# runtime to anyone who customises theirs.
|
||||
extraDependencyGroups = [ "hindsight" ];
|
||||
extraDependencyGroups = [ "honcho" ];
|
||||
backend = {
|
||||
mode = "serve";
|
||||
port = 9231;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# callPackage auto-wires nixpkgs args; flake inputs are passed explicitly.
|
||||
# Users override via:
|
||||
# pkgs.hermes-agent.override { extraPythonPackages = [...]; }
|
||||
# pkgs.hermes-agent.override { extraDependencyGroups = [ "hindsight" ]; }
|
||||
# pkgs.hermes-agent.override { extraDependencyGroups = [ "honcho" ]; }
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
|
||||
@@ -471,10 +471,10 @@ let
|
||||
dependencies — no PYTHONPATH patching or collision risk.
|
||||
|
||||
Use this for optional extras already declared in hermes-agent's
|
||||
pyproject.toml (e.g. "hindsight", "honcho", "voice").
|
||||
pyproject.toml (e.g. "honcho", "voice").
|
||||
Use extraPythonPackages for external packages not in pyproject.toml.
|
||||
'';
|
||||
example = [ "hindsight" ];
|
||||
example = [ "honcho" ];
|
||||
};
|
||||
|
||||
# ── Service behaviour ──────────────────────────────────────────────
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"fal"
|
||||
"feishu"
|
||||
"firecrawl"
|
||||
"hindsight"
|
||||
"honcho"
|
||||
"messaging"
|
||||
"modal"
|
||||
|
||||
@@ -74,8 +74,8 @@ dependencies = [
|
||||
# ``packaging`` is imported directly on three production paths but was never
|
||||
# declared, so it only reached users transitively (pip/uv pull it for other
|
||||
# tools). The slim official Docker image ships without it, where the
|
||||
# try/except-ImportError fallbacks silently degrade: Hindsight's
|
||||
# ``_meets_minimum_version`` disables update_mode='append' (#40503),
|
||||
# try/except-ImportError fallbacks silently degrade: memory plugins'
|
||||
# version compares disable features (#40503),
|
||||
# tools/lazy_deps.py treats every version constraint as satisfied, and
|
||||
# hermes_cli/main.py drops to naive requirement parsing. Pure-Python
|
||||
# py3-none-any wheel, no compiled extensions — safe to ship everywhere.
|
||||
@@ -217,7 +217,6 @@ edge-tts = ["edge-tts==7.2.7"]
|
||||
modal = ["modal==1.3.4"]
|
||||
daytona = ["daytona==0.155.0"]
|
||||
vercel = ["vercel==0.7.2"]
|
||||
hindsight = ["hindsight-client==0.6.1"]
|
||||
dev = ["debugpy==1.8.20", "pytest==9.1.1", "pytest-asyncio==1.3.0", "mcp==2.0.0", "httpx2==2.7.0", "starlette==1.3.1", "ty==0.0.21", "ruff==0.15.10", "setuptools==83.0.0"] # starlette: CVE-2026-48710; setuptools: 83 (torch >=2.13 requires setuptools 83)
|
||||
messaging = ["python-telegram-bot[webhooks]==22.8", "discord.py[voice]==2.7.1", "aiohttp==3.14.3", "brotlicffi==1.2.0.2", "slack-bolt==1.30.0", "slack-sdk==3.44.1", "qrcode==7.4.2"] # aiohttp 3.14.3: prior CVEs + GHSA-cq5v-8q36-5273/GHSA-mfx4-hv73-q22v/GHSA-mq44-7p77-q5h7
|
||||
cron = [] # croniter is now a core dependency; this extra kept for back-compat
|
||||
@@ -260,9 +259,9 @@ honcho = ["honcho-ai==2.2.0"]
|
||||
# Cloud memory providers — opt-in, lazy-installed via tools/lazy_deps.py
|
||||
# (memory.supermemory / memory.mem0) at first use. Where BOTH pin exactly the
|
||||
# versions MUST match (enforced by tests/test_project_metadata.py); LAZY_DEPS
|
||||
# entries that mirror a plugin.yaml range (mem0ai, hindsight-client) keep the
|
||||
# entries that mirror a plugin.yaml range (mem0ai) keep the
|
||||
# extra as the floor install and never downgrade a newer compatible release.
|
||||
# Deliberately excluded from [all] like honcho/hindsight so a quarantined
|
||||
# Deliberately excluded from [all] like honcho so a quarantined
|
||||
# upstream release can't break fresh installs.
|
||||
supermemory = ["supermemory==3.50.0"]
|
||||
mem0 = ["mem0ai==2.0.10"]
|
||||
@@ -533,7 +532,6 @@ google-auth-httplib2 = false
|
||||
google-auth-oauthlib = false
|
||||
google-cloud-pubsub = false
|
||||
h2 = false
|
||||
hindsight-client = false
|
||||
honcho-ai = false
|
||||
httplib2 = false
|
||||
httpx = false
|
||||
|
||||
@@ -71,7 +71,7 @@ def test_lazy_installable_extras_excluded_from_all():
|
||||
"voice", # faster-whisper / sounddevice / numpy
|
||||
"modal", "daytona", "vercel",
|
||||
"messaging", "slack", "matrix", "dingtalk", "feishu", "google-chat",
|
||||
"honcho", "hindsight",
|
||||
"honcho",
|
||||
"supermemory", "mem0",
|
||||
"mistral", # mistralai — Voxtral STT/TTS, lazy-installed (stt.mistral / tts.mistral)
|
||||
}
|
||||
|
||||
204
uv.lock
generated
204
uv.lock
generated
@@ -12,105 +12,104 @@ exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for
|
||||
exclude-newer-span = "P14D"
|
||||
|
||||
[options.exclude-newer-package]
|
||||
elevenlabs = false
|
||||
setuptools = false
|
||||
modal = false
|
||||
pyyaml = false
|
||||
maturin = false
|
||||
numpy = false
|
||||
pvporcupine = false
|
||||
google-auth = false
|
||||
aiohttp = false
|
||||
starlette = false
|
||||
mistralai = false
|
||||
firecrawl-py = false
|
||||
parallel-web = false
|
||||
markdown = false
|
||||
opentelemetry-sdk = false
|
||||
prompt-toolkit = false
|
||||
fastapi = false
|
||||
anthropic = false
|
||||
pathspec = false
|
||||
openwakeword = false
|
||||
defusedxml = false
|
||||
ruff = false
|
||||
exa-py = false
|
||||
mcp = false
|
||||
python-olm = false
|
||||
wheel = false
|
||||
websockets = false
|
||||
pytest = false
|
||||
pillow = false
|
||||
setuptools-rust = false
|
||||
tenacity = false
|
||||
pyjwt = false
|
||||
slack-bolt = false
|
||||
fal-client = false
|
||||
asyncpg = false
|
||||
boto3 = false
|
||||
ruamel-yaml = false
|
||||
sherpa-onnx = false
|
||||
huggingface-hub = false
|
||||
pytest-asyncio = false
|
||||
google-cloud-pubsub = false
|
||||
slack-sdk = false
|
||||
discord-py = false
|
||||
honcho-ai = false
|
||||
faster-whisper = false
|
||||
certifi = false
|
||||
debugpy = false
|
||||
packaging = false
|
||||
rich = false
|
||||
supermemory = false
|
||||
unpaddedbase64 = false
|
||||
h2 = false
|
||||
youtube-transcript-api = false
|
||||
edge-tts = false
|
||||
microsoft-teams-apps = false
|
||||
aiohttp-socks = false
|
||||
agent-client-protocol = false
|
||||
ai-edge-litert = false
|
||||
onnxruntime = false
|
||||
croniter = false
|
||||
opentelemetry-exporter-otlp-proto-http = false
|
||||
azure-identity = false
|
||||
lark-oapi = false
|
||||
sentencepiece = false
|
||||
firecrawl-anydoc = false
|
||||
google-api-python-client = false
|
||||
brotlicffi = false
|
||||
mem0ai = false
|
||||
qrcode = false
|
||||
vercel = false
|
||||
aiohttp = false
|
||||
aiohttp-socks = false
|
||||
aiosqlite = false
|
||||
tzdata = false
|
||||
python-dotenv = false
|
||||
alibabacloud-dingtalk = false
|
||||
anthropic = false
|
||||
asyncpg = false
|
||||
azure-identity = false
|
||||
boto3 = false
|
||||
brotlicffi = false
|
||||
certifi = false
|
||||
concurrent-log-handler = false
|
||||
croniter = false
|
||||
cryptography = false
|
||||
daytona = false
|
||||
uvicorn = false
|
||||
nemo-relay = false
|
||||
requests = false
|
||||
debugpy = false
|
||||
defusedxml = false
|
||||
dingtalk-stream = false
|
||||
discord-py = false
|
||||
edge-tts = false
|
||||
elevenlabs = false
|
||||
exa-py = false
|
||||
fal-client = false
|
||||
fastapi = false
|
||||
faster-whisper = false
|
||||
fire = false
|
||||
firecrawl-anydoc = false
|
||||
firecrawl-py = false
|
||||
google-api-python-client = false
|
||||
google-auth = false
|
||||
google-auth-httplib2 = false
|
||||
google-auth-oauthlib = false
|
||||
google-cloud-pubsub = false
|
||||
h2 = false
|
||||
honcho-ai = false
|
||||
httplib2 = false
|
||||
httpx = false
|
||||
pyasn1 = false
|
||||
snowballstemmer = false
|
||||
concurrent-log-handler = false
|
||||
cryptography = false
|
||||
pydantic = false
|
||||
agent-client-protocol = false
|
||||
fire = false
|
||||
httpx2 = false
|
||||
google-auth-oauthlib = false
|
||||
python-multipart = false
|
||||
ty = false
|
||||
openai = false
|
||||
mautrix = false
|
||||
google-auth-httplib2 = false
|
||||
python-telegram-bot = false
|
||||
psutil = false
|
||||
huggingface-hub = false
|
||||
jinja2 = false
|
||||
hindsight-client = false
|
||||
lark-oapi = false
|
||||
markdown = false
|
||||
maturin = false
|
||||
mautrix = false
|
||||
mcp = false
|
||||
mem0ai = false
|
||||
microsoft-teams-apps = false
|
||||
mistralai = false
|
||||
modal = false
|
||||
nemo-relay = false
|
||||
numpy = false
|
||||
onnxruntime = false
|
||||
openai = false
|
||||
opentelemetry-exporter-otlp-proto-http = false
|
||||
opentelemetry-sdk = false
|
||||
openwakeword = false
|
||||
packaging = false
|
||||
parallel-web = false
|
||||
pathspec = false
|
||||
pillow = false
|
||||
prompt-toolkit = false
|
||||
psutil = false
|
||||
pvporcupine = false
|
||||
pyasn1 = false
|
||||
pydantic = false
|
||||
pyjwt = false
|
||||
pytest = false
|
||||
pytest-asyncio = false
|
||||
python-dotenv = false
|
||||
python-multipart = false
|
||||
python-olm = false
|
||||
python-telegram-bot = false
|
||||
pyyaml = false
|
||||
qrcode = false
|
||||
requests = false
|
||||
rich = false
|
||||
ruamel-yaml = false
|
||||
ruff = false
|
||||
sentencepiece = false
|
||||
setuptools = false
|
||||
setuptools-rust = false
|
||||
sherpa-onnx = false
|
||||
slack-bolt = false
|
||||
slack-sdk = false
|
||||
snowballstemmer = false
|
||||
sounddevice = false
|
||||
alibabacloud-dingtalk = false
|
||||
dingtalk-stream = false
|
||||
starlette = false
|
||||
supermemory = false
|
||||
tenacity = false
|
||||
ty = false
|
||||
tzdata = false
|
||||
unpaddedbase64 = false
|
||||
uvicorn = false
|
||||
vercel = false
|
||||
websockets = false
|
||||
wheel = false
|
||||
youtube-transcript-api = false
|
||||
|
||||
[manifest]
|
||||
overrides = [
|
||||
@@ -1860,9 +1859,6 @@ google-chat = [
|
||||
{ name = "httplib2" },
|
||||
{ name = "pyasn1" },
|
||||
]
|
||||
hindsight = [
|
||||
{ name = "hindsight-client" },
|
||||
]
|
||||
homeassistant = [
|
||||
{ name = "aiohttp" },
|
||||
]
|
||||
@@ -2054,7 +2050,6 @@ requires-dist = [
|
||||
{ name = "hermes-agent", extras = ["web"], marker = "extra == 'all'" },
|
||||
{ name = "hermes-agent", extras = ["web"], marker = "extra == 'termux-all'" },
|
||||
{ name = "hermes-agent", extras = ["youtube"], marker = "extra == 'all'" },
|
||||
{ name = "hindsight-client", marker = "extra == 'hindsight'", specifier = "==0.6.1" },
|
||||
{ name = "honcho-ai", marker = "extra == 'honcho'", specifier = "==2.2.0" },
|
||||
{ name = "httplib2", marker = "extra == 'google'", specifier = "==0.32.0" },
|
||||
{ name = "httplib2", marker = "extra == 'google-chat'", specifier = "==0.32.0" },
|
||||
@@ -2139,7 +2134,7 @@ requires-dist = [
|
||||
{ name = "websockets", specifier = "==15.0.1" },
|
||||
{ name = "youtube-transcript-api", marker = "extra == 'youtube'", specifier = "==1.2.4" },
|
||||
]
|
||||
provides-extras = ["uvloop", "anthropic", "exa", "firecrawl", "parallel-web", "fal", "edge-tts", "modal", "daytona", "vercel", "hindsight", "dev", "messaging", "cron", "slack", "matrix", "wecom", "tts-premium", "voice", "wake", "honcho", "supermemory", "mem0", "vision", "pty", "mcp", "nemo-relay", "homeassistant", "sms", "teams", "computer-use", "acp", "mistral", "otlp", "bedrock", "vertex", "azure-identity", "termux", "termux-all", "dingtalk", "feishu", "google", "google-chat", "youtube", "web", "all"]
|
||||
provides-extras = ["uvloop", "anthropic", "exa", "firecrawl", "parallel-web", "fal", "edge-tts", "modal", "daytona", "vercel", "dev", "messaging", "cron", "slack", "matrix", "wecom", "tts-premium", "voice", "wake", "honcho", "supermemory", "mem0", "vision", "pty", "mcp", "nemo-relay", "homeassistant", "sms", "teams", "computer-use", "acp", "mistral", "otlp", "bedrock", "vertex", "azure-identity", "termux", "termux-all", "dingtalk", "feishu", "google", "google-chat", "youtube", "web", "all"]
|
||||
|
||||
[[package]]
|
||||
name = "hf-xet"
|
||||
@@ -2157,23 +2152,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/39/c6/988383e9dc17294d536fcbcd6fd16eed882e411ad16c954984a53e47b09c/hf_xet-1.5.2-cp38-abi3-win_arm64.whl", hash = "sha256:1da28519496eb7c8094c11e4d25509b4a468457a0302d58136099db2fd9a671d", size = 3816957, upload-time = "2026-07-16T17:29:54.991Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hindsight-client"
|
||||
version = "0.6.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "aiohttp" },
|
||||
{ name = "aiohttp-retry" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "python-dateutil" },
|
||||
{ name = "typing-extensions" },
|
||||
{ name = "urllib3" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/33/26/8b8efa4be21fc3ba12ade3b1353d87f9837ec0d3ec2607e8adbf85bc9c63/hindsight_client-0.6.1.tar.gz", hash = "sha256:314d0bb9e13622e15586ba1586a799726d405b27bc20d78872474b5d6d96cd51", size = 99833, upload-time = "2026-05-08T13:01:23.537Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/4f/a1d0bc33ef933ecc52e76dc1514163594d25836a5d303c256a61bb61445d/hindsight_client-0.6.1-py3-none-any.whl", hash = "sha256:9fdda176ab50f7cec8d7339c6608c148f0cd9ad7e65d9d76192f2db730bc330a", size = 249379, upload-time = "2026-05-08T13:01:22.035Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "honcho-ai"
|
||||
version = "2.2.0"
|
||||
|
||||
Reference in New Issue
Block a user