ha-mcp-dev 8.4.3.dev2625__tar.gz → 8.4.3.dev2629__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 (315) hide show
  1. {ha_mcp_dev-8.4.3.dev2625/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2629}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/pyproject.toml +17 -1
  3. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/__main__.py +1 -1
  4. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/http_transport.py +44 -1
  5. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/__init__.py +0 -1
  6. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/en.json +1 -1
  7. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/settings.js +1 -1
  8. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  9. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/LICENSE +0 -0
  10. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/README.md +0 -0
  12. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/setup.cfg +0 -0
  13. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/__init__.py +0 -0
  14. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_pypi_marker +0 -0
  15. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_rich_compat.py +0 -0
  16. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/__init__.py +0 -0
  17. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/requirements.txt +0 -0
  18. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  19. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  20. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  21. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  22. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  23. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  24. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  32. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  37. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  42. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  43. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  44. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  45. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  46. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  47. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  48. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  49. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  52. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  53. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  54. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  55. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  56. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  57. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  58. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  59. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  60. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  63. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  64. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  65. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  66. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  67. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  72. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/_version.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/auth/__init__.py +0 -0
  76. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/auth/consent_form.py +0 -0
  77. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/auth/oidc_compat.py +0 -0
  78. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/auth/provider.py +0 -0
  79. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/backup_manager.py +0 -0
  80. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/browser_landing.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/client/__init__.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/client/rest_client.py +0 -0
  83. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/client/supervisor_client.py +0 -0
  84. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/client/websocket_client.py +0 -0
  85. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/client/websocket_listener.py +0 -0
  86. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/config.py +0 -0
  87. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  89. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  90. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  91. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  92. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  93. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/errors.py +0 -0
  94. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/ha_request_queue.py +0 -0
  95. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  96. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/llm_exposure.py +0 -0
  97. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/log_filters.py +0 -0
  98. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/__init__.py +0 -0
  99. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/approval_queue.py +0 -0
  100. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/editing.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/evaluator.py +0 -0
  102. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/handlers.py +0 -0
  103. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/middleware.py +0 -0
  104. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/model.py +0 -0
  105. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/persistence.py +0 -0
  106. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/policy/value_sources.py +0 -0
  107. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/py.typed +0 -0
  108. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/read_only.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/redaction.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/renamed_tools.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  112. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  113. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  114. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  115. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  116. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  117. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  118. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  119. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  120. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  121. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  122. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  123. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  124. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  125. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  126. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  127. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  128. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  129. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  130. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  131. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  132. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  133. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  134. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  135. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  136. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  137. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  138. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  139. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  140. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  141. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  142. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  143. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  144. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  145. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  146. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  147. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  148. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  149. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  150. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  151. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  152. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/server.py +0 -0
  153. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  154. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_theme.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  166. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  167. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  168. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  169. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  170. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  171. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  172. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  173. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  174. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  175. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  176. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  177. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  178. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  179. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  180. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/settings.css +0 -0
  181. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/settings_ui/settings.html +0 -0
  182. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/smoke_test.py +0 -0
  183. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/strict_bps.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tool_dispatch.py +0 -0
  186. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/__init__.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/auto_backup.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/backup.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  190. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/best_practice_result.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/blueprint_write.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/bulk_selector.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_api.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_config_entries.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_config_reads.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_devices.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_registries.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  204. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  205. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  206. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/device_control.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/hacs_registration.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/helpers.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/log_common.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/log_sources.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/__init__.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/base.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/matter.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/thread.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/radio/zwave.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/reference_validator.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/registry.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_addons.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_areas.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_calendar.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_camera.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_categories.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_code.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_dev.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_energy.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_entities.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_groups.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_hacs.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_history.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_integrations.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_labels.py +0 -0
  264. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_logs.py +0 -0
  265. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_radio.py +0 -0
  266. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_registry.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_resources.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_search.py +0 -0
  269. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  270. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_service.py +0 -0
  271. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_services.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_system.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_themes.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_todo.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_traces.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_updates.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_utility.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/tools_zones.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/util_helpers.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/tools/validation_middleware.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/transforms/__init__.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/transforms/categorized_search.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/transport_security.py +0 -0
  288. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/update_check.py +0 -0
  289. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/__init__.py +0 -0
  290. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/config_hash.py +0 -0
  291. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/config_write_lock.py +0 -0
  292. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/data_paths.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/domain_handlers.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/entity_membership.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/operation_manager.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/python_sandbox.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/skill_loader.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/utils/usage_logger.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/visibility/__init__.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/visibility/enforcement.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/visibility/model.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/visibility/persistence.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp/visibility/resolver.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  309. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  310. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  311. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  312. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  313. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/tests/__init__.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/tests/test_constants.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2625 → ha_mcp_dev-8.4.3.dev2629}/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: 8.4.3.dev2625
