ha-mcp-dev 8.2.0.dev2362__tar.gz → 8.2.0.dev2364__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 (278) hide show
  1. {ha_mcp_dev-8.2.0.dev2362/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.2.0.dev2364}/PKG-INFO +2 -2
  2. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/README.md +1 -1
  3. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/pyproject.toml +1 -1
  4. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +1 -1
  5. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +1 -1
  6. ha_mcp_dev-8.2.0.dev2364/src/ha_mcp/resources/skills-vendor/AGENTS.md +57 -0
  7. ha_mcp_dev-8.2.0.dev2364/src/ha_mcp/resources/skills-vendor/CLAUDE.md +57 -0
  8. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +1 -1
  9. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -30
  10. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364/src/ha_mcp_dev.egg-info}/PKG-INFO +2 -2
  11. ha_mcp_dev-8.2.0.dev2362/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -40
  12. ha_mcp_dev-8.2.0.dev2362/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -40
  13. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/LICENSE +0 -0
  14. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/MANIFEST.in +0 -0
  15. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/setup.cfg +0 -0
  16. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/__init__.py +0 -0
  17. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/__main__.py +0 -0
  18. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_pypi_marker +0 -0
  19. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_rich_compat.py +0 -0
  20. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/__init__.py +0 -0
  21. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/requirements.txt +0 -0
  22. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  23. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  24. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  25. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  26. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  27. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  28. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  29. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  30. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  31. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  32. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  33. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  34. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  35. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  36. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  37. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  38. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  39. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  40. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  41. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  42. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  43. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  44. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  45. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  46. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  47. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  48. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  49. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  50. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  51. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  52. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  53. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  54. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  55. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  56. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  57. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  58. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  59. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  60. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  61. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  62. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  63. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  64. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  65. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  66. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  67. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  68. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  69. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  70. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  71. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  72. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  73. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  74. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  75. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  76. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  77. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  78. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_version.py +0 -0
  79. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/__init__.py +0 -0
  80. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/consent_form.py +0 -0
  81. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/oidc_compat.py +0 -0
  82. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/provider.py +0 -0
  83. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/backup_manager.py +0 -0
  84. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/browser_landing.py +0 -0
  85. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/__init__.py +0 -0
  86. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/rest_client.py +0 -0
  87. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/supervisor_client.py +0 -0
  88. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/websocket_client.py +0 -0
  89. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/websocket_listener.py +0 -0
  90. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/config.py +0 -0
  91. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  92. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  93. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  94. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  95. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  96. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  97. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/errors.py +0 -0
  98. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  99. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/llm_exposure.py +0 -0
  100. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/__init__.py +0 -0
  101. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/approval_queue.py +0 -0
  102. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/editing.py +0 -0
  103. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/evaluator.py +0 -0
  104. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/handlers.py +0 -0
  105. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/middleware.py +0 -0
  106. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/model.py +0 -0
  107. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/persistence.py +0 -0
  108. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/value_sources.py +0 -0
  109. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/py.typed +0 -0
  110. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/read_only.py +0 -0
  111. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/redaction.py +0 -0
  112. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/renamed_tools.py +0 -0
  113. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  114. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  115. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  116. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  117. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  118. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  119. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  120. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  121. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  122. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  123. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  124. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  125. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  126. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  127. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  128. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  129. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  130. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  131. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  132. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/server.py +0 -0
  133. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/__init__.py +0 -0
  134. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  135. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  136. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  137. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  138. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  139. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  140. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  141. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  142. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  143. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_theme.py +0 -0
  144. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  145. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  146. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  147. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  148. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  149. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  150. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  151. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  152. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  153. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  154. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  155. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  156. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  157. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  158. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.css +0 -0
  159. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.html +0 -0
  160. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.js +0 -0
  161. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/smoke_test.py +0 -0
  162. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  163. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/strict_bps.py +0 -0
  164. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/__init__.py +0 -0
  165. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/auto_backup.py +0 -0
  166. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/backup.py +0 -0
  167. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  168. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_result.py +0 -0
  169. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  170. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_api.py +0 -0
  171. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_config_entries.py +0 -0
  172. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_config_reads.py +0 -0
  173. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_devices.py +0 -0
  174. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_registries.py +0 -0
  175. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  176. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  177. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  178. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  179. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  180. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  181. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  182. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  183. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/device_control.py +0 -0
  184. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  185. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/hacs_registration.py +0 -0
  186. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/helpers.py +0 -0
  187. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  188. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/__init__.py +0 -0
  189. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/base.py +0 -0
  190. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/matter.py +0 -0
  191. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/thread.py +0 -0
  192. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  193. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/zwave.py +0 -0
  194. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/reference_validator.py +0 -0
  195. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/registry.py +0 -0
  196. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  197. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  198. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  199. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  200. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  201. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  202. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  203. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  204. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  205. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  206. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  207. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_addons.py +0 -0
  208. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_areas.py +0 -0
  209. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  210. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  211. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  212. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_calendar.py +0 -0
  213. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_camera.py +0 -0
  214. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_categories.py +0 -0
  215. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_code.py +0 -0
  216. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  217. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  218. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  219. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  220. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  221. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  222. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_dev.py +0 -0
  223. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_energy.py +0 -0
  224. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_entities.py +0 -0
  225. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  226. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_groups.py +0 -0
  227. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_hacs.py +0 -0
  228. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_history.py +0 -0
  229. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_integrations.py +0 -0
  230. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_labels.py +0 -0
  231. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_radio.py +0 -0
  232. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_registry.py +0 -0
  233. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_resources.py +0 -0
  234. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_search.py +0 -0
  235. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  236. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_service.py +0 -0
  237. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_services.py +0 -0
  238. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_system.py +0 -0
  239. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_themes.py +0 -0
  240. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_todo.py +0 -0
  241. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_traces.py +0 -0
  242. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_updates.py +0 -0
  243. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_utility.py +0 -0
  244. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  245. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  246. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  247. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_zones.py +0 -0
  248. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/util_helpers.py +0 -0
  249. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/validation_middleware.py +0 -0
  250. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/__init__.py +0 -0
  251. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/categorized_search.py +0 -0
  252. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  253. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transport_security.py +0 -0
  254. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/update_check.py +0 -0
  255. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/__init__.py +0 -0
  256. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/config_hash.py +0 -0
  257. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/config_write_lock.py +0 -0
  258. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/data_paths.py +0 -0
  259. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/domain_handlers.py +0 -0
  260. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  261. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  262. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/operation_manager.py +0 -0
  263. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/python_sandbox.py +0 -0
  264. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/skill_loader.py +0 -0
  265. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/usage_logger.py +0 -0
  266. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/__init__.py +0 -0
  267. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/enforcement.py +0 -0
  268. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/model.py +0 -0
  269. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/persistence.py +0 -0
  270. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/resolver.py +0 -0
  271. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  272. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  273. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  274. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  275. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  276. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/tests/__init__.py +0 -0
  277. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/tests/test_constants.py +0 -0
  278. {ha_mcp_dev-8.2.0.dev2362 → ha_mcp_dev-8.2.0.dev2364}/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.2.0.dev2362
3
+ Version: 8.2.0.dev2364
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
@@ -396,7 +396,7 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
396
396
 
397
397
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
398
398
 
399
- For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-add-on settings UI for fine-grained tool enable/disable/pin.
399
+ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
400
400
 
401
401
  ---
402
402
 
@@ -364,7 +364,7 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
364
364
 
365
365
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
366
366
 
367
- For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-add-on settings UI for fine-grained tool enable/disable/pin.
367
+ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
368
368
 
369
369
  ---
370
370
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.2.0.dev2362"
7
+ version = "8.2.0.dev2364"
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
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards",
9
- "version": "0.16.0"
9
+ "version": "0.15.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "home-assistant-skills",
3
3
  "description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards.",
4
- "version": "0.16.0",
4
+ "version": "0.15.0",
5
5
  "repository": "https://github.com/homeassistant-ai/skills",
6
6
  "license": "MIT"
7
7
  }
@@ -0,0 +1,57 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ This is a community-contributed collection of **Agent Skills** for Home Assistant, following the open [Agent Skills standard](https://agentskills.io/specification). Skills teach AI agents domain expertise for configuring and controlling Home Assistant. The repository doubles as a Claude Code plugin (see `.claude-plugin/plugin.json`).
8
+
9
+ ## Repository Structure
10
+
11
+ - `skills/<skill-name>/SKILL.md` — each skill lives in its own folder with a `SKILL.md` file
12
+ - `CONTRIBUTING.md` — skill authoring guidelines and submission workflow
13
+ - `.claude-plugin/plugin.json` — Claude Code plugin metadata
14
+ - `.claude-plugin/marketplace.json` — marketplace metadata for plugin discovery
15
+ - `AGENTS.md` — symlink to `CLAUDE.md` (for agents that use `AGENTS.md` convention)
16
+ - `.github/ISSUE_TEMPLATE/skill-rca.md` — "Report Bad Skill Advice" issue template
17
+
18
+ ## Skill Format
19
+
20
+ Every skill is a `SKILL.md` file with YAML frontmatter:
21
+
22
+ ```yaml
23
+ ---
24
+ name: skill-name-here
25
+ description: >
26
+ When to activate this skill and what symptoms it addresses.
27
+ ---
28
+ ```
29
+
30
+ Constraints from CONTRIBUTING.md:
31
+ - Max **500 lines** per SKILL.md
32
+ - `metadata.version` must be `0` on new skills (do not edit manually)
33
+ - `name` must match `[a-z0-9-]+` and be ≤64 characters
34
+ - `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
35
+ - Reference files must be **one level deep** only (e.g. `references/example.yaml`)
36
+ - Use **forward slashes** in all file paths
37
+ - Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
38
+
39
+ ## Skill Authoring Principles
40
+
41
+ - **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
42
+ - **Conciseness** — provide patterns and quick-reference tables, not tutorials
43
+ - **Consistent terminology** — one term per concept throughout a skill
44
+ - **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
45
+ - **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
46
+
47
+ ## Validation
48
+
49
+ CI runs two workflows on PRs and pushes to `main`:
50
+ - **validate-skills** — runs `skills-ref validate` on every skill when `skills/**` changes
51
+ - **validate-plugin** — validates `.claude-plugin/` metadata
52
+
53
+ To validate locally:
54
+
55
+ ```bash
56
+ uvx skills-ref validate skills/<skill-name>
57
+ ```
@@ -0,0 +1,57 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ This is a community-contributed collection of **Agent Skills** for Home Assistant, following the open [Agent Skills standard](https://agentskills.io/specification). Skills teach AI agents domain expertise for configuring and controlling Home Assistant. The repository doubles as a Claude Code plugin (see `.claude-plugin/plugin.json`).
8
+
9
+ ## Repository Structure
10
+
11
+ - `skills/<skill-name>/SKILL.md` — each skill lives in its own folder with a `SKILL.md` file
12
+ - `CONTRIBUTING.md` — skill authoring guidelines and submission workflow
13
+ - `.claude-plugin/plugin.json` — Claude Code plugin metadata
14
+ - `.claude-plugin/marketplace.json` — marketplace metadata for plugin discovery
15
+ - `AGENTS.md` — symlink to `CLAUDE.md` (for agents that use `AGENTS.md` convention)
16
+ - `.github/ISSUE_TEMPLATE/skill-rca.md` — "Report Bad Skill Advice" issue template
17
+
18
+ ## Skill Format
19
+
20
+ Every skill is a `SKILL.md` file with YAML frontmatter:
21
+
22
+ ```yaml
23
+ ---
24
+ name: skill-name-here
25
+ description: >
26
+ When to activate this skill and what symptoms it addresses.
27
+ ---
28
+ ```
29
+
30
+ Constraints from CONTRIBUTING.md:
31
+ - Max **500 lines** per SKILL.md
32
+ - `metadata.version` must be `0` on new skills (do not edit manually)
33
+ - `name` must match `[a-z0-9-]+` and be ≤64 characters
34
+ - `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
35
+ - Reference files must be **one level deep** only (e.g. `references/example.yaml`)
36
+ - Use **forward slashes** in all file paths
37
+ - Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
38
+
39
+ ## Skill Authoring Principles
40
+
41
+ - **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
42
+ - **Conciseness** — provide patterns and quick-reference tables, not tutorials
43
+ - **Consistent terminology** — one term per concept throughout a skill
44
+ - **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
45
+ - **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
46
+
47
+ ## Validation
48
+
49
+ CI runs two workflows on PRs and pushes to `main`:
50
+ - **validate-skills** — runs `skills-ref validate` on every skill when `skills/**` changes
51
+ - **validate-plugin** — validates `.claude-plugin/` metadata
52
+
53
+ To validate locally:
54
+
55
+ ```bash
56
+ uvx skills-ref validate skills/<skill-name>
57
+ ```
@@ -24,7 +24,7 @@ description: >
24
24
  - Agent tells user to edit configuration.yaml for UI integrations
25
25
  - Agent hardcodes entities in a Blueprint or uses free-text input over a selector
26
26
  metadata:
27
- version: 16
27
+ version: 15
28
28
  ---
29
29
 
30
30
  # Home Assistant Best Practices
@@ -927,36 +927,6 @@ variables:
927
927
 
928
928
  `trigger_variables:` is a separate top-level key evaluated **before** triggers fire — it supports **limited templates only** (no `states()`/`state_attr()`), mainly for passing a blueprint `!input` into trigger options. Don't put state-based templates there.
929
929
 
930
- ### Keys render in order, one at a time
931
-
932
- A `variables:` block renders one key at a time, each rendered result feeding the context for the next. A key that reads a name declared **further down the same block** reads it while it is still undefined.
933
-
934
- ```yaml
935
- # AVOID — `total` is still undefined when `msg` renders
936
- variables:
937
- msg: "Total: {{ total }}"
938
- total: "{{ states('sensor.a') | float(0) + states('sensor.b') | float(0) }}"
939
-
940
- # CORRECT — declare before use
941
- variables:
942
- total: "{{ states('sensor.a') | float(0) + states('sensor.b') | float(0) }}"
943
- msg: "Total: {{ total }}"
944
- ```
945
-
946
- What the forward read costs depends on how the template uses the name (behavior as of 2026.7):
947
-
948
- | Use of the undefined name | Result |
949
- |---|---|
950
- | `x.attr`, `x['k']`, arithmetic, `<`/`>`/`<=`/`>=`, `\| int`, `\| float` | Raises `UndefinedError`, logs ERROR — **aborts the run** |
951
- | `{{ x }}`, `{% if x %}`, `{% for i in x %}`, `'p' ~ x` | Empty and falsy, logs WARNING — runs on into the else branch |
952
- | `x \| length`, `x == y`, `x != y` | `0` / `False` / `True` — **no log and no trace entry** |
953
-
954
- For the aborting row, [`continue_on_error:`](#continue-on-error) is no escape — it is an action option, a top-level block is not an action, and on a mid-sequence step it cannot suppress a render error. A default like `| int(0)` does not save it either: the default covers an unconvertible value, not an undefined name. In the silent row, watch `!=`: `{% if later != 'x' %}` on a name that is not defined yet takes the **then** branch, leaving nothing behind to explain why.
955
-
956
- Not a problem when the name also exists in an enclosing scope — the reference then resolves outward to that value. The two placements diverge on that collision, though: a top-level `variables:` block **skips** a key already present in the incoming scope, so the incoming value stands and the block's own definition never takes effect for that run, while a mid-sequence `- variables:` step renders and **overwrites** it. Staging a computation across consecutive `variables:` steps is therefore mid-sequence only.
957
-
958
- When an automation declares both `trigger_variables:` and `variables:`, the two render as one sequential mapping with `trigger_variables:` first, so a `variables:` key may read a `trigger_variables:` key but not the reverse. That holds for names declared in only one of the two: a name in both merges into a single entry that keeps the `trigger_variables:` position but takes the `variables:` template, so it renders early — before any `trigger_variables:` key declared after it. The separate attach-time render noted above happens before any `variables:` key exists.
959
-
960
930
  ---
961
931
 
962
932
  ## Capturing Action Responses
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.2.0.dev2362
3
+ Version: 8.2.0.dev2364
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
@@ -396,7 +396,7 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
396
396
 
397
397
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
398
398
 
399
- For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-add-on settings UI for fine-grained tool enable/disable/pin.
399
+ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
400
400
 
401
401
  ---
402
402
 
@@ -1,40 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Skill Format
6
-
7
- Every skill is a `SKILL.md` file with YAML frontmatter:
8
-
9
- ```yaml
10
- ---
11
- name: skill-name-here
12
- description: >
13
- When to activate this skill and what symptoms it addresses.
14
- ---
15
- ```
16
-
17
- Full authoring constraints: `CONTRIBUTING.md`. The one CI cannot catch:
18
- - `metadata.version` must be `0` on new skills — do not edit manually; CI assigns the real version on merge
19
-
20
- ## Skill Authoring Principles
21
-
22
- - **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
23
- - **Conciseness** — provide patterns and quick-reference tables, not tutorials
24
- - **Consistent terminology** — one term per concept throughout a skill
25
- - **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
26
- - **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
27
-
28
- ## Validation
29
-
30
- To validate locally:
31
-
32
- ```bash
33
- uvx skills-ref validate skills/<skill-name>
34
- ```
35
-
36
- ## Reviewing Skill PRs
37
-
38
- - Judge prose as agent-consumed context, not human docs — the Skill Authoring Principles above are the review bar (e.g. an operator→result lookup table beats narrative bullets, because agents land here holding one case to resolve)
39
- - Skills make version-pinned claims about HA behavior — verify against source at the release tag: `gh api repos/home-assistant/core/contents/<path>?ref=2026.7.4 --jq .content | base64 -d`
40
- - Community PRs come from forks: base-repo `?ref=<pr-branch>` 404s; get the fork with `gh pr view <pr> --json headRepository` and fetch files from there
@@ -1,40 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Skill Format
6
-
7
- Every skill is a `SKILL.md` file with YAML frontmatter:
8
-
9
- ```yaml
10
- ---
11
- name: skill-name-here
12
- description: >
13
- When to activate this skill and what symptoms it addresses.
14
- ---
15
- ```
16
-
17
- Full authoring constraints: `CONTRIBUTING.md`. The one CI cannot catch:
18
- - `metadata.version` must be `0` on new skills — do not edit manually; CI assigns the real version on merge
19
-
20
- ## Skill Authoring Principles
21
-
22
- - **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
23
- - **Conciseness** — provide patterns and quick-reference tables, not tutorials
24
- - **Consistent terminology** — one term per concept throughout a skill
25
- - **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
26
- - **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
27
-
28
- ## Validation
29
-
30
- To validate locally:
31
-
32
- ```bash
33
- uvx skills-ref validate skills/<skill-name>
34
- ```
35
-
36
- ## Reviewing Skill PRs
37
-
38
- - Judge prose as agent-consumed context, not human docs — the Skill Authoring Principles above are the review bar (e.g. an operator→result lookup table beats narrative bullets, because agents land here holding one case to resolve)
39
- - Skills make version-pinned claims about HA behavior — verify against source at the release tag: `gh api repos/home-assistant/core/contents/<path>?ref=2026.7.4 --jq .content | base64 -d`
40
- - Community PRs come from forks: base-repo `?ref=<pr-branch>` 404s; get the fork with `gh pr view <pr> --json headRepository` and fetch files from there