ha-mcp-dev 7.4.1.dev429__tar.gz → 7.4.1.dev430__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-7.4.1.dev429/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.4.1.dev430}/PKG-INFO +1 -1
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/pyproject.toml +1 -1
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_integrations.py +85 -31
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/LICENSE +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/README.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/setup.cfg +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/settings_ui.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.4.1.
|
|
7
|
+
version = "7.4.1.dev430"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.14"
|
|
@@ -971,7 +971,8 @@ class IntegrationTools:
|
|
|
971
971
|
)
|
|
972
972
|
|
|
973
973
|
try:
|
|
974
|
-
#
|
|
974
|
+
# Resolve unique_id via the entity registry, with a retry loop
|
|
975
|
+
# for transient registry failures.
|
|
975
976
|
unique_id = None
|
|
976
977
|
registry_result: dict[str, Any] | None = None
|
|
977
978
|
max_retries = 3
|
|
@@ -982,18 +983,18 @@ class IntegrationTools:
|
|
|
982
983
|
f"(attempt {attempt + 1}/{max_retries})"
|
|
983
984
|
)
|
|
984
985
|
|
|
985
|
-
#
|
|
986
|
+
# State check is informational only — disabled entities are
|
|
987
|
+
# missing from the state machine but resolved via the registry
|
|
988
|
+
# below (issue #1057). Kept as a debug breadcrumb rather than
|
|
989
|
+
# removed; full removal is option 3.2 in #1057, deferred to a
|
|
990
|
+
# separate PR for minimal blast radius here.
|
|
986
991
|
try:
|
|
987
992
|
state_check = await client.get_entity_state(entity_id)
|
|
988
993
|
if not state_check:
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
f"{wait_time}s before retry..."
|
|
994
|
-
)
|
|
995
|
-
await asyncio.sleep(wait_time)
|
|
996
|
-
continue
|
|
994
|
+
logger.debug(
|
|
995
|
+
f"Entity {entity_id} not in state; "
|
|
996
|
+
"proceeding to registry lookup"
|
|
997
|
+
)
|
|
997
998
|
except HomeAssistantAPIError as e:
|
|
998
999
|
# State check is best-effort here; an APIError (e.g. 404)
|
|
999
1000
|
# is informational. Auth/connection errors must propagate
|
|
@@ -1009,8 +1010,8 @@ class IntegrationTools:
|
|
|
1009
1010
|
registry_result = await client.send_websocket_message(
|
|
1010
1011
|
registry_msg
|
|
1011
1012
|
)
|
|
1012
|
-
if registry_result.get("success"):
|
|
1013
|
-
entity_entry = registry_result.get("result"
|
|
1013
|
+
if (registry_result or {}).get("success"):
|
|
1014
|
+
entity_entry = (registry_result or {}).get("result") or {}
|
|
1014
1015
|
unique_id = entity_entry.get("unique_id")
|
|
1015
1016
|
if unique_id:
|
|
1016
1017
|
logger.info(
|
|
@@ -1075,29 +1076,82 @@ class IntegrationTools:
|
|
|
1075
1076
|
)
|
|
1076
1077
|
return response
|
|
1077
1078
|
|
|
1078
|
-
# Fallback strategy 2: already-deleted check
|
|
1079
|
+
# Fallback strategy 2: already-deleted check. Confirm via the
|
|
1080
|
+
# registry too — a disabled entity is missing from the state
|
|
1081
|
+
# machine but still registry-resident, so state-absence alone
|
|
1082
|
+
# is not enough to declare success.
|
|
1079
1083
|
try:
|
|
1080
1084
|
final_state_check = await client.get_entity_state(entity_id)
|
|
1081
1085
|
if not final_state_check:
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1086
|
+
registry_still_has_entry = False
|
|
1087
|
+
try:
|
|
1088
|
+
verify_result = await client.send_websocket_message(
|
|
1089
|
+
{
|
|
1090
|
+
"type": "config/entity_registry/get",
|
|
1091
|
+
"entity_id": entity_id,
|
|
1092
|
+
}
|
|
1093
|
+
)
|
|
1094
|
+
if (verify_result or {}).get("success"):
|
|
1095
|
+
verify_entry = (verify_result or {}).get("result") or {}
|
|
1096
|
+
if verify_entry.get("entity_id"):
|
|
1097
|
+
registry_still_has_entry = True
|
|
1098
|
+
except HomeAssistantAPIError as verify_err:
|
|
1099
|
+
# On verify failure, conservatively assume the
|
|
1100
|
+
# entry is still there rather than silently
|
|
1101
|
+
# short-circuit to already_deleted.
|
|
1102
|
+
logger.debug(
|
|
1103
|
+
f"Registry verify for {entity_id} failed: "
|
|
1104
|
+
f"{verify_err}"
|
|
1105
|
+
)
|
|
1106
|
+
registry_still_has_entry = True
|
|
1107
|
+
|
|
1108
|
+
if not registry_still_has_entry:
|
|
1109
|
+
logger.info(
|
|
1110
|
+
f"Entity {entity_id} absent from state and "
|
|
1111
|
+
"registry; treating as already deleted"
|
|
1112
|
+
)
|
|
1113
|
+
return {
|
|
1114
|
+
"success": True,
|
|
1115
|
+
"action": "delete",
|
|
1116
|
+
"target": target,
|
|
1117
|
+
"helper_type": helper_type,
|
|
1118
|
+
"method": "websocket_delete",
|
|
1119
|
+
"entry_id": None,
|
|
1120
|
+
"entity_ids": [entity_id],
|
|
1121
|
+
"require_restart": False,
|
|
1122
|
+
"message": (
|
|
1123
|
+
f"Helper {target} was already deleted or "
|
|
1124
|
+
"never properly registered."
|
|
1125
|
+
),
|
|
1126
|
+
"fallback_used": "already_deleted",
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
logger.warning(
|
|
1130
|
+
f"Entity {entity_id} absent from state but still "
|
|
1131
|
+
"in registry; not already_deleted"
|
|
1132
|
+
)
|
|
1133
|
+
raise_tool_error(
|
|
1134
|
+
create_error_response(
|
|
1135
|
+
ErrorCode.SERVICE_CALL_FAILED,
|
|
1136
|
+
(
|
|
1137
|
+
f"Helper {target} could not be deleted: "
|
|
1138
|
+
"registry entry exists but unique_id was "
|
|
1139
|
+
"absent and the direct-id fallback "
|
|
1140
|
+
"delete failed."
|
|
1141
|
+
),
|
|
1142
|
+
suggestions=[
|
|
1143
|
+
"Re-enable the entity via "
|
|
1144
|
+
"ha_set_entity(enabled=True), then retry "
|
|
1145
|
+
"deletion.",
|
|
1146
|
+
"Or inspect the entity registry entry "
|
|
1147
|
+
"directly to confirm unique_id presence.",
|
|
1148
|
+
],
|
|
1149
|
+
context={
|
|
1150
|
+
"target": target,
|
|
1151
|
+
"entity_id": entity_id,
|
|
1152
|
+
},
|
|
1153
|
+
)
|
|
1085
1154
|
)
|
|
1086
|
-
return {
|
|
1087
|
-
"success": True,
|
|
1088
|
-
"action": "delete",
|
|
1089
|
-
"target": target,
|
|
1090
|
-
"helper_type": helper_type,
|
|
1091
|
-
"method": "websocket_delete",
|
|
1092
|
-
"entry_id": None,
|
|
1093
|
-
"entity_ids": [entity_id],
|
|
1094
|
-
"require_restart": False,
|
|
1095
|
-
"message": (
|
|
1096
|
-
f"Helper {target} was already deleted or "
|
|
1097
|
-
"never properly registered."
|
|
1098
|
-
),
|
|
1099
|
-
"fallback_used": "already_deleted",
|
|
1100
|
-
}
|
|
1101
1155
|
except HomeAssistantAPIError as e:
|
|
1102
1156
|
# 404 here means the state-check itself confirmed the
|
|
1103
1157
|
# entity is gone — treat as a soft signal and continue
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_entry_flow.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.4.1.dev429 → ha_mcp_dev-7.4.1.dev430}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|