fix: exclude matrix from [all] extras — python-olm is upstream-broken (#4615)

python-olm (required by matrix-nio[e2e]) fails to build on modern macOS:
- CMake 4 rejects vendored libolm's cmake_minimum_required(VERSION 3.4)
- Apple Clang 21+ rejects a C++ type error in include/olm/list.hh
- Upstream libolm repo is archived, no fix forthcoming

Including matrix in [all] causes the entire extras install to fail during
`hermes update`, silently dropping all other extras (telegram, discord,
slack, cron, etc.) when the fallback kicks in.

The [matrix] extra is preserved for opt-in install:
  pip install 'hermes-agent[matrix]'

Closes #4178
This commit is contained in:
Teknium
2026-04-02 09:21:37 -07:00
committed by GitHub
parent acea9ee20b
commit 661a1b0ba2
2 changed files with 10 additions and 3 deletions

View File

@@ -76,7 +76,10 @@ all = [
"hermes-agent[modal]",
"hermes-agent[daytona]",
"hermes-agent[messaging]",
"hermes-agent[matrix]",
# matrix excluded: python-olm (required by matrix-nio[e2e]) is upstream-broken
# on modern macOS (archived libolm, C++ errors with Clang 21+). Including it
# here causes the entire [all] install to fail, dropping all other extras.
# Users who need Matrix can install manually: pip install 'hermes-agent[matrix]'
"hermes-agent[cron]",
"hermes-agent[cli]",
"hermes-agent[dev]",

View File

@@ -11,8 +11,12 @@ def _load_optional_dependencies():
return project["optional-dependencies"]
def test_all_extra_includes_matrix_dependency():
def test_matrix_extra_exists_but_excluded_from_all():
"""matrix-nio[e2e] depends on python-olm which is upstream-broken on modern
macOS (archived libolm, C++ errors with Clang 21+). The [matrix] extra is
kept for opt-in install but deliberately excluded from [all] so one broken
upstream dep doesn't nuke every other extra during ``hermes update``."""
optional_dependencies = _load_optional_dependencies()
assert "matrix" in optional_dependencies
assert "hermes-agent[matrix]" in optional_dependencies["all"]
assert "hermes-agent[matrix]" not in optional_dependencies["all"]