ha-mcp-dev 7.12.3.dev1894__tar.gz → 7.12.3.dev1895__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 (165) hide show
  1. {ha_mcp_dev-7.12.3.dev1894/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.12.3.dev1895}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_dev.py +54 -5
  4. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/LICENSE +0 -0
  6. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/README.md +0 -0
  8. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/browser_landing.py +0 -0
  18. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/__init__.py +0 -0
  19. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/rest_client.py +0 -0
  20. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/supervisor_client.py +0 -0
  21. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_client.py +0 -0
  22. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_listener.py +0 -0
  23. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/config.py +0 -0
  24. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  25. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  26. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  27. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/errors.py +0 -0
  28. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/llm_exposure.py +0 -0
  29. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/__init__.py +0 -0
  30. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/approval_queue.py +0 -0
  31. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/evaluator.py +0 -0
  32. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/handlers.py +0 -0
  33. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/middleware.py +0 -0
  34. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/model.py +0 -0
  35. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/persistence.py +0 -0
  36. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/value_sources.py +0 -0
  37. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/py.typed +0 -0
  38. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/read_only.py +0 -0
  39. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  40. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  41. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  42. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  43. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  44. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  45. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  46. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  47. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  48. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  49. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  50. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  51. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  52. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  53. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  54. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  55. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  56. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  57. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  58. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  59. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  60. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  61. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  62. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  63. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/server.py +0 -0
  65. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/__init__.py +0 -0
  66. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.css +0 -0
  67. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.html +0 -0
  68. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.js +0 -0
  69. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/smoke_test.py +0 -0
  70. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  71. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/strict_bps.py +0 -0
  72. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/__init__.py +0 -0
  73. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/auto_backup.py +0 -0
  74. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/backup.py +0 -0
  75. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  76. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/component_api.py +0 -0
  77. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  78. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/device_control.py +0 -0
  79. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/enhanced.py +0 -0
  80. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/helpers.py +0 -0
  81. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/__init__.py +0 -0
  82. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/base.py +0 -0
  83. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/matter.py +0 -0
  84. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/thread.py +0 -0
  85. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  86. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/zwave.py +0 -0
  87. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/reference_validator.py +0 -0
  88. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/registry.py +0 -0
  89. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  90. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  91. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  92. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  93. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  94. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  95. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  96. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  97. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  98. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  99. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_addons.py +0 -0
  100. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_areas.py +0 -0
  101. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  102. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  103. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_calendar.py +0 -0
  104. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_camera.py +0 -0
  105. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_categories.py +0 -0
  106. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_code.py +0 -0
  107. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  108. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  109. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  110. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  111. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  112. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  113. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_energy.py +0 -0
  114. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_entities.py +0 -0
  115. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  116. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_groups.py +0 -0
  117. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_hacs.py +0 -0
  118. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_history.py +0 -0
  119. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_integrations.py +0 -0
  120. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_labels.py +0 -0
  121. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  122. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_radio.py +0 -0
  123. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_registry.py +0 -0
  124. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_resources.py +0 -0
  125. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_search.py +0 -0
  126. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_service.py +0 -0
  127. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_services.py +0 -0
  128. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_system.py +0 -0
  129. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_themes.py +0 -0
  130. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_todo.py +0 -0
  131. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_traces.py +0 -0
  132. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_updates.py +0 -0
  133. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_utility.py +0 -0
  134. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  135. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  136. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_zones.py +0 -0
  137. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/util_helpers.py +0 -0
  138. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/validation_middleware.py +0 -0
  139. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/__init__.py +0 -0
  140. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/categorized_search.py +0 -0
  141. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  142. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transport_security.py +0 -0
  143. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/update_check.py +0 -0
  144. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/__init__.py +0 -0
  145. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/config_hash.py +0 -0
  146. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/data_paths.py +0 -0
  147. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/domain_handlers.py +0 -0
  148. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  149. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  150. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/operation_manager.py +0 -0
  151. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/python_sandbox.py +0 -0
  152. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/skill_loader.py +0 -0
  153. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/usage_logger.py +0 -0
  154. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/__init__.py +0 -0
  155. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/model.py +0 -0
  156. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/persistence.py +0 -0
  157. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/resolver.py +0 -0
  158. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  159. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  160. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  161. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  162. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  163. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/tests/__init__.py +0 -0
  164. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/tests/test_constants.py +0 -0
  165. {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894
3
+ Version: 7.12.3.dev1895
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.dev1894"
7
+ version = "7.12.3.dev1895"
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
@@ -44,8 +44,25 @@ COMPONENT_DOMAIN = "ha_mcp_tools"
44
44
  # (custom_components/ha_mcp_tools/const.py OPT_CHANNEL / OPT_PIP_SPEC).
45
45
  _OPT_CHANNEL = "channel"
46
46
  _OPT_PIP_SPEC = "pip_spec"
47
+ _OPT_SERVER_URL = "server_url"
48
+ _OPT_EXTERNAL_URL = "external_url"
49
+ _OPT_WEBHOOK_ID_OVERRIDE = "webhook_id_override"
50
+ _OPT_SECRET_PATH_OVERRIDE = "secret_path_override"
47
51
  _VALID_CHANNELS = ("stable", "dev")
48
52
 
53
+ # Optional text fields the component's options flow pre-fills via
54
+ # suggested_value (so the UI can clear them). Because an OMITTED optional field
55
+ # reads as "cleared" rather than "unchanged", a partial update_source submit
56
+ # must resend these at their current values or it would blank the user's
57
+ # server-URL / connect-secret overrides.
58
+ _PRESERVED_OPTION_KEYS = (
59
+ _OPT_PIP_SPEC,
60
+ _OPT_SERVER_URL,
61
+ _OPT_EXTERNAL_URL,
62
+ _OPT_WEBHOOK_ID_OVERRIDE,
63
+ _OPT_SECRET_PATH_OVERRIDE,
64
+ )
65
+
49
66
  # Delay before a self-affecting action (embedded entry reload / options
50
67
  # submit) fires, so this tool's JSON response flushes to the MCP client
51
68
  # before the serving thread is torn down. Mirrors
@@ -85,6 +102,23 @@ def _spawn_background(coro: Any) -> None:
85
102
  task.add_done_callback(_BACKGROUND_TASKS.discard)
86
103
 
87
104
 
105
+ def _field_prefill(item: dict[str, Any]) -> Any:
106
+ """Return a serialized options-flow field's current value.
107
+
108
+ Reads ``description.suggested_value`` first: a persisted option is
109
+ serialized there (as ``add_suggested_values_to_schema`` does; this component
110
+ sets it directly on the ``vol.Optional`` marker), and the clearable text
111
+ fields carry their value there rather than as a schema ``default`` (a
112
+ ``default`` equal to the value would make the field impossible to clear).
113
+ Falls back to ``default`` then ``value`` for the dropdown/toggle fields.
114
+ Mirrors ``tools_integrations.options_from_form_flow``.
115
+ """
116
+ description = item.get("description")
117
+ if isinstance(description, dict) and description.get("suggested_value") is not None:
118
+ return description["suggested_value"]
119
+ return item.get("default", item.get("value"))
120
+
121
+
88
122
  async def find_server_config_entry(
89
123
  client: Any,
90
124
  ) -> tuple[str, dict[str, Any], dict[str, Any]] | None:
@@ -95,8 +129,9 @@ async def find_server_config_entry(
95
129
  (services) entry's flow aborts immediately. Returns
96
130
  ``(entry_id, open_flow, current_options)`` with the options flow left
97
131
  OPEN (callers must submit or abort it), or ``None`` when no server
98
- entry exists. ``current_options`` maps schema field names to their
99
- defaults — i.e. the entry's current option values.
132
+ entry exists. ``current_options`` maps schema field names to their current
133
+ values (persisted ``suggested_value`` first, else the schema ``default`` or
134
+ ``value``, via ``_field_prefill``).
100
135
 
101
136
  Module-level (not a DevTools method) so the settings UI's embedded
102
137
  restart handler can share it.
@@ -131,7 +166,7 @@ async def find_server_config_entry(
131
166
  continue
132
167
  schema = flow.get("data_schema") or []
133
168
  fields: dict[str, Any] = {
134
- str(item["name"]): item.get("default")
169
+ str(item["name"]): _field_prefill(item)
135
170
  for item in schema
136
171
  if isinstance(item, dict) and item.get("name")
137
172
  }
@@ -400,7 +435,16 @@ class DevTools:
400
435
  await asyncio.sleep(_SELF_ACTION_FLUSH_DELAY_S)
401
436
  try:
402
437
  result = await self._client.submit_options_flow_step(flow_id, user_input)
403
- logger.info("Deferred options submit result: %s", result.get("type"))
438
+ if result.get("type") == "create_entry":
439
+ logger.info("Deferred options submit applied")
440
+ else:
441
+ # Fire-and-forget: no caller is left to raise to, so a rejected
442
+ # self-restart must at least be discoverable in the log.
443
+ logger.warning(
444
+ "Deferred options submit was not applied (type=%s, errors=%s)",
445
+ result.get("type"),
446
+ result.get("errors") or result.get("reason"),
447
+ )
404
448
  except Exception:
405
449
  logger.exception("Deferred options-flow submit failed")
406
450
 
@@ -819,7 +863,12 @@ class DevTools:
819
863
  )
820
864
  )
821
865
  entry_id, flow, current = found
822
- user_input: dict[str, Any] = {}
866
+ # Resend the user's current overrides (see _PRESERVED_OPTION_KEYS) so a
867
+ # channel/pip-spec change here does not blank them — an omitted optional
868
+ # field reads as "cleared", not "unchanged".
869
+ user_input: dict[str, Any] = {
870
+ key: current[key] for key in _PRESERVED_OPTION_KEYS if current.get(key)
871
+ }
823
872
  if channel is not None:
824
873
  user_input[_OPT_CHANNEL] = channel
825
874
  if pip_spec is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.12.3.dev1894
3
+ Version: 7.12.3.dev1895
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