ha-mcp-dev 7.14.2.dev2083__tar.gz → 7.14.2.dev2086__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 (187) hide show
  1. {ha_mcp_dev-7.14.2.dev2083/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2086}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/capture.py +19 -12
  4. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/theme_guard.py +6 -0
  5. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/read_only.py +0 -12
  6. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_config_dashboards.py +1 -1
  7. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_dashboard_screenshot.py +1 -1
  8. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  9. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/LICENSE +0 -0
  10. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/README.md +0 -0
  12. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/setup.cfg +0 -0
  13. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/__init__.py +0 -0
  14. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/__main__.py +0 -0
  15. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/_pypi_marker +0 -0
  16. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/_version.py +0 -0
  17. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/auth/__init__.py +0 -0
  18. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/auth/consent_form.py +0 -0
  19. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/auth/provider.py +0 -0
  20. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/backup_manager.py +0 -0
  21. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/browser_landing.py +0 -0
  22. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/client/__init__.py +0 -0
  23. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/client/rest_client.py +0 -0
  24. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/client/supervisor_client.py +0 -0
  25. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/client/websocket_client.py +0 -0
  26. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/client/websocket_listener.py +0 -0
  27. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/config.py +0 -0
  28. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  29. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  30. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  31. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  32. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/errors.py +0 -0
  33. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/llm_exposure.py +0 -0
  34. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/__init__.py +0 -0
  35. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/approval_queue.py +0 -0
  36. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/evaluator.py +0 -0
  37. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/handlers.py +0 -0
  38. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/middleware.py +0 -0
  39. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/model.py +0 -0
  40. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/persistence.py +0 -0
  41. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/policy/value_sources.py +0 -0
  42. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/py.typed +0 -0
  43. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  44. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  45. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  46. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  47. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  48. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  49. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  50. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  51. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  52. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  53. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  54. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  55. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  56. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  57. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  58. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  59. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  60. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  61. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  62. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  63. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  64. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  65. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  66. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  67. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  68. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/server.py +0 -0
  69. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/__init__.py +0 -0
  70. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  71. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  72. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  73. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  74. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  75. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  76. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  77. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  78. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  79. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_theme.py +0 -0
  80. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  81. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  82. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  83. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  84. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  85. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/settings.css +0 -0
  86. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/settings.html +0 -0
  87. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/settings_ui/settings.js +0 -0
  88. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/smoke_test.py +0 -0
  89. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  90. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/strict_bps.py +0 -0
  91. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/__init__.py +0 -0
  92. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/auto_backup.py +0 -0
  93. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/backup.py +0 -0
  94. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  95. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/component_api.py +0 -0
  96. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/component_config_reads.py +0 -0
  97. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/component_devices.py +0 -0
  98. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/component_registries.py +0 -0
  99. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  100. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  101. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/device_control.py +0 -0
  102. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/enhanced.py +0 -0
  103. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/helpers.py +0 -0
  104. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/__init__.py +0 -0
  105. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/base.py +0 -0
  106. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/matter.py +0 -0
  107. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/thread.py +0 -0
  108. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  109. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/radio/zwave.py +0 -0
  110. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/reference_validator.py +0 -0
  111. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/registry.py +0 -0
  112. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  113. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  114. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  115. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  116. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  117. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  118. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  119. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  120. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  121. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  122. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_addons.py +0 -0
  123. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_areas.py +0 -0
  124. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  125. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  126. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_calendar.py +0 -0
  127. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_camera.py +0 -0
  128. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_categories.py +0 -0
  129. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_code.py +0 -0
  130. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  131. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  132. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  133. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  134. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_dev.py +0 -0
  135. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_energy.py +0 -0
  136. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_entities.py +0 -0
  137. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  138. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_groups.py +0 -0
  139. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_hacs.py +0 -0
  140. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_history.py +0 -0
  141. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_integrations.py +0 -0
  142. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_labels.py +0 -0
  143. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_radio.py +0 -0
  144. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_registry.py +0 -0
  145. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_resources.py +0 -0
  146. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_search.py +0 -0
  147. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_service.py +0 -0
  148. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_services.py +0 -0
  149. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_system.py +0 -0
  150. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_themes.py +0 -0
  151. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_todo.py +0 -0
  152. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_traces.py +0 -0
  153. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_updates.py +0 -0
  154. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_utility.py +0 -0
  155. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  156. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  157. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  158. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/tools_zones.py +0 -0
  159. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/util_helpers.py +0 -0
  160. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/tools/validation_middleware.py +0 -0
  161. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/transforms/__init__.py +0 -0
  162. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/transforms/categorized_search.py +0 -0
  163. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  164. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/transport_security.py +0 -0
  165. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/update_check.py +0 -0
  166. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/__init__.py +0 -0
  167. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/config_hash.py +0 -0
  168. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/data_paths.py +0 -0
  169. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/domain_handlers.py +0 -0
  170. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  171. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  172. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/operation_manager.py +0 -0
  173. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/python_sandbox.py +0 -0
  174. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/skill_loader.py +0 -0
  175. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/utils/usage_logger.py +0 -0
  176. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/visibility/__init__.py +0 -0
  177. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/visibility/model.py +0 -0
  178. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/visibility/persistence.py +0 -0
  179. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp/visibility/resolver.py +0 -0
  180. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  181. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  182. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  183. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  184. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  185. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/tests/__init__.py +0 -0
  186. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/tests/test_constants.py +0 -0
  187. {ha_mcp_dev-7.14.2.dev2083 → ha_mcp_dev-7.14.2.dev2086}/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.14.2.dev2083
