fix(tools): keep default-off toolsets disabled

This commit is contained in:
mavrickdeveloper
2026-04-20 00:50:19 +01:00
committed by Teknium
parent e00d9630c5
commit 1fdf9a730c
2 changed files with 39 additions and 0 deletions

View File

@@ -546,6 +546,10 @@ def _get_platform_tools(
ts_tools = set(resolve_toolset(ts_key))
if ts_tools and ts_tools.issubset(all_tool_names):
enabled_toolsets.add(ts_key)
default_off = set(_DEFAULT_OFF_TOOLSETS)
if platform in default_off:
default_off.remove(platform)
enabled_toolsets -= default_off
# Plugin toolsets: enabled by default unless explicitly disabled.
# A plugin toolset is "known" for a platform once `hermes tools`

View File

@@ -3,6 +3,8 @@
from unittest.mock import patch
from hermes_cli.tools_config import (
_DEFAULT_OFF_TOOLSETS,
_apply_toolset_change,
_configure_provider,
_get_platform_tools,
_platform_toolset_summary,
@@ -21,6 +23,7 @@ def test_get_platform_tools_uses_default_when_platform_not_configured():
enabled = _get_platform_tools(config, "cli")
assert enabled
assert enabled.isdisjoint(_DEFAULT_OFF_TOOLSETS)
def test_configurable_toolsets_include_messaging():
@@ -32,6 +35,12 @@ def test_get_platform_tools_default_telegram_includes_messaging():
assert "messaging" in enabled
def test_get_platform_tools_homeassistant_platform_keeps_homeassistant_toolset():
enabled = _get_platform_tools({}, "homeassistant")
assert "homeassistant" in enabled
def test_get_platform_tools_preserves_explicit_empty_selection():
config = {"platform_toolsets": {"cli": []}}
@@ -40,6 +49,32 @@ def test_get_platform_tools_preserves_explicit_empty_selection():
assert enabled == set()
def test_apply_toolset_change_from_default_does_not_enable_default_off_toolsets():
"""Disabling one default toolset on a fresh config must not persist
default-off toolsets as explicitly enabled.
"""
config = {}
with patch("hermes_cli.tools_config.save_config"):
_apply_toolset_change(config, "cli", ["memory"], "disable")
saved = set(config["platform_toolsets"]["cli"])
assert "memory" not in saved
assert "terminal" in saved
assert saved.isdisjoint(_DEFAULT_OFF_TOOLSETS)
def test_apply_toolset_change_can_enable_default_off_toolset_from_default():
config = {}
with patch("hermes_cli.tools_config.save_config"):
_apply_toolset_change(config, "cli", ["homeassistant"], "enable")
saved = set(config["platform_toolsets"]["cli"])
assert "homeassistant" in saved
assert "terminal" in saved
def test_get_platform_tools_handles_null_platform_toolsets():
"""YAML `platform_toolsets:` with no value parses as None — the old
``config.get("platform_toolsets", {})`` pattern would then crash with