From 29e04717081e5cd0bc15b0112f510f2f011e90dc Mon Sep 17 00:00:00 2001 From: Erosika Date: Fri, 10 Jul 2026 16:37:29 -0400 Subject: [PATCH] fix(honcho): update SDK and restore CI coverage --- plugins/memory/honcho/cli.py | 8 ++++---- pyproject.toml | 2 +- scripts/release.py | 2 ++ tests/test_honcho_startup_fail_open.py | 3 +++ tests/tools/test_lazy_deps.py | 12 ++++++------ tools/lazy_deps.py | 4 ++-- uv.lock | 8 ++++---- 7 files changed, 22 insertions(+), 17 deletions(-) diff --git a/plugins/memory/honcho/cli.py b/plugins/memory/honcho/cli.py index 3db0cc3fd684..25350e86d97c 100644 --- a/plugins/memory/honcho/cli.py +++ b/plugins/memory/honcho/cli.py @@ -510,21 +510,21 @@ def _ensure_sdk_installed() -> bool: pass print(" honcho-ai is not installed.") - answer = _prompt("Install it now? (honcho-ai>=2.0.1)", default="y") + answer = _prompt("Install it now? (honcho-ai==2.2.0)", default="y") if answer.lower() not in {"y", "yes"}: - print(" Skipping install. Run: pip install 'honcho-ai>=2.0.1'\n") + print(" Skipping install. Run: pip install 'honcho-ai==2.2.0'\n") return False print(" Installing honcho-ai...", flush=True) from hermes_cli.tools_config import _pip_install - result = _pip_install(["honcho-ai>=2.0.1"]) + result = _pip_install(["honcho-ai==2.2.0"]) if result.returncode == 0: print(" Installed.\n") return True else: print(f" Install failed:\n{(result.stderr or '').strip()}") - print(" Run manually: uv pip install 'honcho-ai>=2.0.1'\n") + print(" Run manually: uv pip install 'honcho-ai==2.2.0'\n") return False diff --git a/pyproject.toml b/pyproject.toml index eb5fe4727b38..2b9242118e87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -183,7 +183,7 @@ pty = [ # any existing `pip install hermes-agent[pty]` invocations resolve cleanly # without pulling in extra packages. ] -honcho = ["honcho-ai==2.0.1"] +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. Exact pins MUST match the # LAZY_DEPS pins (enforced by tests/test_project_metadata.py). Deliberately diff --git a/scripts/release.py b/scripts/release.py index b1ebee91d77e..6d638ba7b09e 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -87,6 +87,8 @@ AUTHOR_MAP = { "iganapolsky@gmail.com": "IgorGanapolsky", # PR #62125 salvage (compaction anti-thrash threshold verification) "275853971+aeyeopsdev@users.noreply.github.com": "aeyeopsdev", # PRs #36035/#36068 salvage (google-chat: http inbound without pubsub; clarify cards) "tturney1@gmail.com": "TheTom", # PR #62696 salvage (gateway: expand @ context references under runtime/session model resolution) + "1822947159@qq.com": "ljy-2000", # PR #62204 adopted in #62282 + "xwolf.live@gmail.com": "vizi0uz", # PR #59795 adopted in #62282 "wilsonkinyuam@gmail.com": "WilsonKinyua", # PR #62052 (tui: persist unflushed conversations on disconnect/restart) "humphreysun98@gmail.com": "HumphreySun98", # PR #61142 salvage (web: null web/backend config value guards) "sonxi@nous.local": "17324393074", # PR #53196 salvage (tools_config: known_plugin_toolsets null guard; commit under unlinked local identity) diff --git a/tests/test_honcho_startup_fail_open.py b/tests/test_honcho_startup_fail_open.py index 7993db5aa142..7f5ffc33e9ca 100644 --- a/tests/test_honcho_startup_fail_open.py +++ b/tests/test_honcho_startup_fail_open.py @@ -22,6 +22,9 @@ def _configured_hybrid_config() -> _FakeHonchoConfig: base_url="http://127.0.0.1:8000", recall_mode="hybrid", init_on_session_start=False, + injection_frequency="every-turn", + context_cadence=1, + dialectic_cadence=1, dialectic_depth=1, dialectic_depth_levels=None, reasoning_heuristic=True, diff --git a/tests/tools/test_lazy_deps.py b/tests/tools/test_lazy_deps.py index 4296ffda4514..2b319ae049d8 100644 --- a/tests/tools/test_lazy_deps.py +++ b/tests/tools/test_lazy_deps.py @@ -27,7 +27,7 @@ class TestSpecSafety: @pytest.mark.parametrize("spec", [ "mistralai>=2.3.0,<3", "elevenlabs>=1.0,<2", - "honcho-ai>=2.0.1,<3", + "honcho-ai>=2.2.0,<3", "boto3>=1.35.0,<2", "mautrix[encryption]>=0.20,<1", "google-api-python-client>=2.100,<3", @@ -253,13 +253,13 @@ class TestIsSatisfiedVersionAware: monkeypatch.setattr(_md, "version", _version) def test_exact_pin_match_returns_true(self, monkeypatch): - self._fake_version(monkeypatch, {"honcho-ai": "2.0.1"}) - assert ld._is_satisfied("honcho-ai==2.0.1") is True + self._fake_version(monkeypatch, {"honcho-ai": "2.2.0"}) + assert ld._is_satisfied("honcho-ai==2.2.0") is True def test_exact_pin_mismatch_returns_false(self, monkeypatch): - # Installed 2.0.0, spec requires 2.0.1 → False (needs upgrade). - self._fake_version(monkeypatch, {"honcho-ai": "2.0.0"}) - assert ld._is_satisfied("honcho-ai==2.0.1") is False + # Installed 2.1.2, spec requires 2.2.0 → False (needs upgrade). + self._fake_version(monkeypatch, {"honcho-ai": "2.1.2"}) + assert ld._is_satisfied("honcho-ai==2.2.0") is False def test_range_within_returns_true(self, monkeypatch): self._fake_version(monkeypatch, {"slack-bolt": "1.27.0"}) diff --git a/tools/lazy_deps.py b/tools/lazy_deps.py index 06155bfe8493..ec5692ecd550 100644 --- a/tools/lazy_deps.py +++ b/tools/lazy_deps.py @@ -139,7 +139,7 @@ LAZY_DEPS: dict[str, tuple[str, ...]] = { "image.fal": ("fal-client==0.13.1",), # ─── Memory providers ────────────────────────────────────────────────── - "memory.honcho": ("honcho-ai==2.0.1",), + "memory.honcho": ("honcho-ai==2.2.0",), "memory.hindsight": ("hindsight-client==0.6.1",), # supermemory + mem0 are opt-in cloud memory providers with their own # SDKs. On the published Docker image the agent venv is sealed @@ -495,7 +495,7 @@ def _pkg_name_from_spec(spec: str) -> str: def _specifier_from_spec(spec: str) -> str: """Extract just the version-specifier portion of a pip spec. - ``"honcho-ai==2.0.1"`` → ``"==2.0.1"`` + ``"honcho-ai==2.2.0"`` → ``"==2.2.0"`` ``"mautrix[encryption]>=0.20,<1"`` → ``">=0.20,<1"`` ``"package"`` → ``""`` (no version constraint) """ diff --git a/uv.lock b/uv.lock index 7dd892579d12..59f9d8e2628b 100644 --- a/uv.lock +++ b/uv.lock @@ -1791,7 +1791,7 @@ requires-dist = [ { 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.0.1" }, + { name = "honcho-ai", marker = "extra == 'honcho'", specifier = "==2.2.0" }, { name = "httpx", extras = ["socks"], specifier = "==0.28.1" }, { name = "jinja2", specifier = "==3.1.6" }, { name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.6.8" }, @@ -1898,16 +1898,16 @@ wheels = [ [[package]] name = "honcho-ai" -version = "2.0.1" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, { name = "pydantic" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/30/d30ba159404050d53b4b1b1c4477f9591f43af18758be1fb7dab6afbfe7d/honcho_ai-2.0.1.tar.gz", hash = "sha256:6fdeebf9454e62bc523d57888e50359e67baafdb21f68621f9c14e08dc00623a", size = 46732, upload-time = "2026-02-09T21:03:26.99Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/1d/322649dbc8e9b21726a3a3e9b6a4975f2d122ca4b2450612f9ff2a9023b6/honcho_ai-2.2.0.tar.gz", hash = "sha256:16e16825afac51f2fdd59670dd4a6e44d04a3fa2c8eb466b1767dcc96706b7a0", size = 49979, upload-time = "2026-07-02T17:04:33.13Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/de/83fda0c057cfa11d6b5ed532623184591aa7dcff4a067934ba6811026229/honcho_ai-2.0.1-py3-none-any.whl", hash = "sha256:94887e61d59f353e1e1e20b395858040780f5d67ca1e9d450538646544e4e42f", size = 56780, upload-time = "2026-02-09T21:03:25.992Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/66af5f7ba3d75796f4523eac1e069fbdc759c3f0b8adab9fb7ae04e15784/honcho_ai-2.2.0-py3-none-any.whl", hash = "sha256:32f098a4c8bcfe4288f0994ddab0bc52a68dc87069d0f2ce2c8758ee2a1761f2", size = 60305, upload-time = "2026-07-02T17:04:33.967Z" }, ] [[package]]