ha-mcp-dev 7.5.0.dev550__tar.gz → 7.5.0.dev551__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.5.0.dev550/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.5.0.dev551}/PKG-INFO +1 -1
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/pyproject.toml +1 -1
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_automations.py +59 -6
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/LICENSE +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/README.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/setup.cfg +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/settings_ui.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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.5.0.
|
|
7
|
+
version = "7.5.0.dev551"
|
|
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"
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
@@ -231,6 +231,30 @@ def _normalize_config_for_roundtrip(config: dict[str, Any]) -> dict[str, Any]:
|
|
|
231
231
|
return cast(dict[str, Any], normalized)
|
|
232
232
|
|
|
233
233
|
|
|
234
|
+
def _strip_redundant_identifier_echo(
|
|
235
|
+
result: dict[str, Any],
|
|
236
|
+
*,
|
|
237
|
+
extra_excludes: tuple[str, ...] = (),
|
|
238
|
+
) -> dict[str, Any]:
|
|
239
|
+
"""Strip the redundant ``identifier`` echo from an upsert/delete response.
|
|
240
|
+
|
|
241
|
+
The canonical ``automation_id`` key (resolved entity_id, falling back to
|
|
242
|
+
input identifier or ``unique_id``) makes re-echoing the raw ``identifier``
|
|
243
|
+
redundant noise.
|
|
244
|
+
|
|
245
|
+
``unique_id`` is intentionally retained — it's HA's internal identifier,
|
|
246
|
+
distinct from ``entity_id``/``automation_id``, and callers track it for
|
|
247
|
+
cleanup. Do not extend ``extra_excludes`` to ``"unique_id"``: that
|
|
248
|
+
regression broke E2E ``test_duplicate_automation_prevention`` at 5fe5338.
|
|
249
|
+
|
|
250
|
+
``extra_excludes`` lets a call site drop additional internal keys the
|
|
251
|
+
spread shouldn't surface (e.g. ``"success"`` on the python_transform
|
|
252
|
+
branch, where the caller manages that key directly).
|
|
253
|
+
"""
|
|
254
|
+
excluded = {"identifier", *extra_excludes}
|
|
255
|
+
return {k: v for k, v in result.items() if k not in excluded}
|
|
256
|
+
|
|
257
|
+
|
|
234
258
|
class AutomationConfigTools:
|
|
235
259
|
"""Configuration management tools for Home Assistant automations."""
|
|
236
260
|
|
|
@@ -284,7 +308,9 @@ class AutomationConfigTools:
|
|
|
284
308
|
|
|
285
309
|
The returned `config_hash` is stable across consecutive reads of an unchanged config — `compute_config_hash` documents the underlying contract.
|
|
286
310
|
|
|
287
|
-
The returned `automation_id` is the resolved entity_id (canonical
|
|
311
|
+
The returned `automation_id` is the resolved entity_id (canonical
|
|
312
|
+
form, e.g. `automation.morning_routine`) when the registry lookup
|
|
313
|
+
succeeds, falling back to the input `identifier` otherwise.
|
|
288
314
|
|
|
289
315
|
EXAMPLES:
|
|
290
316
|
- Get automation: ha_config_get_automation("automation.morning_routine")
|
|
@@ -406,6 +432,12 @@ class AutomationConfigTools:
|
|
|
406
432
|
"""
|
|
407
433
|
Create or update a Home Assistant automation.
|
|
408
434
|
|
|
435
|
+
The returned `automation_id` is the resolved entity_id (canonical
|
|
436
|
+
form, e.g. `automation.morning_routine`) when entity registration
|
|
437
|
+
succeeds, falling back to the input `identifier` (update path) or
|
|
438
|
+
the generated `unique_id` from the upsert response (fresh create
|
|
439
|
+
when no identifier was passed).
|
|
440
|
+
|
|
409
441
|
Before reaching for ``ha_config_set_automation``, consider whether a
|
|
410
442
|
dedicated tool fits the use case better:
|
|
411
443
|
|
|
@@ -666,12 +698,15 @@ class AutomationConfigTools:
|
|
|
666
698
|
response: dict[str, Any] = {
|
|
667
699
|
"success": True,
|
|
668
700
|
"action": "python_transform",
|
|
669
|
-
"
|
|
701
|
+
"automation_id": (
|
|
702
|
+
entity_id or identifier or result.get("unique_id")
|
|
703
|
+
),
|
|
670
704
|
"config_hash": new_config_hash,
|
|
671
705
|
"python_expression": python_transform,
|
|
672
706
|
"message": f"Automation {identifier} updated via Python transform",
|
|
673
|
-
|
|
674
|
-
|
|
707
|
+
**_strip_redundant_identifier_echo(
|
|
708
|
+
result, extra_excludes=("success",)
|
|
709
|
+
),
|
|
675
710
|
}
|
|
676
711
|
if bp_warnings:
|
|
677
712
|
response["best_practice_warnings"] = bp_warnings
|
|
@@ -761,9 +796,15 @@ class AutomationConfigTools:
|
|
|
761
796
|
|
|
762
797
|
merge_validation_meta(result, validation_meta)
|
|
763
798
|
|
|
799
|
+
automation_id = entity_id or identifier or result.get("unique_id")
|
|
764
800
|
return {
|
|
765
801
|
"success": True,
|
|
766
|
-
|
|
802
|
+
# automation_id omitted when all three fallbacks are falsy —
|
|
803
|
+
# the create path is unguarded by validate_identifier_not_empty,
|
|
804
|
+
# and surfacing automation_id=None would lie about resolvability.
|
|
805
|
+
# HA's upsert contract makes this branch unreachable in practice.
|
|
806
|
+
**({"automation_id": automation_id} if automation_id else {}),
|
|
807
|
+
**_strip_redundant_identifier_echo(result),
|
|
767
808
|
}
|
|
768
809
|
|
|
769
810
|
except ToolError:
|
|
@@ -1001,6 +1042,11 @@ class AutomationConfigTools:
|
|
|
1001
1042
|
"""
|
|
1002
1043
|
Delete a Home Assistant automation.
|
|
1003
1044
|
|
|
1045
|
+
The returned `automation_id` is the resolved entity_id (canonical
|
|
1046
|
+
form, e.g. `automation.morning_routine`) when the registry lookup
|
|
1047
|
+
succeeded before the delete, falling back to the input
|
|
1048
|
+
`identifier` otherwise.
|
|
1049
|
+
|
|
1004
1050
|
EXAMPLES:
|
|
1005
1051
|
- Delete automation: ha_config_remove_automation("automation.old_automation")
|
|
1006
1052
|
- Delete by unique_id: ha_config_remove_automation("my_unique_id")
|
|
@@ -1040,7 +1086,14 @@ class AutomationConfigTools:
|
|
|
1040
1086
|
f"Deletion confirmed but removal verification failed: {e}"
|
|
1041
1087
|
)
|
|
1042
1088
|
|
|
1043
|
-
return {
|
|
1089
|
+
return {
|
|
1090
|
+
"success": True,
|
|
1091
|
+
"action": "delete",
|
|
1092
|
+
"automation_id": (
|
|
1093
|
+
entity_id_for_wait or identifier or result.get("unique_id")
|
|
1094
|
+
),
|
|
1095
|
+
**_strip_redundant_identifier_echo(result),
|
|
1096
|
+
}
|
|
1044
1097
|
except ToolError:
|
|
1045
1098
|
raise
|
|
1046
1099
|
except Exception as e:
|
|
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
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_entry_flow.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp/transforms/lite_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev550 → ha_mcp_dev-7.5.0.dev551}/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
|