Mechanical only, and separated from the judgment calls that follow so the reviewable changes are not buried in a 98-file whitespace diff. 227 automatic fixes: 60 blank lines carrying whitespace, 60 unsorted import blocks, 34 Optional[X] to X | None, 28 unused imports, 16 deprecated typing imports, 12 datetime.timezone.utc to datetime.UTC, and assorted smaller modernisations. Then `ruff format` over src and tests: 98 files reformatted, 35 already conforming. No file among the unused-import findings defines __all__ or is an __init__.py, so nothing here removes a re-export. `make test`: 658 passed, unchanged from HEAD. Two things observed while verifying, neither addressed here: `pytest tests/` cannot collect — tests/e2e/test_orchestration_e2e.py uses an `e2e` marker that is not registered, and the config is strict about markers. This fails identically at HEAD, so it predates this change; `make test` passes because it ignores tests/e2e, tests/integration and tests/contracts. test_tatlock_tool_call_logging_calculator is flaky. It failed once in a full run with these changes and passed on the next, passes in isolation with them, and fails in isolation at HEAD. It is order- or timing-dependent, not a regression from this commit — established by running the full suite both ways rather than by reasoning about which change could have caused it. Co-Authored-By: Claude <noreply@anthropic.com>
92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
"""
|
|
Housekeeper capability registration for the Household Registry.
|
|
|
|
Defines The Housekeeper's capabilities and registers it as a
|
|
household member for coordination by the Steward and Tatlock.
|
|
"""
|
|
|
|
from src.agents.housekeeper.agent import get_housekeeper_agent
|
|
from src.agents.housekeeper.tools import HOUSEKEEPER_TOOLS
|
|
from src.core.household_registry import (
|
|
HouseholdCapability,
|
|
get_household_registry,
|
|
)
|
|
from src.core.logging_config import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
# The Housekeeper's capability summary for Steward coordination
|
|
HOUSEKEEPER_CAPABILITY = HouseholdCapability(
|
|
name="housekeeper",
|
|
role="The Housekeeper",
|
|
category="automation",
|
|
description=(
|
|
"Home automation control: TURN ON/OFF devices, ACTIVATE scenes, "
|
|
"RUN scripts, LIST devices, MANAGE automations. Controls lights, "
|
|
"switches, climate, and other smart home devices via Home Assistant."
|
|
),
|
|
domains=[
|
|
"lights",
|
|
"switches",
|
|
"automation",
|
|
"home",
|
|
"smart home",
|
|
"scene",
|
|
"script",
|
|
"device",
|
|
"turn on",
|
|
"turn off",
|
|
"temperature",
|
|
"climate",
|
|
"fan",
|
|
"cover",
|
|
"blinds",
|
|
],
|
|
cost="low", # Fast local API calls to core-api
|
|
requires_network=True, # Needs core-api access
|
|
)
|
|
|
|
|
|
def get_housekeeper_capability() -> HouseholdCapability:
|
|
"""Get The Housekeeper's capability definition."""
|
|
return HOUSEKEEPER_CAPABILITY
|
|
|
|
|
|
def register_housekeeper() -> None:
|
|
"""
|
|
Register The Housekeeper with the Household Registry.
|
|
|
|
This makes The Housekeeper available for:
|
|
- Steward recommendations (via capability summary)
|
|
- Tatlock delegation (via agent reference)
|
|
- Tool scoping (via tool list)
|
|
"""
|
|
registry = get_household_registry()
|
|
|
|
# Check if already registered
|
|
if "housekeeper" in registry:
|
|
logger.debug("housekeeper_already_registered")
|
|
return
|
|
|
|
registry.register(
|
|
name="housekeeper",
|
|
capability=HOUSEKEEPER_CAPABILITY,
|
|
tools=HOUSEKEEPER_TOOLS,
|
|
agent=get_housekeeper_agent(),
|
|
)
|
|
|
|
logger.info(
|
|
"housekeeper_registered",
|
|
role=HOUSEKEEPER_CAPABILITY.role,
|
|
domains=HOUSEKEEPER_CAPABILITY.domains,
|
|
tool_count=len(HOUSEKEEPER_TOOLS),
|
|
)
|
|
|
|
|
|
def unregister_housekeeper() -> None:
|
|
"""Unregister The Housekeeper from the Household Registry."""
|
|
registry = get_household_registry()
|
|
registry.unregister("housekeeper")
|
|
logger.info("housekeeper_unregistered")
|