ha-mcp-dev 8.6.0.dev2825__tar.gz → 8.6.0.dev2830__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 (724) hide show
  1. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/pyproject.toml +6 -58
  3. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/pyproject.toml.orig +12 -71
  4. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +34 -21
  5. ha_mcp_dev-8.6.0.dev2830/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +536 -0
  6. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +2 -2
  7. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +1 -1
  8. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +14 -1
  9. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +10 -5
  10. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +1 -1
  11. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +1 -1
  12. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +6 -4
  13. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +15 -12
  14. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +2 -2
  15. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md → ha_mcp_dev-8.6.0.dev2830/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +7 -536
  16. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/server.py +7 -7
  17. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/strict_bps.py +2 -2
  18. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_checker.py +21 -21
  19. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_result.py +1 -1
  20. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_variables.py +2 -2
  21. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_automations.py +4 -3
  22. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_scripts.py +7 -6
  23. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/util_helpers.py +2 -2
  24. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/skill_loader.py +2 -2
  25. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -99
  26. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -99
  27. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -63
  28. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/README.md +0 -117
  29. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -49
  30. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -41
  31. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -37
  32. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -50
  33. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -52
  34. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -83
  35. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -61
  36. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -57
  37. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -72
  38. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -52
  39. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -52
  40. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -54
  41. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -65
  42. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -49
  43. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -54
  44. ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -324
  45. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/LICENSE +0 -0
  46. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/README.md +0 -0
  47. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/__init__.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/__main__.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_pypi_marker +0 -0
  50. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_rich_compat.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/__init__.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  53. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  54. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  55. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  56. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  96. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  97. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  101. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  105. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  108. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  119. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  131. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  132. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  136. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  140. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  154. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  238. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  269. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  274. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  288. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  289. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  290. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  291. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  298. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  299. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  300. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  301. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  303. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  322. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  323. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  324. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  325. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  358. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  416. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  417. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  418. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  426. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  427. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  428. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  429. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  430. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  431. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  432. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  437. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  438. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  439. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  440. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  441. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  442. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  450. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  451. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  452. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  453. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  461. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/requirements.txt +0 -0
  463. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  464. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  465. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  466. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  499. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_version.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/__init__.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/consent_form.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/oidc_compat.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/provider.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/backup_manager.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/browser_landing.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/__init__.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/admin_routes.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/rest_client.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/supervisor_client.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/websocket_client.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/websocket_listener.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/config.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  535. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  538. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  539. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/errors.py +0 -0
  540. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/ha_request_queue.py +0 -0
  541. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  542. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/http_transport.py +0 -0
  543. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/llm_exposure.py +0 -0
  544. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/log_filters.py +0 -0
  545. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/__init__.py +0 -0
  546. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/approval_queue.py +0 -0
  547. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/decision_pin.py +0 -0
  548. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/decisions.py +0 -0
  549. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/editing.py +0 -0
  550. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/evaluator.py +0 -0
  551. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/events.py +0 -0
  552. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/handlers.py +0 -0
  553. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/middleware.py +0 -0
  554. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/model.py +0 -0
  555. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/persistence.py +0 -0
  556. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/value_sources.py +0 -0
  557. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/py.typed +0 -0
  558. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/read_only.py +0 -0
  559. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/redaction.py +0 -0
  560. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/renamed_tools.py +0 -0
  561. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  562. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  563. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  564. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  565. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  566. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/server_lifespan.py +0 -0
  567. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/__init__.py +0 -0
  568. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  569. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  570. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  571. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  572. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  573. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  574. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  575. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  576. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  577. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  578. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_theme.py +0 -0
  579. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  580. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  581. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  582. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  583. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  584. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  585. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  586. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  587. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  588. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  589. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  590. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  591. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  592. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  593. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  594. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  595. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  596. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  597. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.css +0 -0
  598. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.html +0 -0
  599. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.js +0 -0
  600. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/smoke_test.py +0 -0
  601. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tool_dispatch.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/__init__.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/auto_backup.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/backup.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_write.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/bulk_selector.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_api.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_config_entries.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_config_reads.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_devices.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_registries.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/device_control.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/entity_registration.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/hacs_registration.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/helpers.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_common.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/__init__.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/base.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/matter.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/thread.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/zwave.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/reference_validator.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/registry.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/scene_discovery.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_addons.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_areas.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_calendar.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_camera.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_categories.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_code.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_dev.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_energy.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_entities.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_groups.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_hacs.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_history.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_integrations.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_labels.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_logs.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_radio.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_registry.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_resources.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_search.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_service.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_services.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_system.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_themes.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_todo.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_traces.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_updates.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_utility.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_zones.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/validation_middleware.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/__init__.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/categorized_search.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/component_search.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transport_security.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/update_check.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/__init__.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/config_hash.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/config_write_lock.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/data_paths.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/domain_handlers.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/entity_membership.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/operation_manager.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/python_sandbox.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/usage_logger.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/__init__.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/enforcement.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/model.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/persistence.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.6.0.dev2825
3
+ Version: 8.6.0.dev2830
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2825"
7
+ version = "8.6.0.dev2830"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -88,6 +88,9 @@ ha-mcp-oidc = "ha_mcp.__main__:main_oidc"
88
88
  module-name = "ha_mcp"
