ha-mcp-dev 7.4.1.dev463__tar.gz → 7.4.1.dev464__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.
Files changed (109) hide show
  1. {ha_mcp_dev-7.4.1.dev463/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.4.1.dev464}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_scenes.py +13 -7
  4. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/LICENSE +0 -0
  6. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/README.md +0 -0
  8. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/client/__init__.py +0 -0
  17. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/client/rest_client.py +0 -0
  18. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/client/websocket_client.py +0 -0
  19. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/client/websocket_listener.py +0 -0
  20. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/config.py +0 -0
  21. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/errors.py +0 -0
  22. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/py.typed +0 -0
  23. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  24. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  25. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  26. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  27. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  28. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  29. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  30. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  31. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  32. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  33. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  34. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  35. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  36. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  37. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  38. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  39. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  40. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  41. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  42. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  43. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/server.py +0 -0
  44. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/settings_ui.py +0 -0
  45. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/smoke_test.py +0 -0
  46. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/__init__.py +0 -0
  47. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/backup.py +0 -0
  48. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  49. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/device_control.py +0 -0
  50. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/enhanced.py +0 -0
  51. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/helpers.py +0 -0
  52. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/reference_validator.py +0 -0
  53. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/registry.py +0 -0
  54. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/smart_search.py +0 -0
  55. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_addons.py +0 -0
  56. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_areas.py +0 -0
  57. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  58. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  59. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_calendar.py +0 -0
  60. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_camera.py +0 -0
  61. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_categories.py +0 -0
  62. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_code.py +0 -0
  63. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  64. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  65. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  66. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  67. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  68. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_energy.py +0 -0
  69. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_entities.py +0 -0
  70. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  71. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_groups.py +0 -0
  72. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_hacs.py +0 -0
  73. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_history.py +0 -0
  74. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_integrations.py +0 -0
  75. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_labels.py +0 -0
  76. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  77. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_registry.py +0 -0
  78. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_resources.py +0 -0
  79. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_search.py +0 -0
  80. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_service.py +0 -0
  81. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_services.py +0 -0
  82. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_system.py +0 -0
  83. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_todo.py +0 -0
  84. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_traces.py +0 -0
  85. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_updates.py +0 -0
  86. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_utility.py +0 -0
  87. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  88. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  89. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/tools_zones.py +0 -0
  90. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/tools/util_helpers.py +0 -0
  91. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/transforms/__init__.py +0 -0
  92. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/transforms/categorized_search.py +0 -0
  93. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/__init__.py +0 -0
  94. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/config_hash.py +0 -0
  95. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/data_paths.py +0 -0
  96. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/domain_handlers.py +0 -0
  97. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  98. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  99. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/operation_manager.py +0 -0
  100. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/python_sandbox.py +0 -0
  101. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp/utils/usage_logger.py +0 -0
  102. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  103. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  104. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  105. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  106. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  107. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/tests/__init__.py +0 -0
  108. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/tests/test_constants.py +0 -0
  109. {ha_mcp_dev-7.4.1.dev463 → ha_mcp_dev-7.4.1.dev464}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.4.1.dev463
3
+ Version: 7.4.1.dev464
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -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.dev463"
7
+ version = "7.4.1.dev464"
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"
@@ -795,13 +795,19 @@ class ConfigSceneTools:
795
795
  # the python_transform branch — a phantom category must not
796
796
  # rewrite the scene before erroring.
797
797
  #
798
- # Issue #1168 R7 blocker 22: gate on the user-facing ``category``
799
- # param, not ``effective_category``. ``_validate_scene_config``
800
- # promotes a metadata-embedded category into ``effective_category``
801
- # when the user passed ``category=None``; validating that on
802
- # every call costs a category-registry round-trip even when the
803
- # user wasn't trying to change the category at all.
804
- if category is not None and effective_category:
798
+ # Issue #1168 R8 (post-merge follow-up): gate on
799
+ # ``effective_category`` truthy, not on the user-facing
800
+ # ``category`` param. ``_validate_scene_config`` promotes a
801
+ # top-level ``config["category"]`` into ``effective_category``
802
+ # when the user passed ``category=None``; the R7 fix gated on
803
+ # ``category is not None`` to skip the WS round-trip when no
804
+ # category was supplied, but that left the dict-promoted path
805
+ # uncovered — a phantom category in ``config["category"]``
806
+ # would skip validation and reach ``apply_entity_category``,
807
+ # which attaches the phantom ID to the entity registry without
808
+ # checking it exists. Truthy check covers both sources and
809
+ # still skips the WS call when neither produces a category.
810
+ if effective_category:
805
811
  await self._validate_category_id(effective_category)
806
812
 
807
813
  # Issue #1168 R3 blocker 7: when caller passes ``config_hash``,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.4.1.dev463
3
+ Version: 7.4.1.dev464
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT