ha-mcp-dev 7.12.3.dev1865__tar.gz → 7.12.3.dev1867__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 (163) hide show
  1. {ha_mcp_dev-7.12.3.dev1865/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.12.3.dev1867}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/config_entry_flow.py +51 -13
  4. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/LICENSE +0 -0
  6. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/README.md +0 -0
  8. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/browser_landing.py +0 -0
  18. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/__init__.py +0 -0
  19. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/rest_client.py +0 -0
  20. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/supervisor_client.py +0 -0
  21. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_client.py +0 -0
  22. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_listener.py +0 -0
  23. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/config.py +0 -0
  24. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  25. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  26. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  27. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/errors.py +0 -0
  28. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/llm_exposure.py +0 -0
  29. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/__init__.py +0 -0
  30. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/approval_queue.py +0 -0
  31. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/evaluator.py +0 -0
  32. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/handlers.py +0 -0
  33. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/middleware.py +0 -0
  34. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/model.py +0 -0
  35. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/persistence.py +0 -0
  36. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/value_sources.py +0 -0
  37. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/py.typed +0 -0
  38. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/read_only.py +0 -0
  39. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  40. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  41. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  42. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  43. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  44. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  45. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  46. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  47. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  48. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  49. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  50. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  51. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  52. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  53. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  54. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  55. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  56. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  57. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  58. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  59. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  60. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  61. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  62. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  63. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  64. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/server.py +0 -0
  65. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/__init__.py +0 -0
  66. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.css +0 -0
  67. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.html +0 -0
  68. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.js +0 -0
  69. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/smoke_test.py +0 -0
  70. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  71. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/__init__.py +0 -0
  72. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/auto_backup.py +0 -0
  73. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/backup.py +0 -0
  74. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  75. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/device_control.py +0 -0
  76. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/enhanced.py +0 -0
  77. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/helpers.py +0 -0
  78. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/__init__.py +0 -0
  79. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/base.py +0 -0
  80. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/matter.py +0 -0
  81. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/thread.py +0 -0
  82. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  83. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/zwave.py +0 -0
  84. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/reference_validator.py +0 -0
  85. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/registry.py +0 -0
  86. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  87. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  88. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  89. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  90. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  91. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  92. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  93. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  94. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  95. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  96. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_addons.py +0 -0
  97. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_areas.py +0 -0
  98. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  99. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  100. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_calendar.py +0 -0
  101. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_camera.py +0 -0
  102. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_categories.py +0 -0
  103. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_code.py +0 -0
  104. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  105. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  106. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  107. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  108. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  109. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  110. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_dev.py +0 -0
  111. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_energy.py +0 -0
  112. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_entities.py +0 -0
  113. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  114. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_groups.py +0 -0
  115. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_hacs.py +0 -0
  116. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_history.py +0 -0
  117. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_integrations.py +0 -0
  118. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_labels.py +0 -0
  119. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  120. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_radio.py +0 -0
  121. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_registry.py +0 -0
  122. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_resources.py +0 -0
  123. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_search.py +0 -0
  124. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_service.py +0 -0
  125. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_services.py +0 -0
  126. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_system.py +0 -0
  127. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_themes.py +0 -0
  128. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_todo.py +0 -0
  129. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_traces.py +0 -0
  130. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_updates.py +0 -0
  131. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_utility.py +0 -0
  132. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  133. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  134. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_zones.py +0 -0
  135. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/util_helpers.py +0 -0
  136. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/validation_middleware.py +0 -0
  137. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/__init__.py +0 -0
  138. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/categorized_search.py +0 -0
  139. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  140. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transport_security.py +0 -0
  141. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/update_check.py +0 -0
  142. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/__init__.py +0 -0
  143. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/config_hash.py +0 -0
  144. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/data_paths.py +0 -0
  145. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/domain_handlers.py +0 -0
  146. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  147. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  148. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/operation_manager.py +0 -0
  149. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/python_sandbox.py +0 -0
  150. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/skill_loader.py +0 -0
  151. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/usage_logger.py +0 -0
  152. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/__init__.py +0 -0
  153. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/model.py +0 -0
  154. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/persistence.py +0 -0
  155. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/resolver.py +0 -0
  156. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  157. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  158. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  159. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  160. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  161. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/tests/__init__.py +0 -0
  162. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/tests/test_constants.py +0 -0
  163. {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/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.12.3.dev1865
3
+ Version: 7.12.3.dev1867
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.12.3.dev1865"
7
+ version = "7.12.3.dev1867"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -165,6 +165,28 @@ def _record_ignored_section_keys(
165
165
  )
166
166
 
167
167
 
168
+ def _ignored_keys_warnings(
169
+ ignored_config_keys: set[str], remaining_config: dict[str, Any]
170
+ ) -> list[str]:
171
+ """Build warnings for caller-supplied config keys no flow step consumed."""
172
+ warnings: list[str] = []
173
+ ignored = ignored_config_keys | {
174
+ key for key in remaining_config if key not in _MENU_SELECTION_KEYS
175
+ }
176
+ if ignored:
177
+ warnings.append(
178
+ "Ignored config keys not declared by the Home Assistant flow "
179
+ f"schema: {', '.join(sorted(ignored))}"
180
+ )
181
+ leftover_menu_keys = _MENU_SELECTION_KEYS & remaining_config.keys()
182
+ if leftover_menu_keys:
183
+ warnings.append(
184
+ "Ignored menu selection key(s) with no matching menu step: "
185
+ f"{', '.join(sorted(leftover_menu_keys))}"
186
+ )
187
+ return warnings
188
+
189
+
168
190
  def _consume_form_schema(
169
191
  data_schema: list[Any],
170
192
  remaining_config: dict[str, Any],
@@ -643,15 +665,10 @@ async def _handle_flow_steps(
643
665
  result_type = current_step.get("type")
644
666
 
645
667
  if result_type == _FlowType.CREATE_ENTRY:
646
- ignored_config_keys.update(
647
- key for key in remaining_config if key not in _MENU_SELECTION_KEYS
648
- )
649
668
  response: dict[str, Any] = {"success": True, "entry": current_step}
650
- if ignored_config_keys:
651
- response["warnings"] = [
652
- "Ignored config keys not declared by the Home Assistant flow "
653
- f"schema: {', '.join(sorted(ignored_config_keys))}"
654
- ]
669
+ warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
670
+ if warnings:
671
+ response["warnings"] = warnings
655
672
  return response
656
673
 
657
674
  if result_type == _FlowType.ABORT:
@@ -731,30 +748,43 @@ async def _handle_config_subentry_flow_steps(
731
748
  *,
732
749
  is_reconfigure: bool,
733
750
  ) -> dict[str, Any]:
734
- """Walk a config subentry flow and accept HA's reconfigure-success abort."""
751
+ """Walk a config subentry flow and accept HA's reconfigure-success abort.
752
+
753
+ Successful results include ``warnings`` when caller-supplied config keys
754
+ were not declared by any flow step.
755
+ """
735
756
  remaining_config = dict(config)
736
757
  current_step = initial_step
737
758
  last_menu_choice: str | None = None
759
+ ignored_config_keys: set[str] = set()
738
760
  max_steps = 10
739
761
 
740
762
  for step_num in range(max_steps):
741
763
  result_type = current_step.get("type")
742
764
 
743
765
  if result_type == _FlowType.CREATE_ENTRY:
744
- return {
766
+ response: dict[str, Any] = {
745
767
  "success": True,
746
768
  "operation": "created",
747
769
  "flow_result": current_step,
748
770
  }
771
+ warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
772
+ if warnings:
773
+ response["warnings"] = warnings
774
+ return response
749
775
 
750
776
  if result_type == _FlowType.ABORT:
751
777
  reason = current_step.get("reason")
752
778
  if is_reconfigure and reason in _RECONFIGURE_SUCCESS_REASONS:
753
- return {
779
+ response = {
754
780
  "success": True,
755
781
  "operation": "reconfigured",
756
782
  "flow_result": current_step,
757
783
  }
784
+ warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
785
+ if warnings:
786
+ response["warnings"] = warnings
787
+ return response
758
788
  raise_tool_error(
759
789
  create_error_response(
760
790
  ErrorCode.SERVICE_CALL_FAILED,
@@ -784,7 +814,12 @@ async def _handle_config_subentry_flow_steps(
784
814
  continue
785
815
 
786
816
  if result_type == _FlowType.FORM:
787
- form_data = _handle_form_step(flow_id, current_step, remaining_config)
817
+ form_data = _handle_form_step(
818
+ flow_id,
819
+ current_step,
820
+ remaining_config,
821
+ ignored_config_keys,
822
+ )
788
823
  logger.debug(
789
824
  "Config subentry flow step %s: form submit (step_id=%s, keys=%s)",
790
825
  step_num,
@@ -895,7 +930,7 @@ async def set_config_subentry(
895
930
  )
896
931
  raise
897
932
 
898
- return {
933
+ response = {
899
934
  "success": True,
900
935
  "entry_id": entry_id,
901
936
  "subentry_type": subentry_type,
@@ -904,6 +939,9 @@ async def set_config_subentry(
904
939
  "flow_result": result["flow_result"],
905
940
  "message": f"Config subentry {result['operation']} successfully",
906
941
  }
942
+ if result.get("warnings"):
943
+ response["warnings"] = result["warnings"]
944
+ return response
907
945
 
908
946
 
909
947
  async def get_user_step_field_names(client: Any, helper_type: str) -> set[str] | None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.12.3.dev1865
3
+ Version: 7.12.3.dev1867
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