89
89
  source-exclude = [
90
90
  "src/ha_mcp/resources/skills-vendor/.*",
91
+ "src/ha_mcp/resources/skills-vendor/*.md",
92
+ "src/ha_mcp/resources/skills-vendor/evals",
93
+ "src/ha_mcp/resources/skills-vendor/scripts",
91
94
  "src/ha_mcp/settings_ui/AGENTS.md",
92
95
  "src/ha_mcp/settings_ui/CLAUDE.md",
93
96
  ]
@@ -104,24 +107,11 @@ exclude = ["^src/ha_mcp/resources/skills-vendor/"]
104
107
  warn_return_any = true
105
108
  warn_unused_configs = true
106
109
  disallow_untyped_defs = true
107
- disallow_incomplete_defs = true
108
110
  check_untyped_defs = true
109
- no_implicit_optional = true
110
111
  warn_redundant_casts = true
111
112
  warn_unused_ignores = true
112
- show_error_codes = true
113
- namespace_packages = true
114
113
  explicit_package_bases = true
115
114
 
116
- [[tool.mypy.overrides]]
117
- module = [
118
- "jq",
119
- "psutil",
120
- "pydantic_monty",
121
- "pydantic_monty.*",
122
- ]
123
- ignore_missing_imports = true
124
-
125
115
  [[tool.mypy.overrides]]
126
116
  module = ["ha_mcp._vendor.*"]
127
117
  follow_imports = "skip"
@@ -130,22 +120,13 @@ ignore_errors = true
130
120
  [[tool.mypy.overrides]]
131
121
  module = [
132
122
  "homeassistant.*",
133
- "aiohasupervisor",
134
- "aiohasupervisor.*",
135
- "aiohttp",
136
123
  "awesomeversion",
137
- "yarl",
138
- "voluptuous",
139
- "voluptuous_openapi",
140
124
  "jsonschema",
141
- "requests",
142
- "requests.*",
125
+ "psutil",
143
126
  ]
144
127
  ignore_missing_imports = true
145
128
 
146
129
  [tool.ruff]
147
- target-version = "py313"
148
- line-length = 88
149
130
  force-exclude = true