3
+ Version: 8.4.3.dev2629
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 = "8.4.3.dev2625"
7
+ version = "8.4.3.dev2629"
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
@@ -94,6 +94,14 @@ mypy_path = "src"
94
94
  # /tmp keeps the cache on Linux tmpfs — avoids the slow Windows FS in WSL2.
95
95
  # Windows-native contributors can remove this line or override with MYPY_CACHE_DIR.
96
96
  cache_dir = "/tmp/.mypy_cache"
97
+ # Vendored skills submodule: upstream's code, not ours to type-check. This is
98
+ # the exclusion that was actually failing a local run, because `mypy src/`
99
+ # recurses into the submodule when it is initialized while CI's lint job checks
100
+ # out without `submodules: true` and never sees it.
101
+ # A regex, NOT a [[tool.mypy.overrides]] module entry like the ha_mcp._vendor.*
102
+ # one below: `skills-vendor` contains a hyphen, so it has no importable module
103
+ # path for a module pattern to match. Do not "simplify" it into that block.
104
+ exclude = ['^src/ha_mcp/resources/skills-vendor/']
97
105
  warn_return_any = true
98
106
  warn_unused_configs = true
99
107
  disallow_untyped_defs = true
@@ -150,6 +158,14 @@ extend-exclude = [
150
158
  # Vendored websockets — upstream's code style, not ours. Kept in sync
151
159
  # with PATHS_IGNORE in scripts/codeql_quality_gate.py.
152
160
  "src/ha_mcp/_vendor/websockets",
161
+ # Vendored skills submodule (src/ha_mcp/resources/skills-vendor) — upstream's
162
+ # code, shipped as package data. This covers the directory-scoped commands,
163
+ # `ruff check src/ ...` in CI and the ones in CONTRIBUTING.md. It does NOT
164
+ # affect lefthook, which passes {staged_files} as explicit paths that ruff
165
+ # lints regardless of extend-exclude (force-exclude is not set), and a
166
+ # submodule's contents are never staged in the superproject anyway. Kept in
167
+ # sync with PATHS_IGNORE in scripts/codeql_quality_gate.py.
168
+ "src/ha_mcp/resources/skills-vendor",
153
169
  # HA integration manifests must be strict JSON (no trailing commas);
154
170
  # ruff 0.15+ formats .json files as JSONC and inserts trailing commas
155
171
  # which makes Python's json.load() reject the file at HA startup.
@@ -616,7 +616,7 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
616
616
  shutdown_task = asyncio.create_task(_shutdown_event.wait())
617
617
 
618
618
  try:
619
- done, pending = await asyncio.wait(
619
+ done, _ = await asyncio.wait(
620
620
  [server_task, shutdown_task],
621
621
  return_when=asyncio.FIRST_COMPLETED,
622
622
  )
@@ -3,7 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import logging
6
- from dataclasses import dataclass
6
+ from collections.abc import Iterator
7
+ from contextlib import contextmanager
8
+ from dataclasses import dataclass, field
9
+ from threading import Lock
7
10
  from time import monotonic
8
11
  from typing import Any
9
12
  from uuid import uuid4
@@ -19,6 +22,42 @@ from .config import get_global_settings
19
22
  logger = logging.getLogger(__name__)
20
23
 
21
24
 
25
+ @dataclass
26
+ class _DiagnosticLogLevel:
27
+ """Shared ownership while HTTP app lifespans overlap during a restart."""
28
+
29
+ users: int = 0
30
+ previous_level: int = logging.NOTSET
31
+ changed: bool = False
32
+ lock: Lock = field(default_factory=Lock)
33
+
34
+
35
+ @contextmanager
36
+ def _diagnostic_logging() -> Iterator[None]:
37
+ """Temporarily enable diagnostic records without changing other loggers."""
38
+ # Logger objects survive embedded-server module purges. Keep ownership on
39
+ # this logger so a retiring worker cannot reset its replacement's level.
40
+ state: _DiagnosticLogLevel = vars(logger).setdefault(
41
+ "_ha_mcp_http_diagnostics_level", _DiagnosticLogLevel()
42
+ )
43
+ with state.lock:
44
+ if state.users == 0:
45
+ state.previous_level = logger.level
46
+ state.changed = logger.getEffectiveLevel() > logging.INFO
47
+ if state.changed:
48
+ # Use the normal setter: HA's explicit per-logger overrides
49
+ # remain authoritative, and existing DEBUG levels stay intact.
50
+ logger.setLevel(logging.INFO)
51
+ state.users += 1
52
+ try:
53
+ yield
54
+ finally:
55
+ with state.lock:
56
+ state.users -= 1
57
+ if state.users == 0 and state.changed and logger.level == logging.INFO:
58
+ logger.setLevel(state.previous_level)
59
+
60
+
22
61
  class HttpTransportFastMCP(FastMCP):
23
62
  """Apply instance HTTP experiments at the shared app-construction boundary.
24
63
 
@@ -117,6 +156,10 @@ class TransportDiagnostics:
117
156
  self.path = path.rstrip("/")
118
157
 
119
158
  async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
159
+ if scope["type"] == "lifespan":
160
+ with _diagnostic_logging():
161
+ await self.app(scope, receive, send)
162
+ return
120
163
  if scope["type"] != "http" or scope["path"].rstrip("/") != self.path:
121
164
  await self.app(scope, receive, send)
122
165
  return
@@ -55,7 +55,6 @@ from ._persistence import (
55
55
  )
56
56
  from ._supervisor import (
57
57
  _BACKGROUND_RESTART_TASKS,
58
- _SUPERVISOR_SELF_RESTART_FLUSH_DELAY_S,
59
58
  _schedule_supervisor_self_restart,
60
59
  _supervisor_fetch_current_options,
61
60
  _supervisor_merge_and_post_options,
@@ -449,7 +449,7 @@
449
449
  "advanced.environment.label": "Environment",
450
450
  "advanced.environment.help": "development or production. Affects logging verbosity. Restart required.",
451
451
  "advanced.http_transport_diagnostics.label": "HTTP transport diagnostics",
452
- "advanced.http_transport_diagnostics.help": "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required.",
452
+ "advanced.http_transport_diagnostics.help": "Experimental. Automatically enable INFO logging for HTTP diagnostics while the server runs, without payloads or credentials. Other loggers are unchanged; explicit Home Assistant logger overrides and filters still apply. Does not confirm client receipt. HTTP only; restart required.",
453
453
  "advanced.http_json_response.label": "JSON responses instead of streaming",
454
454
  "advanced.http_json_response.help": "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required.",
455
455
  "advanced.log_level.label": "Log level",
@@ -3981,7 +3981,7 @@ const ADVANCED_FIELD_META = {
3981
3981
  environment: { label: "Environment", help: "'development' or 'production'. Affects logging verbosity. Restart required." },
3982
3982
  log_level: { label: "Log level", help: "DEBUG/INFO/WARNING/ERROR/CRITICAL. Set once at startup; restart required." },
3983
3983
  debug: { label: "Debug mode", help: "Verbose request logging. Logs sensitive data; do not enable in production. Restart required." },
3984
- http_transport_diagnostics: { label: "HTTP transport diagnostics", help: "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required." },
3984
+ http_transport_diagnostics: { label: "HTTP transport diagnostics", help: "Experimental. Automatically enable INFO logging for HTTP diagnostics while the server runs, without payloads or credentials. Other loggers are unchanged; explicit Home Assistant logger overrides and filters still apply. Does not confirm client receipt. HTTP only; restart required." },
3985
3985
  http_json_response: { label: "JSON responses instead of streaming", help: "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required." },
3986
3986
  code_mode_max_duration: { label: "Code-mode max duration (s)", help: "Wall-clock budget per sandbox run. Range 1–300. Restart required." },
3987
3987
  code_mode_max_memory: { label: "Code-mode max memory (bytes)", help: "RSS cap per sandbox run. Range 1 MB–256 MB. Restart required." },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2625
3
+ Version: 8.4.3.dev2629
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