3
+ Version: 7.14.2.dev2086
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.14.2.dev2083"
7
+ version = "7.14.2.dev2086"
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
@@ -855,11 +855,15 @@ async def capture_dashboard_images(
855
855
  preset's native orientation. ``full_page`` is a compatibility alias for
856
856
  requesting the engine's native ``WIDTHxauto`` viewport.
857
857
 
858
- The batch is bracketed by a :class:`ThemeGuard` that restores the engine
859
- user's saved frontend theme if rendering changed it (issue #1909).
860
- ``client`` supplies the guard's non-add-on credential fallback and
861
- ``capture_warnings`` collects the guard's non-fatal warnings; both are
862
- optional and never affect the captures themselves.
858
+ The batch used to be bracketed by a :class:`ThemeGuard` that restored the
859
+ engine user's saved frontend theme when a cold render changed it (issue
860
+ #1909). That bracket is currently disabled (#1991): upstream Puppet no
861
+ longer dispatches ``settheme`` on cold renders, so there is nothing to undo.
862
+ The guard construction and the ``client`` / ``capture_warnings`` plumbing
863
+ are retained so the bracket can be re-enabled by uncommenting the
864
+ snapshot/restore calls if a future engine regression reintroduces the write;
865
+ while disabled ``capture_warnings`` simply stays empty and never affects the
866
+ captures themselves.
863
867
  """
864
868
  path = _validate_dashboard_path(dashboard_path)
865
869
  options = validate_capture_parameters(
@@ -884,13 +888,16 @@ async def capture_dashboard_images(
884
888
  mime_type = _MIME_TYPES[options.image_format]
885
889
  captures: list[DashboardImageCapture] = []
886
890
 
887
- # The engine dispatches a theme write into the authenticated frontend on
888
- # cold renders, which Home Assistant persists to the engine user's real
889
- # profile (issue #1909). Snapshot before, restore after including when
890
- # the batch fails, since the engine may already have rendered (and
891
- # written) before the failure.
891
+ # ThemeGuard bracket currently DISABLED (#1991). Stock Puppet used to
892
+ # dispatch a theme write into the authenticated frontend on cold renders,
893
+ # which Home Assistant persisted to the engine user's real profile (#1909);
894
+ # ha-mcp snapshotted before and restored after to undo it. Upstream Puppet
895
+ # has since fixed the cold-render settheme dispatch, so the bracket is no
896
+ # longer needed. The guard is still constructed (and the snapshot/restore
897
+ # calls kept below, commented out) so it can be re-enabled by uncommenting
898
+ # if a future engine regression reintroduces the write.
892
899
  guard = ThemeGuard.for_capture(engine_target.addon_credential, client)
893
- await guard.take_snapshot()
900
+ # await guard.take_snapshot()
894
901
  batch_error: ToolError | None = None
895
902
  try:
896
903
  async with httpx.AsyncClient(
@@ -970,7 +977,7 @@ async def capture_dashboard_images(
970
977
  # and its outcome can be attached to the error payload below.
971
978
  batch_error = exc
972
979
  finally:
973
- await guard.restore()
980
+ # await guard.restore() # ThemeGuard bracket disabled (#1991) — see above.
974
981
  if capture_warnings is not None:
975
982
  capture_warnings.extend(guard.warnings)
976
983
 
@@ -1,5 +1,11 @@
1
1
  """Snapshot and restore the engine user's saved frontend theme (issue #1909).
2
2
 
3
+ NOTE: This guard is currently disabled at its call site (``capture.py``)
4
+ because upstream Puppet fixed the cold-render ``settheme`` dispatch that made
5
+ the bracket necessary (#1991). The code here is retained unchanged so the
6
+ bracket can be re-enabled by uncommenting the snapshot/restore calls in
7
+ ``capture.py`` if a future engine regression reintroduces the write.
8
+
3
9
  Stock Puppet dispatches Home Assistant's ``settheme`` event on every
4
10
  cold-browser render — its ``dark`` query flag is presence-based, so "not
5
11
  requested" reaches the frontend as an explicit "light". Home Assistant
@@ -143,14 +143,6 @@ def _updates_write(args: dict[str, Any]) -> str | None:
143
143
  return f"action={action!r}"
144
144
 
145
145
 
146
- def _dashboard_get_write(args: dict[str, Any]) -> str | None:
147
- """Allow config/list/search reads; fail closed on a screenshot render."""
148
- include_screenshot = args.get("include_screenshot")
149
- if include_screenshot is None or include_screenshot is False:
150
- return None
151
- return "dashboard screenshot render (Puppet persists theme/dark preferences)"
152
-
153
-
154
146
  def _radio_write(args: dict[str, Any]) -> str | None:
155
147
  action = args.get("action")
156
148
  # Reads (allowed): per-node diagnostics, the integration/network summary,
@@ -191,10 +183,6 @@ def _radio_write(args: dict[str, Any]) -> str | None:
191
183
  # against the real registered catalog at PR time, so the two sets
192
184
  # cannot drift apart silently.
193
185
  READ_ONLY_EXEMPT_TOOLS: dict[str, ReadOnlyExemption] = {
194
- "ha_config_get_dashboard": ReadOnlyExemption(
195
- _dashboard_get_write,
196
- "dashboard config, list, and search reads with include_screenshot=false",
197
- ),
198
186
  "ha_manage_backup": ReadOnlyExemption(
199
187
  _backup_write,
200
188
  "listing, viewing, and diffing per-edit backups (scope='edits', "
@@ -1749,7 +1749,7 @@ class DashboardConfigTools:
1749
1749
  tags={"Dashboards"},
1750
1750
  annotations={
1751
1751
  "openWorldHint": False,
1752
- "destructiveHint": False,
1752
+ "readOnlyHint": True,
1753
1753
  "idempotentHint": True,
1754
1754
  "title": "Get Dashboard",
1755
1755
  },
@@ -109,7 +109,7 @@ class DashboardScreenshotTools:
109
109
  tags={"Dashboard", "beta"},
110
110
  annotations={
111
111
  "openWorldHint": False,
112
- "destructiveHint": False,
112
+ "readOnlyHint": True,
113
113
  "title": "Get Dashboard Screenshot",
114
114
  },
115
115
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.14.2.dev2083
3
+ Version: 7.14.2.dev2086
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