150
131
  extend-exclude = [
151
132
  "tests/initial_test_state",
@@ -207,20 +188,10 @@ ignore = [
207
188
 
208
189
  [tool.ruff.lint.per-file-ignores]
209
190
  "__init__.py" = ["F401"]
210
- "tests/**/*" = [
211
- "E501",
212
- "B011",
213
- ]
214
- "homeassistant-addon-webhook-proxy/start.py" = ["PLR5501"]
215
- "homeassistant-addon-webhook-proxy/mcp_proxy/__init__.py" = ["PLC0207"]
216
- "homeassistant-addon-webhook-proxy-dev/start.py" = ["PLR5501"]
217
- "homeassistant-addon-webhook-proxy-dev/mcp_proxy_dev/__init__.py" = ["PLC0207"]
191
+ "tests/**/*" = ["B011"]
218
192
 
219
193
  [tool.pytest.ini_options]
220
194
  testpaths = ["tests"]
221
- python_files = ["test_*.py"]
222
- python_classes = ["Test*"]
223
- python_functions = ["test_*"]
224
195
  empty_parameter_set_mark = "fail_at_collect"
225
196
  addopts = [
226
197
  "--strict-markers",
@@ -235,7 +206,6 @@ markers = [
235
206
  "slow: marks tests as slow (use -m 'not slow' to skip)",
236
207
  "addon_disruptive: restarts the server-under-test's own process (addon self-restart); must never run concurrently with other tests on lanes where the MCP server is out-of-process - the lane workflow runs these in a single-worker phase AFTER the parallel run",
237
208
  "unit: unit tests (isolated, fast)",
238
- "integration: integration tests requiring external services",
239
209
  "e2e: end-to-end tests with full system",
240
210
  "performance: performance and load tests",
241
211
  "automation: automation lifecycle tests",
@@ -301,18 +271,9 @@ build_command = """
301
271
  pip install uv && uv lock
302
272
  git add uv.lock
303
273
  """
304
- dist_path = "dist/"
305
- upload_to_PyPI = true
306
- upload_to_release = true
307
- remove_dist = false
308
274
  commit_parser = "angular"
309
275
 
310
276
  [tool.semantic_release.commit_parser_options]
311
- major_tags = [
312
- "BREAKING",
313
- "!",
314
- ]
315
- minor_tags = ["feat"]
316
277
  patch_tags = [
317
278
  "fix",
318
279
  "perf",
@@ -320,38 +281,26 @@ patch_tags = [
320
281
  ]
321
282
 
322
283
  [tool.semantic_release.changelog]
323
- template_dir = "templates"
324
284
  exclude_commit_patterns = [
325
285
  '^.*\(site\).*$',
326
286
  'chore\(addon\): [Ss]ync changelog.*',
327
287
  'chore\(addon\): [Pp]ublish dev addon version.*',
328
288
  ]
329
289
 
330
- [tool.semantic_release.changelog.default_templates]
331
- changelog_file = "CHANGELOG.md"
332
- major_on_zero = true
333
- allow_zero_version = false
334
- branch = "master"
335
-
336
290
  [tool.semantic_release.publish]
337
291
  upload_to_vcs_release = false
338
292
 
339
293
  [dependency-groups]
340
294
  dev = [
341
295
  "aiohttp>=3.13.5",
342
- "build>=1.2.2",
343
296
  "websockets>=15.0.1",
344
297
  "docker>=7.1.0",
345
298
  "mcp>=1.26.0,<2",
346
299
  "mypy>=1.17.0",
347
300
  "openai>=1.0.0",
348
- "jsonschema>=4.25.1",
349
301
  "pyinstaller>=6.0.0",
350
- "pynacl>=1.6.0",
351
- "psutil>=7.0.0",
352
302
  "pytest>=8.4.2",
353
303
  "pytest-asyncio>=1.1.0",
354
- "pytest-cov>=5.0.0",
355
304
  "pytest-timeout>=2.3.0",
356
305
  "pytest-rerunfailures>=15.0",
357
306
  "voluptuous>=0.15.2",
@@ -364,7 +313,6 @@ dev = [
364
313
  "ruff>=0.12.12",
365
314
  "testcontainers>=4.13.0",
366
315
  "ast-grep-cli>=0.42.0",
367
- "pyyaml>=6.0",
368
316
  "python-semantic-release==10.6.2",
369
317
  "hamcp-test-env",
370
318
  ]
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2825"
7
+ version = "8.6.0.dev2830"
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
@@ -86,7 +86,7 @@ dependencies = [
86
86
  # in-process embedding (HA 2026.6 pins cryptography==48.0.0, 2026.7 pins
87
87
  # 48.0.1 — the floor must admit every supported core's pin; live-found on
88
88
  # the embedded e2e lane against the HA 2026.6.4 image).
89
- # cryptography is a transitive dependency only — never imported in src/.
89
+ # Only the vendored fastmcp and mcp trees import cryptography; our own code does not.
90
90
  "cryptography>=48.0.0,<51",
91
91
  "pydantic-monty==0.0.18",
92
92
  "tzdata>=2024.1",
@@ -110,11 +110,15 @@ ha-mcp-oidc = "ha_mcp.__main__:main_oidc"
110
110
  # Explicit because publish-dev.yml renames the project to ha-mcp-dev, which
111
111
  # would otherwise make the module name ha_mcp_dev.
112
112
  module-name = "ha_mcp"
113
- # Every file under src/ha_mcp ships unless excluded here. The skills
114
- # submodule's git and CI files and the settings UI's agent guide are not
115
- # read at runtime.
113
+ # Every file under src/ha_mcp ships unless excluded here. Of the skills
114
+ # submodule only skills/ and LICENSE ship; its evals, scripts, docs, git and
115
+ # CI files are not read at runtime, and neither is the settings UI's agent
116
+ # guide.
116
117
  source-exclude = [
117
118
  "src/ha_mcp/resources/skills-vendor/.*",
119
+ "src/ha_mcp/resources/skills-vendor/*.md",
120
+ "src/ha_mcp/resources/skills-vendor/evals",
121
+ "src/ha_mcp/resources/skills-vendor/scripts",
118
122
  "src/ha_mcp/settings_ui/AGENTS.md",
119
123
  "src/ha_mcp/settings_ui/CLAUDE.md",
120
124
  ]
@@ -136,24 +140,11 @@ exclude = ['^src/ha_mcp/resources/skills-vendor/']
136
140
  warn_return_any = true
137
141
  warn_unused_configs = true
138
142
  disallow_untyped_defs = true
139
- disallow_incomplete_defs = true
140
143
  check_untyped_defs = true
141
- no_implicit_optional = true
142
144
  warn_redundant_casts = true
143
145
  warn_unused_ignores = true
144
- show_error_codes = true
145
- namespace_packages = true
146
146
  explicit_package_bases = true
147
147
 
148
- [[tool.mypy.overrides]]
149
- module = [
150
- "jq",
151
- "psutil",
152
- "pydantic_monty",
153
- "pydantic_monty.*",
154
- ]
155
- ignore_missing_imports = true
156
-
157
148
  [[tool.mypy.overrides]]
158
149
  # Vendored websockets: upstream's typing, not ours to check. follow_imports
159
150
  # skip keeps our client code checked against Any instead of dragging the
@@ -165,25 +156,14 @@ ignore_errors = true
165
156
  [[tool.mypy.overrides]]
166
157
  module = [
167
158
  "homeassistant.*",
168
- "aiohasupervisor",
169
- "aiohasupervisor.*",
170
- "aiohttp",
171
159
  "awesomeversion",
172
- "yarl",
173
- "voluptuous",
174
- # Ships with HA core at runtime (helpers.llm schema conversion, #1745);
175
- # not installed in this dev environment.
176
- "voluptuous_openapi",
177
160
  "jsonschema",
178
- "requests",
179
- "requests.*",
161
+ "psutil",
180
162
  ]
181
163
  ignore_missing_imports = true
182
164
 
183
165
 
184
166
  [tool.ruff]
185
- target-version = "py313"
186
- line-length = 88
187
167
  # Apply the excludes below to explicit paths too: lefthook passes
188
168
  # {staged_files} and Fast Checks passes the changed files, so without this the
189
169
  # vendored trees get reformatted or fail the format gate.
@@ -264,21 +244,7 @@ ignore = [
264
244
 
265
245
  [tool.ruff.lint.per-file-ignores]
266
246
  "__init__.py" = ["F401"]
267
- "tests/**/*" = ["E501", "B011"]
268
- # Temporary: the equivalent PLC0207/PLR5501 fixes landed in
269
- # homeassistant-addon-webhook-proxy-dev/ only, per the dev-first/promote-only
270
- # flow (allow-stable-edit is for exceptional stable-only repairs, not routine sweeps —
271
- # see homeassistant-addon-webhook-proxy/AGENTS.md "Dev-first, promote-only").
272
- # The -dev entries name where a reset-dev-from-stable run puts those same two
273
- # stable files (start.py stays put, mcp_proxy/ is renamed to mcp_proxy_dev/),
274
- # so the auto-opened reset PR lints clean. Scoped per file and per rule so
275
- # both rules stay live everywhere else in both trees — the -dev tree is where
276
- # all new webhook-proxy code is authored. Remove all four once the next
277
- # promote carries the fixes into stable.
278
- "homeassistant-addon-webhook-proxy/start.py" = ["PLR5501"]
279
- "homeassistant-addon-webhook-proxy/mcp_proxy/__init__.py" = ["PLC0207"]
280
- "homeassistant-addon-webhook-proxy-dev/start.py" = ["PLR5501"]
281
- "homeassistant-addon-webhook-proxy-dev/mcp_proxy_dev/__init__.py" = ["PLC0207"]
247
+ "tests/**/*" = ["B011"]
282
248
  # C901 is enforced repo-wide with no per-file exemptions (the grandfathered
283
249
  # list was fully cleared by issue #925). Do NOT add "path" = ["C901"] entries
284
250
  # here — extract helpers to bring the function below the threshold instead:
@@ -286,9 +252,6 @@ ignore = [
286
252
 
287
253
  [tool.pytest.ini_options]
288
254
  testpaths = ["tests"]
289
- python_files = ["test_*.py"]
290
- python_classes = ["Test*"]
291
- python_functions = ["test_*"]
292
255
  # A parametrize list that resolves to nothing is a guard that silently stopped
293
256
  # running: pytest reports "got empty parameter set", and the summary counts it
294
257
  # as neither a failure nor a real skip. Make it a collection error instead.
@@ -313,7 +276,6 @@ markers = [
313
276
 
314
277
  # Test types
315
278
  "unit: unit tests (isolated, fast)",
316
- "integration: integration tests requiring external services",
317
279
  "e2e: end-to-end tests with full system",
318
280
  "performance: performance and load tests",
319
281
 
@@ -407,7 +369,6 @@ dev = [
407
369
  # Floor = the aiohttp HA core 2026.6 pins (2026.7 pins 3.14.1, 2026.8.dev
408
370
  # pins 3.14.3), so the version tested here is one a supported HA runs.
409
371
  "aiohttp>=3.13.5",
410
- "build>=1.2.2",
411
372
  # Test infrastructure imports the SHARED websockets directly (the HAOS
412
373
  # runtime harness, the image bake, wait_helpers) to talk to Home
413
374
  # Assistant's own WebSocket API — that is test tooling driving HA, not
@@ -420,13 +381,9 @@ dev = [
420
381
  "mcp>=1.26.0,<2",
421
382
  "mypy>=1.17.0",
422
383
  "openai>=1.0.0",
423
- "jsonschema>=4.25.1",
424
384
  "pyinstaller>=6.0.0",
425
- "pynacl>=1.6.0",
426
- "psutil>=7.0.0",
427
385
  "pytest>=8.4.2",
428
386
  "pytest-asyncio>=1.1.0",
429
- "pytest-cov>=5.0.0",
430
387
  "pytest-timeout>=2.3.0",
431
388
  "pytest-rerunfailures>=15.0",
432
389
  # Real voluptuous for the config-flow tests (the component's
@@ -450,7 +407,6 @@ dev = [
450
407
  "ruff>=0.12.12",
451
408
  "testcontainers>=4.13.0",
452
409
  "ast-grep-cli>=0.42.0",
453
- "pyyaml>=6.0",
454
410
  # Renders templates/CHANGELOG.md.j2 in test_changelog_template.py. Keep the
455
411
  # version equal to the action pinned in .github/workflows/semver-release.yml,
456
412
  # so the test renders with the release that writes the real notes.
@@ -469,34 +425,19 @@ build_command = """
469
425
  pip install uv && uv lock
470
426
  git add uv.lock
471
427
  """
472
- dist_path = "dist/"
473
- upload_to_PyPI = true
474
- upload_to_release = true
475
- remove_dist = false
476
428
 
477
429
  # Commit message parsing
478
430
  commit_parser = "angular"
479
- commit_parser_options = { major_tags = ["BREAKING", "!"], minor_tags = ["feat"], patch_tags = ["fix", "perf", "refactor"] }
431
+ commit_parser_options = { patch_tags = ["fix", "perf", "refactor"] }
480
432
 
481
433
  # Changelog configuration
482
434
  [tool.semantic_release.changelog]
483
- template_dir = "templates"
484
435
  exclude_commit_patterns = [
485
436
  "^.*\\(site\\).*$", # Commits with (site) scope
486
437
  '''chore\(addon\): [Ss]ync changelog.*''', # Changelog sync commits
487
438
  '''chore\(addon\): [Pp]ublish dev addon version.*''', # One per master merge
488
439
  ]
489
440
 
490
- [tool.semantic_release.changelog.default_templates]
491
- changelog_file = "CHANGELOG.md"
492
-
493
- # Version scheme
494
- major_on_zero = true
495
- allow_zero_version = false
496
-
497
- # Branch and tag configuration
498
- branch = "master"
499
-
500
441
  # Publish configuration (v10 syntax)
501
442
  [tool.semantic_release.publish]
502
443
  # GitHub release is created by build-binary.yml workflow to include binaries
@@ -23,13 +23,19 @@ description: >
23
23
  - Existing state changed with no recovery path
24
24
  - Jinja copy-pasted between templates
25
25
  metadata:
26
- version: "36"
26
+ version: "44"
27
27
  ---
28
28
 
29
29
  # Home Assistant Best Practices
30
30
 
31
31
  **Core principle:** Use native Home Assistant constructs wherever possible. Templates bypass validation, fail silently at runtime, and make debugging opaque.
32
32
 
33
+ **No tool reaches the HA API?** Do not stop to ask for access. If you can drive a browser on the HA web UI, make the change there, but first show the user the exact change and wait for their OK before you save: approving a click does not show them what it writes. Otherwise give the user the complete config to create in the UI (for an automation, the YAML for the editor's **Edit in YAML** mode; for a helper, its form fields), and name the entity IDs you assumed. Config that can only be written in YAML is edited with the File editor app (or in the config folder on a Container install): keep a copy of the file first, then check the configuration and run the matching reload in the **YAML** tab of **Tools** (named **Developer Tools** before 2026.8; restart if it isn't listed).
34
+
35
+ **A feature marked with a release (2026.5+) depends on the instance's version.** Read it before choosing: `version` in `GET /api/config`, or **Settings → About** in the UI. On that release or later, use the feature and do not offer the older way as an equal choice. If you cannot read the version, assume a current release and name the older fallback with the version it needs.
36
+
37
+ **Read the matching reference before you answer.** This page only summarizes the files in [Reference Files](#reference-files); the exact keys, fields and working examples are in them. Read every file whose row matches the task, and only those: do not load all reference files upfront.
38
+
33
39
  ## Decision Workflow
34
40
 
35
41
  Follow this sequence when creating any automation:
@@ -41,17 +47,21 @@ If your change affects entity IDs, display names, or cross-component references
41
47
  Steps 1-5 below apply to new config or pattern evaluation.
42
48
 
43
49
  ### 1. Check for a purpose-specific, then generic native, trigger/condition
44
- Since 2026.7 the default building blocks are purpose-specific triggers/conditions — `<domain>.<name>` keys (motion detected, battery low, door opened) with area/floor/label targets. Check for one that matches the intent first, then a generic native trigger/condition, and only then a template. See [automation-patterns #purpose-specific-triggers--conditions-default-since-20267](references/automation-patterns.md#purpose-specific-triggers--conditions-default-since-20267).
50
+ Since 2026.7 the default building blocks are purpose-specific triggers/conditions — `<domain>.<name>` keys (motion detected, battery low, door opened) with area/floor/label targets. Check for one that matches the intent first, then a generic native trigger/condition, and only then a template. Read [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) before writing the trigger.
51
+
52
+ A purpose-specific trigger takes `entity_id` in its `target:` as well, so one known sensor is not a reason to fall back to `trigger: state`. Write the automation with the purpose-specific trigger; do not offer it only as an optional upgrade.
45
53
 
46
54
  **Common substitutions:**
55
+ - `trigger: state` on a motion, occupancy or door `binary_sensor` → `motion.detected`/`motion.cleared`, `occupancy.detected`/`occupancy.cleared` or `door.opened`/`door.closed` with `target: {entity_id: ...}`, or `area_id` when the area is known
47
56
  - List of individual sensor entities in a trigger → one purpose-specific trigger with an area/floor/label `target:`
57
+ - `delay` after `motion.detected` for "no motion anywhere for N minutes" → `motion.cleared` with `options: {behavior: all, for: ...}`, which fires once every targeted sensor has been clear that long (`unavailable` and `unknown` sensors are left out of the count)
48
58
  - `{{ states('x') | float > 25 }}` → `numeric_state` condition with `above: 25`
49
59
  - `{{ is_state('x', 'on') and is_state('y', 'on') }}` → `condition: and` with state conditions
50
60
  - `{{ now().hour >= 9 }}` → `condition: time` with `after: "09:00:00"`
51
61
  - `wait_template: "{{ is_state(...) }}"` → `wait_for_trigger` with state trigger (caveat: different behavior when state is already true — see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring))
52
62
 
53
63
  ### 2. Check for built-in helper or Template Helper
54
- Before creating a template sensor, check [helper-selection](references/helper-selection.md).
64
+ Read [helper-selection](references/helper-selection.md) before creating a template sensor.
55
65
 
56
66
  **Common substitutions:**
57
67
  - Sum/average multiple sensors → `min_max` integration
@@ -70,7 +80,7 @@ the config needs a key the flow has no field for — trigger-based templates and
70
80
  are the common ones. Then use managed YAML editing ([yaml-only-integrations](references/yaml-only-integrations.md)), not a hand-edit.
71
81
 
72
82
  ### 3. Select correct automation mode
73
- Default `single` mode is often wrong. See [automation-patterns #automation-modes](references/automation-patterns.md#automation-modes).
83
+ Default `single` mode is often wrong. See [automation-actions #automation-modes](references/automation-actions.md#automation-modes).
74
84
 
75
85
  | Scenario | Mode |
76
86
  |----------|------|
@@ -85,11 +95,11 @@ Default `single` mode is often wrong. See [automation-patterns #automation-modes
85
95
  **Exception:** Zigbee2MQTT autodiscovered device triggers are acceptable.
86
96
 
87
97
  ### 5. For buttons and remotes
88
- - **Any integration exposing an `event.*` entity:** Use `event.received` targeting that entity — a normal entity, so it can be renamed and survives a re-add when the integration keeps a stable unique ID
98
+ - **Any integration exposing an `event.*` entity:** Use `event.received` targeting that entity (see the anti-pattern row below)
89
99
  - **ZHA:** No event entities — use an `event` trigger with `device_ieee` (persistent)
90
100
  - **Z2M:** Event entities are experimental and off by default — use a `device` trigger (autodiscovered) or `mqtt` trigger
91
101
 
92
- See [device-control #buttonremote-patterns](references/device-control.md#buttonremote-patterns).
102
+ Read [device-control #buttonremote-patterns](references/device-control.md#buttonremote-patterns) before writing the trigger.
93
103
 
94
104
  ---
95
105
 
@@ -97,28 +107,30 @@ See [device-control #buttonremote-patterns](references/device-control.md#buttonr
97
107
 
98
108
  | Anti-pattern | Use instead | Why | Reference |
99
109
  |--------------|-------------|-----|-----------|
100
- | `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | [automation-patterns #native-conditions](references/automation-patterns.md#native-conditions) |
101
- | `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring) for semantic differences) | [automation-patterns #wait-actions](references/automation-patterns.md#wait-actions) |
110
+ | `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | [triggers-and-conditions #native-conditions](references/triggers-and-conditions.md#native-conditions) |
111
+ | `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring) for semantic differences) | [automation-actions #wait-actions](references/automation-actions.md#wait-actions) |
102
112
  | `device_id` in triggers | `entity_id` (or `device_ieee` for ZHA) | device_id breaks on re-add | [device-control #entity-id-vs-device-id](references/device-control.md#entity-id-vs-device-id) |
103
- | `numeric_state` trigger driving a costly action, unguarded | Condition rejecting `unavailable`/`unknown` in `trigger.from_state` | A restart or blip re-arms the trigger, so an unchanged value fires with no crossing (the guard also drops real crossings) | [automation-patterns #unavailable-arms-a-numeric-state-trigger](references/automation-patterns.md#unavailable-arms-a-numeric-state-trigger) |
104
- | `mode: single` for motion lights | `mode: restart` | Re-triggers must reset the timer | [automation-patterns #automation-modes](references/automation-patterns.md#automation-modes) |
105
- | `enabled: false` as a top-level key in `automations.yaml` | `automation.turn_off` (temporary) or entity registry disable (permanent) | Not a valid top-level key — rejected during schema validation; automation loads as `unavailable` | [automation-patterns #disabling-automations](references/automation-patterns.md#disabling-automations) |
113
+ | `event` trigger on an integration's bus event (e.g. `hue_event`) for a button that has an `event.*` entity | `event.received` targeting that entity, with values read from its `event_types` attribute | The entity can be renamed and survives a re-add when the integration keeps a stable unique ID; bus event data differs per integration | [device-control #buttonremote-patterns](references/device-control.md#buttonremote-patterns) |
114
+ | `numeric_state` trigger driving a costly action, unguarded | Condition rejecting `unavailable`/`unknown` in `trigger.from_state` | A restart or blip re-arms the trigger, so an unchanged value fires with no crossing (the guard also drops real crossings) | [triggers-and-conditions #unavailable-arms-a-numeric-state-trigger](references/triggers-and-conditions.md#unavailable-arms-a-numeric-state-trigger) |
115
+ | `mode: single` for motion lights | `mode: restart` | Re-triggers must reset the timer | [automation-actions #automation-modes](references/automation-actions.md#automation-modes) |
116
+ | `enabled: false` as a top-level key in `automations.yaml` | `automation.turn_off` (temporary) or entity registry disable (permanent) | Not a valid top-level key — rejected during schema validation; automation loads as `unavailable` | [automation-actions #disabling-automations](references/automation-actions.md#disabling-automations) |
106
117
  | Template sensor for sum/mean | `min_max` helper | Declarative, handles unavailable states | [helper-selection #numeric-aggregation](references/helper-selection.md#numeric-aggregation) |
107
118
  | Template binary sensor with threshold | `threshold` helper | Built-in hysteresis support | [helper-selection #threshold](references/helper-selection.md#threshold) |
108
119
  | Renaming entity IDs without impact analysis | Follow [safe-refactoring](references/safe-refactoring.md) workflow | Renames break dashboards, scripts, scenes, Config-Entry data, and storage dashboards silently | [safe-refactoring #entity-renames](references/safe-refactoring.md#entity-renames) |
109
120
  | Renaming members of Config-Entry-based groups (UI groups) without updating membership | Update group membership via Options Flow after the registry rename | The entity registry rename does not update `options.entities` in the Config Entry — group silently breaks | [safe-refactoring #config-entry-groups](references/safe-refactoring.md#config-entry-groups) |
110
- | Renaming entities used by Config-Entry integrations (Better/Generic Thermostat, Min/Max, Threshold) without patching Config-Entry data | Scan and patch `core.config_entries` `data`+`options` fields | These integrations store entity_ids in Config Entry — not updated by entity registry renames | [safe-refactoring #config-entry-data--blind-spots-for-entity-registry-renames](references/safe-refactoring.md#config-entry-data--blind-spots-for-entity-registry-renames) |
121
+ | Renaming entities used by Min/Max helpers or custom Config-Entry integrations (e.g. Better Thermostat) without checking their Config-Entry data | Scan the config entries' `data`+`options`; re-select the renamed entity in the Min/Max Options Flow. An integration that keeps it in `data` (Better Thermostat) has no API fix: tell the user and take a full backup before the rename | They store entity_ids in the Config Entry, and a registry rename does not update them; single-source helpers such as Threshold (since 2025.6) and Generic Thermostat update themselves | [safe-refactoring #config-entry-data--blind-spots-for-entity-registry-renames](references/safe-refactoring.md#config-entry-data--blind-spots-for-entity-registry-renames) |
111
122
  | `template:` sensor/binary sensor in YAML | Template Helper via the config flow | A flow helper reloads in place and stays UI-editable; a `template:` entry needs a config reload and does not. Exceptions are real — trigger-based templates and `attributes:` have no flow field | [helper-selection #template-helpers](references/helper-selection.md#template-helpers) |
112
123
  | Editing `.storage/` files or other HA internal state directly | Use the HA REST/WebSocket API to manage state and config entries | `.storage/` files are HA's internal state database; direct edits bypass validation, risk corruption, and can be silently overwritten by HA | — |
113
124
  | Writing raw YAML to `configuration.yaml` by hand for YAML-only integrations | Use managed YAML config editing with backup and validation | Unmanaged writes risk syntax errors, have no backup, and skip `check_config` — managed editing provides all three | [yaml-only-integrations](references/yaml-only-integrations.md) |
114
- | Generating YAML snippets for automations/scripts/scenes | Use the HA config API to create automations/scripts programmatically | API calls validate config, avoid syntax errors, and don't require manual file edits or restarts | [automation-patterns](references/automation-patterns.md), [examples.yaml](references/examples.yaml) |
125
+ | Generating YAML snippets for automations/scripts/scenes | Use the HA config API to create automations/scripts programmatically; with no API access, give the config for the UI editor instead | API calls validate config, avoid syntax errors, and don't require manual file edits or restarts | [triggers-and-conditions](references/triggers-and-conditions.md), [automation-actions](references/automation-actions.md), [examples.yaml](references/examples.yaml) |
115
126
  | Telling user to edit `configuration.yaml` for integrations | Direct user to Settings > Devices & Services in the HA UI | Most integrations are UI-configured; YAML integration config is rare and integration-specific | — |
116
127
  | Referring to HA "add-ons" | Use the term "Apps" | HA renamed add-ons to Apps in 2026.2 — "Apps are standalone applications that run alongside Home Assistant" | — |
117
- | `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA `area_id` (if segments are mapped) | Uses native HA areas, works across integrations — but requires segment-to-area mapping in entity settings first | [device-control #vacuum-control](references/device-control.md#vacuum-control) |
118
- | Using `color_temp` (mireds) in light actions | Use `color_temp_kelvin` | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported | [device-control #lights](references/device-control.md#lights) |
119
- | Person/Device Tracker `entered_home`/`left_home` device triggers or `is_home`/`is_not_home` conditions | `state` trigger `to: home` / `to: not_home`, or `state` condition | These were removed in 2026.5 — state triggers and conditions are the correct replacements | [automation-patterns #presence-and-person-triggers-and-conditions-removed-in-20265](references/automation-patterns.md#presence-and-person-triggers-and-conditions-removed-in-20265) |
120
- | Entity list in a trigger where an area/floor/label target fits | Purpose-specific trigger with `target: {area_id: ...}` | Automation follows area membership as devices change — no stale entity lists | [automation-patterns #purpose-specific-triggers--conditions-default-since-20267](references/automation-patterns.md#purpose-specific-triggers--conditions-default-since-20267) |
121
- | Old purpose-specific keys (`battery.low`, `vacuum.docked`, `timer.time_remaining`, ...) or trigger `behavior: any`/`last` | Renamed 2026.7 keys (`battery.became_low`, ...) and `behavior: each`/`all` | Old keys no longer load; old behavior values raise a repair issue and face removal | [automation-patterns #purpose-specific-triggers--conditions-default-since-20267](references/automation-patterns.md#purpose-specific-triggers--conditions-default-since-20267) |
128
+ | `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA area IDs in `cleaning_area_id` (if segments are mapped) | Uses native HA areas, works across integrations — but requires segment-to-area mapping in entity settings first | [device-control #vacuum-control](references/device-control.md#vacuum-control) |
129
+ | Using `color_temp` (mireds) in light actions | Use `color_temp_kelvin` with the value converted: Kelvin = 1,000,000 ÷ mireds (500 mireds = 2000 K) | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported, and HA accepts any positive number there, so a mireds value copied across is read as Kelvin (500 mireds becomes 500 K) | [device-control #lights](references/device-control.md#lights) |
130
+ | Saving states or attributes in `variables:`, or hard-coding values, to put devices back after a temporary change | `scene.create` with `snapshot_entities` before the change, then `scene.turn_on` on that scene | The snapshot keeps each entity's own state, including a light that was off, in one call; variables need a template per attribute and a restore step per entity | [scenes #snapshot--restore-scenecreate](references/scenes.md#snapshot--restore-scenecreate) |
131
+ | Person/Device Tracker `entered_home`/`left_home` device triggers or `is_home`/`is_not_home` conditions | `state` trigger `to: home` / `to: not_home`, or `state` condition | These were removed in 2026.5 — state triggers and conditions are the correct replacements | [triggers-and-conditions #presence-and-person-triggers-and-conditions-removed-in-20265](references/triggers-and-conditions.md#presence-and-person-triggers-and-conditions-removed-in-20265) |
132
+ | Entity list in a trigger where an area/floor/label target fits | Purpose-specific trigger with `target: {area_id: ...}` | Automation follows area membership as devices change — no stale entity lists | [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) |
133
+ | Old purpose-specific keys (`battery.low`, `vacuum.docked`, `timer.time_remaining`, ...) or trigger `behavior: any`/`last` | Renamed 2026.7 keys (`battery.became_low`, ...) and `behavior: each`/`all` (renamed 2026.6) | Old keys no longer load; old behavior values raise a repair issue and face removal | [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) |
122
134
  | AppDaemon: callbacks in `__init__`, uncancelled `run_in` timers, state in instance variables, hardcoded entity IDs | Register in `initialize()`, cancel before rescheduling, persist via `input_*` helpers, pass IDs through `self.args` | Each fails silently, resets on reload, or blocks reuse | [appdaemon #appdaemon-specific-anti-patterns](references/appdaemon.md#appdaemon-specific-anti-patterns) |
123
135
  | Blueprints: hardcoded entities, free text where a selector belongs, `!input` inside a template, missing `source_url` | Typed `!input` selectors; bind an input to `variables:` before templating it; always set `source_url` | Hardcoding defeats reuse, text lets typos through, and `!input` is a YAML tag rather than a template value | [blueprint-guide #common-pitfalls](references/blueprint-guide.md#common-pitfalls) |
124
136
  | Backups: full restore to undo one object edit, no backup before an irreversible operation (registry deletion, integration removal, Core/OS upgrade), calling an action "reversible" without naming its inverse | Roll the single object back; take the backup *before*; name the exact inverse or treat it as irreversible | A full restore reverts every unrelated change since and restarts HA; a backup taken afterward captures the damage | [backups #when-a-full-backup-earns-its-cost](references/backups.md#when-a-full-backup-earns-its-cost) |
@@ -130,17 +142,18 @@ See [device-control #buttonremote-patterns](references/device-control.md#buttonr
130
142
 
131
143
  ## Reference Files
132
144
 
133
- Read these when you need detailed information:
145
+ Read each file whose row matches the task before you answer:
134
146
 
135
147
  | File | When to read |
136
148
  |------|--------------|
137
149
  | [safe-refactoring](references/safe-refactoring.md) | Renaming entities or their display names, replacing helpers, restructuring automations, or any modification to existing config |
138
- | [automation-patterns](references/automation-patterns.md) | Writing triggers, conditions, waits, variables, or choosing automation modes; capturing action responses; documenting/annotating steps; disabling automations; `continue_on_error`, admin-only actions (`Unauthorized`) in scripts, stopping a sequence, repeat, if/then vs choose, parallel, trigger IDs |
150
+ | [triggers-and-conditions](references/triggers-and-conditions.md) | Writing an automation's triggers or conditions: purpose-specific and native triggers/conditions, `for:` durations, trigger IDs |
151
+ | [automation-actions](references/automation-actions.md) | Writing the actions of an automation or script, or choosing its mode: waits, variables, capturing action responses, `continue_on_error`, admin-only actions (`Unauthorized`) in scripts, stopping a sequence, repeat, if/then vs choose, parallel; documenting/annotating steps; disabling automations |
139
152
  | [helper-selection](references/helper-selection.md) | Deciding whether to use a built-in helper vs template sensor — aggregation, rate of change, thresholds, time-in-state, counting/timing, scheduling, grouping, probabilistic inference, smoothing, climate, domain conversion, decision matrix |
140
153
  | [template-guidelines](references/template-guidelines.md) | Confirming templates ARE appropriate for a use case; sharing Jinja logic between templates with `custom_templates` macros |
141
154
  | [yaml-only-integrations](references/yaml-only-integrations.md) | Creating or editing YAML-only integrations that have no config flow (e.g. `command_line`, platform-based `mqtt`, `rest`) |
142
155
  | [device-control](references/device-control.md) | Writing actions, button/remote automations, or using target: |
143
- | [scenes](references/scenes.md) | Authoring or activating scenes; snapshot/restore patterns; snapshot-vs-script distinction |
156
+ | [scenes](references/scenes.md) | Authoring or activating scenes; snapshot/restore patterns, including putting devices back the way they were after a temporary change; snapshot-vs-script distinction |
144
157
  | [dashboard-guide](references/dashboard-guide.md) | Designing or modifying Lovelace dashboards — layout, view types, strategies, sections, cards, badges, CSS styling, HACS |
145
158
  | [dashboard-cards](references/dashboard-cards.md) | Looking up available card types or fetching card-specific documentation |
146
159
  | [domain-docs](references/domain-docs.md) | Looking up integration/domain documentation, or the dedicated doc page for a specific trigger, condition, or action |