ha-mcp-dev 9.1.0.dev3285__tar.gz → 9.1.0.dev3289__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 (830) hide show
  1. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_manager.py +2 -14
  5. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/rest_client.py +54 -71
  6. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_tool_text.py +7 -7
  7. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/auto_backup.py +6 -6
  8. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/automation_errors.py +206 -0
  9. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_checker.py +5 -60
  10. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_substitute.py +2 -2
  11. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/component_automation.py +92 -0
  12. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_reads.py +17 -9
  13. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/config_write_errors.py +96 -0
  14. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_write_helpers.py +57 -41
  15. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/reference_validator.py +111 -33
  16. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_blueprints.py +1 -1
  17. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_automations.py +630 -859
  18. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scripts.py +1 -1
  19. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_entities.py +5 -5
  20. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_service.py +1 -1
  21. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_hash.py +1 -2
  22. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/identifier_aliases.py +4 -4
  23. ha_mcp_dev-9.1.0.dev3285/src/ha_mcp/tools/config_write_errors.py +0 -185
  24. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/LICENSE +0 -0
  25. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/README.md +0 -0
  26. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__init__.py +0 -0
  27. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__main__.py +0 -0
  28. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_pypi_marker +0 -0
  29. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_rich_compat.py +0 -0
  30. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/__init__.py +0 -0
  31. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  32. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  33. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  34. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  35. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  36. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  37. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  38. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  39. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  42. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  45. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  46. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  47. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  48. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  102. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  103. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  105. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  106. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  107. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  108. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  109. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  110. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  111. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  112. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  113. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  114. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  115. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  117. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  119. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  121. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  123. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  125. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  126. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  129. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  130. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  132. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  134. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  136. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  138. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  149. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  211. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  214. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  217. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  221. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  223. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  234. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  279. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  282. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  284. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  285. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  287. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  289. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  290. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  291. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  294. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  296. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  302. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  303. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  304. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  305. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  306. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  307. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  308. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  309. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  310. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  311. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  312. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  313. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  314. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  315. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  316. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  317. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  318. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  326. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  327. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  328. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  329. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  339. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  342. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  345. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  349. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  351. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  362. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  432. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  433. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  434. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  435. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  436. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  437. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  438. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  439. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  440. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  441. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  442. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  443. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  444. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  445. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  446. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  447. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  448. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  449. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  450. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  451. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  452. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  453. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  454. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/requirements.txt +0 -0
  455. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  456. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  457. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  458. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  459. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  460. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  466. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  468. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  469. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  470. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  471. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  481. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  484. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  487. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  491. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  493. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  504. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_version.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/app_discovery.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/__init__.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/consent_form.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/iss_stamp.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/oidc_compat.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/provider.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_dashboards.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_diff.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entities.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entity_ids.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_helper_target.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_integrations.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_tags.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_todo.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_zones.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/browser_landing.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/__init__.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/admin_routes.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/error_log_journald.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/models.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/supervisor_client.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_client.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_listener.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_backup.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_meta.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_overrides.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_registry.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_settings.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/errors.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ha_request_queue.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/http_transport.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/image_info.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/listen_sockets.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/llm_exposure.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/log_filters.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/mcp_client_context.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/__init__.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/approval_queue.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decision_pin.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decisions.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/editing.py +0 -0
  563. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/evaluator.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/events.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/handlers.py +0 -0
  566. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/middleware.py +0 -0
  567. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/model.py +0 -0
  568. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/mrtr.py +0 -0
  569. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/persistence.py +0 -0
  570. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/server_channels.py +0 -0
  571. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/value_sources.py +0 -0
  572. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/py.typed +0 -0
  573. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/read_only.py +0 -0
  574. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/redaction.py +0 -0
  575. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/renamed_tools.py +0 -0
  576. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  577. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  578. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  579. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  580. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  581. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  582. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  583. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  584. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  585. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  586. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  587. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  588. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  589. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  590. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  591. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  592. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  593. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server.py +0 -0
  594. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_instructions.py +0 -0
  595. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_lifespan.py +0 -0
  596. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/__init__.py +0 -0
  597. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  598. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  599. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  600. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  601. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  602. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  603. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  604. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  605. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  606. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  607. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  608. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_theme.py +0 -0
  609. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  610. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  611. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  612. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  613. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  614. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  615. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  616. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  617. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  618. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  619. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  620. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  621. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  622. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  623. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  624. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  625. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  626. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  627. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.css +0 -0
  628. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.html +0 -0
  629. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  630. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  631. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  632. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  633. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  634. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  635. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  636. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  637. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  638. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  639. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/smoke_test.py +0 -0
  640. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  641. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/storage_helper_types.py +0 -0
  642. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/strict_bps.py +0 -0
  643. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tool_dispatch.py +0 -0
  644. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/__init__.py +0 -0
  645. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  646. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/area_messages.py +0 -0
  647. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup.py +0 -0
  648. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_access.py +0 -0
  649. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  650. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  651. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_result.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_write.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_config.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bulk_selector.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/coercion.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_api.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_entries.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_devices.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registries.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_todo.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/core_contract.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dev_backup.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_control.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_enrichment.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/energy_preferences.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_registration.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_removal.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_backend.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_registration.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helper_flows.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helpers.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/history_response.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_common.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/__init__.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/base.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/matter.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/thread.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/recorder_errors.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/registry.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/response_helpers.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/scene_discovery.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/__init__.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/base.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/component.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/entities.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/legacy.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/modes.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/overview.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/response.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/state.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/server_version.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_resets.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/system_restart.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_hints.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_addons.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_areas.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_calendar.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_camera.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_categories.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_code.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dev.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_energy.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_groups.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_hacs.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_history.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_integrations.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_labels.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_logs.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_radio.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_registry.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_resources.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_search.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_services.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_system.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_themes.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_todo.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_traces.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_updates.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_utility.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_zones.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/update_categories.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/util_helpers.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/validation_middleware.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/ws_waiters.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/__init__.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/categorized_search.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/compact_params.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_helpers.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_search.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transport_security.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/update_check.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/__init__.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_write_lock.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/data_paths.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/domain_handlers.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/entity_membership.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/operation_manager.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/python_sandbox.py +0 -0
  822. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  823. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/skill_loader.py +0 -0
  824. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/usage_logger.py +0 -0
  825. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/__init__.py +0 -0
  826. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/config_files.py +0 -0
  827. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/enforcement.py +0 -0
  828. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/model.py +0 -0
  829. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/persistence.py +0 -0
  830. {ha_mcp_dev-9.1.0.dev3285 → ha_mcp_dev-9.1.0.dev3289}/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: 9.1.0.dev3285
3
+ Version: 9.1.0.dev3289
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 = "9.1.0.dev3285"
7
+ version = "9.1.0.dev3289"
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"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.0.dev3285"
7
+ version = "9.1.0.dev3289"
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
@@ -2070,25 +2070,13 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
2070
2070
 
2071
2071
 
2072
2072
  async def _fetch_automation(client: Any, entity_id: str) -> Any:
2073
- """Fetch an automation through the same path the get tool uses.
2074
-
2075
- Applies ``_normalize_config_for_roundtrip`` so the snapshot matches
2076
- what ``ha_config_get_automation`` returns and round-trips cleanly
2077
- back through ``ha_config_set_automation`` on restore. Imported lazily
2078
- to keep the manager import-cycle-free.
2079
- """
2080
- # Lazy import to avoid backup_manager → tools → backup_manager cycle.
2081
- from .tools.tools_config_automations import _normalize_config_for_roundtrip
2082
-
2073
+ """Fetch the stored body verbatim."""
2083
2074
  try:
2084
- raw = await client.get_automation_config(entity_id)
2075
+ return await client.get_automation_config(entity_id)
2085
2076
  except HomeAssistantError as err:
2086
2077
  if getattr(err, "status_code", None) == 404:
2087
2078
  return None
2088
2079
  raise
2089
- if not isinstance(raw, dict):
2090
- return raw
2091
- return _normalize_config_for_roundtrip(raw)
2092
2080
 
2093
2081
 
2094
2082
  async def _restore_automation(client: Any, entity_id: str, config: Any) -> Any:
@@ -1377,40 +1377,44 @@ class HomeAssistantClient:
1377
1377
  # Automation Configuration Management
1378
1378
 
1379
1379
  async def _resolve_automation_id(self, identifier: str) -> str:
1380
- """Convert entity_id to unique_id if needed, or return unique_id as-is.
1380
+ """Return the config id of ``identifier`` (an entity_id or a config id).
1381
1381
 
1382
- Args:
1383
- identifier: Either entity_id (automation.xxx) or unique_id
1384
-
1385
- Returns:
1386
- The unique_id for configuration API
1382
+ An entity_id resolves through the entity registry first, so a disabled
1383
+ automation (no state) resolves too; the state's ``id`` attribute is the
1384
+ fallback when the registry does not answer with a ``unique_id``.
1387
1385
 
1388
1386
  Raises:
1389
1387
  HomeAssistantAPIError: 404 if not found; other read failures propagate
1390
1388
  """
1391
- if identifier.startswith("automation."):
1392
- try:
1393
- state = await self.get_entity_state(identifier)
1394
- unique_id = state.get("attributes", {}).get("id")
1395
- if not unique_id:
1396
- raise HomeAssistantAPIError(
1397
- f"Automation {identifier} has no unique_id attribute",
1398
- status_code=404,
1399
- )
1400
- logger.debug(
1401
- f"Converted entity_id {identifier} to unique_id {unique_id}"
1402
- )
1403
- return str(unique_id)
1404
- except HomeAssistantAPIError as e:
1405
- if e.status_code != 404: # a failed read is not a missing one
1406
- raise
1407
- raise HomeAssistantAPIError(
1408
- f"Failed to resolve automation {identifier}: {str(e)}",
1409
- status_code=404,
1410
- ) from e
1411
- else:
1412
- # Assume it's already a unique_id
1389
+ if not identifier.startswith("automation."):
1413
1390
  return identifier
1391
+ try:
1392
+ entry = await self.send_websocket_message(
1393
+ {"type": "config/entity_registry/get", "entity_id": identifier}
1394
+ )
1395
+ except HomeAssistantConnectionError as e:
1396
+ logger.debug(f"Registry lookup for {identifier} failed: {e}")
1397
+ entry = {}
1398
+ if entry.get("success"):
1399
+ unique_id = (entry.get("result") or {}).get("unique_id")
1400
+ if unique_id:
1401
+ return str(unique_id)
1402
+ try:
1403
+ state = await self.get_entity_state(identifier)
1404
+ except HomeAssistantAPIError as e:
1405
+ if e.status_code != 404: # a failed read is not a missing one
1406
+ raise
1407
+ raise HomeAssistantAPIError(
1408
+ f"Failed to resolve automation {identifier}: {str(e)}",
1409
+ status_code=404,
1410
+ ) from e
1411
+ unique_id = state.get("attributes", {}).get("id")
1412
+ if not unique_id:
1413
+ raise HomeAssistantAPIError(
1414
+ f"Automation {identifier} has no unique_id attribute",
1415
+ status_code=404,
1416
+ )
1417
+ return str(unique_id)
1414
1418
 
1415
1419
  async def get_automation_config(self, identifier: str) -> dict[str, Any]:
1416
1420
  """Get automation configuration by unique_id or entity_id.
@@ -1446,19 +1450,19 @@ class HomeAssistantClient:
1446
1450
  identifier: str | None = None,
1447
1451
  *,
1448
1452
  _resolved: bool = False,
1453
+ wait_for_entity: bool = False,
1449
1454
  ) -> dict[str, Any]:
1450
1455
  """
1451
1456
  Create new automation or update existing one.
1452
1457
 
1453
1458
  Args:
1454
- config: Automation configuration dictionary
1455
- identifier: Optional automation entity_id or unique_id (None = create new)
1456
- _resolved: When True, ``identifier`` is already the resolved unique_id
1457
- (the caller ran ``_resolve_automation_id``), so the redundant
1458
- entity_id→unique_id lookup is skipped. Ignored on the create path
1459
- (``identifier is None``). The #1404 config-id mismatch guard below
1460
- is unaffected — it still compares ``config['id']`` to the resolved
1461
- unique_id.
1459
+ config: Automation configuration dictionary, sent as given
1460
+ identifier: Optional automation entity_id or config id (None = create new)
1461
+ _resolved: When True, ``identifier`` is already the config id (the
1462
+ caller resolved it), so the entity_id lookup is skipped. The
1463
+ #1404 config-id mismatch guard below still applies.
1464
+ wait_for_entity: Poll for the entity the write registers, as a
1465
+ creation does, and report it as ``entity_id``.
1462
1466
 
1463
1467
  Returns:
1464
1468
  Result with automation unique_id and status
@@ -1466,19 +1470,14 @@ class HomeAssistantClient:
1466
1470
  Raises:
1467
1471
  HomeAssistantAPIError: If configuration invalid or API error
1468
1472
  """
1469
- # Generate unique_id for new automation if not provided
1470
1473
  if identifier is None:
1471
1474
  unique_id = str(int(time.time() * 1000))
1472
- operation = "created"
1473
- logger.debug(f"Creating new automation with unique_id: {unique_id}")
1474
1475
  else:
1475
1476
  unique_id = (
1476
1477
  identifier
1477
1478
  if _resolved
1478
1479
  else await self._resolve_automation_id(identifier)
1479
1480
  )
1480
- operation = "updated"
1481
- logger.debug(f"Updating automation with unique_id: {unique_id}")
1482
1481
 
1483
1482
  # Reject mismatch between resolved storage key and inner ``config["id"]``.
1484
1483
  # HA stores by the inner id field even though the URL carries one too —
@@ -1491,20 +1490,20 @@ class HomeAssistantClient:
1491
1490
  "Cannot create automation with explicit config['id']="
1492
1491
  f"{config_id!r}: Home Assistant stores by the inner id, "
1493
1492
  "which would silently overwrite an existing automation. "
1494
- "Omit 'id' from config to auto-generate, or pass identifier "
1493
+ "Omit 'id' from config to auto-generate, or pass entity_id "
1495
1494
  "to update an existing automation.",
1496
1495
  status_code=400,
1497
1496
  )
1498
1497
  raise HomeAssistantAPIError(
1499
- f"Mismatched automation id: identifier={identifier!r} resolves "
1500
- f"to unique_id={unique_id!r}, but config['id']={config_id!r}. "
1498
+ f"Mismatched automation id: the target's config id is "
1499
+ f"{unique_id!r}, but config['id']={config_id!r}. "
1501
1500
  "Refusing to write to prevent overwriting the wrong automation. "
1502
- f"Remove 'id' from config or set it to the resolved unique_id "
1501
+ f"Remove 'id' from config or set it to the target's config id "
1503
1502
  f"({unique_id!r}).",
1504
1503
  status_code=400,
1505
1504
  )
1506
1505
 
1507
- # Add unique_id to config for updates
1506
+ # Core stores by the body's id, so it carries the target's.
1508
1507
  if unique_id and "id" not in config:
1509
1508
  config = {**config, "id": unique_id}
1510
1509
 
@@ -1513,10 +1512,9 @@ class HomeAssistantClient:
1513
1512
  "POST", f"/config/automation/config/{unique_id}", json=config
1514
1513
  )
1515
1514
 
1516
- # For new automations, query Home Assistant to get the actual entity_id that was assigned
1517
1515
  actual_entity_id = None
1518
1516
  entity_not_verified = False
1519
- if operation == "created":
1517
+ if wait_for_entity:
1520
1518
  actual_entity_id = await self._poll_for_automation_entity(unique_id)
1521
1519
  if not actual_entity_id:
1522
1520
  entity_not_verified = True
@@ -1525,7 +1523,6 @@ class HomeAssistantClient:
1525
1523
  "unique_id": unique_id,
1526
1524
  "entity_id": actual_entity_id,
1527
1525
  "result": response.get("result", "ok"),
1528
- "operation": operation,
1529
1526
  }
1530
1527
  if entity_not_verified:
1531
1528
  result["entity_not_verified"] = True
@@ -1533,7 +1530,9 @@ class HomeAssistantClient:
1533
1530
  except HomeAssistantAPIError as e:
1534
1531
  if e.status_code == 400:
1535
1532
  raise HomeAssistantAPIError(
1536
- f"Invalid automation configuration: {str(e)}", status_code=400
1533
+ f"Invalid automation configuration: {str(e)}",
1534
+ status_code=400,
1535
+ response_data=e.response_data,
1537
1536
  ) from e
1538
1537
  raise
1539
1538
 
@@ -1610,27 +1609,11 @@ class HomeAssistantClient:
1610
1609
  "operation": "deleted",
1611
1610
  }
1612
1611
  except HomeAssistantAPIError as e:
1613
- if e.status_code == 404:
1614
- raise HomeAssistantAPIError(
1615
- f"Automation not found: {identifier} (unique_id: {unique_id})",
1616
- status_code=404,
1617
- ) from e
1618
- elif e.status_code == 405:
1619
- raise HomeAssistantAPIError(
1620
- f"Cannot delete automation '{identifier}': The HTTP DELETE method is blocked. "
1621
- f"This typically occurs when running ha-mcp as a Home Assistant add-on, because "
1622
- f"the Supervisor ingress proxy only allows GET and POST requests. "
1623
- f"WORKAROUNDS: "
1624
- f"(1) Use ha-mcp via pip, Docker, or as an external MCP server instead of the add-on. "
1625
- f"(2) Use a long-lived access token to connect directly to Home Assistant's API. "
1626
- f"(3) As a fallback, disable the automation and rename it with a 'DELETE_' prefix "
1627
- f"(e.g., 'DELETE_{identifier}') so you can identify and manually delete it later "
1628
- f"via the Home Assistant UI (Settings > Automations & Scenes).",
1629
- status_code=405,
1630
- ) from e
1631
- raise
1632
- except Exception as e:
1633
- if "404" in str(e):
1612
+ # Core's DELETE answers a missing id with 400, not 404.
1613
+ if (
1614
+ e.status_code == 400
1615
+ and (e.response_data or {}).get("message") == "Resource not found"
1616
+ ):
1634
1617
  raise HomeAssistantAPIError(
1635
1618
  f"Automation not found: {identifier} (unique_id: {unique_id})",
1636
1619
  status_code=404,
@@ -213,10 +213,10 @@ SEARCH_KEYWORDS: dict[str, str] = {
213
213
  LITE_DOCSTRINGS: dict[str, str] = {
214
214
  "ha_config_get_automation": (
215
215
  "Get a Home Assistant automation configuration by "
216
- "entity_id or unique_id. Returns the full config "
217
- "(trigger, condition, action, mode) plus a stable "
218
- "config_hash for use with python_transform on "
219
- "ha_config_set_automation.\n\n"
216
+ "entity_id or config id. Returns the stored config "
217
+ "plus a stable config_hash for use with python_transform on "
218
+ "ha_config_set_automation, the registry entry, and Home "
219
+ "Assistant's validation status.\n\n"
220
220
  "For schema and field-level details, see "
221
221
  "ha_get_skill_guide."
222
222
  ),
@@ -224,14 +224,14 @@ LITE_DOCSTRINGS: dict[str, str] = {
224
224
  "Create or update a Home Assistant automation.\n\n"
225
225
  "Supports three modes: full `config` replacement, surgical "
226
226
  "`python_transform` on an existing automation (requires "
227
- "`identifier` and `config_hash` from "
227
+ "`entity_id` and `config_hash` from "
228
228
  "ha_config_get_automation), or `take_control_of_blueprint` "
229
229
  "to convert a blueprint-backed automation into an editable "
230
230
  "standalone one (the UI's Take control action). Omit "
231
- "`identifier` to create a new automation. Reusing an identifier targets "
231
+ "`entity_id` to create a new automation. Reusing an entity_id targets "
232
232
  "the same automation; changing its alias requires config_hash from a prior read. "
233
233
  "`enabled` turns it on or off and `run_actions` runs it now, with a "
234
- "write or alone with `identifier`.\n\n"
234
+ "write or alone with `entity_id`.\n\n"
235
235
  "For schema details, examples, and native-vs-template "
236
236
  "guidance, see ha_get_skill_guide or your locally "
237
237
  "installed skills."
@@ -108,13 +108,13 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
108
108
  """Resolve the actual storage target for an automation write.
109
109
 
110
110
  HA's automation storage uses the body's ``id`` field as the primary
111
- key (#1404). When the caller passes both ``identifier`` and a
111
+ key (#1404). When the caller passes both ``entity_id`` and a
112
112
  ``config.id`` that differ, HA writes to ``config.id`` — the
113
113
  snapshot must capture *that* entity, not the user-provided
114
- ``identifier`` whose target is left untouched.
114
+ ``entity_id`` whose target is left untouched.
115
115
 
116
116
  Returns ``str(config["id"])`` when present, else
117
- ``str(identifier or "")``. Empty string skips capture (matches the
117
+ ``str(entity_id or "")``. Empty string skips capture (matches the
118
118
  create path where there's nothing to back up yet).
119
119
 
120
120
  ``config`` accepts dict or JSON-string per the tool signature; both
@@ -130,7 +130,7 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
130
130
  config_id = config.get("id")
131
131
  if config_id:
132
132
  return str(config_id)
133
- # Return the identifier UNCHANGED — do NOT strip the ``automation.``
133
+ # Return the entity_id UNCHANGED — do NOT strip the ``automation.``
134
134
  # prefix. Capture and restore resolve the target through
135
135
  # ``client.get_automation_config`` -> ``_resolve_automation_id``, which
136
136
  # converts an entity_id ("automation.<slug>") to the real numeric
@@ -142,8 +142,8 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
142
142
  # would POST to the wrong key and create a stray automation). The
143
143
  # doubled domain segment in the snapshot filename
144
144
  # ("automation.automation.<slug>.<ts>.yaml") is purely cosmetic and is
145
- # exactly what the remove path (id_param="identifier") already produces.
146
- return _resolve_str(kw.get("identifier"))
145
+ # exactly what the remove path (id_param="entity_id") already produces.
146
+ return _resolve_str(kw.get("entity_id"))
147
147
 
148
148
 
149
149
  def with_auto_backup(
@@ -0,0 +1,206 @@
1
+ """Errors for an automation Home Assistant rejected.
2
+
3
+ Core's own text leads every rejection, behind one fixed prefix; this module
4
+ only names the section that failed and adds suggestions. Closest matches for
5
+ an unknown trigger or condition key come from the platforms the running Core
6
+ registered (the component's ``describe``, else the first event of Core's
7
+ ``trigger_platforms/subscribe`` / ``condition_platforms/subscribe``), never
8
+ from a list kept here.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import asyncio
14
+ import difflib
15
+ import logging
16
+ import re
17
+ from typing import Any, Literal, NoReturn, cast
18
+
19
+ from ha_mcp._vendor.websockets.exceptions import ConnectionClosed
20
+
21
+ from ..client.rest_client import HomeAssistantAPIError, HomeAssistantError
22
+ from ..client.websocket_client import get_websocket_client
23
+ from ..errors import ErrorCode, create_error_response
24
+ from .component_automation import automation_describe
25
+ from .helpers import raise_tool_error
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+ REJECTION_PREFIX = "Home Assistant rejected the automation: "
30
+
31
+ # Core raises both quote styles (the helpers/condition package uses each once).
32
+ _INVALID_KEY = re.compile(r"Invalid (trigger|condition) ['\"]([^'\"]+)['\"] specified")
33
+
34
+ # Bounds the wait for a platform subscription's first event, which Core sends
35
+ # right after the subscription result.
36
+ _DESCRIPTIONS_TIMEOUT_S = 5.0
37
+
38
+
39
+ def section_from_status(status: str | None) -> str | None:
40
+ """The config section a component ``validate`` status names."""
41
+ return (
42
+ status.removeprefix("failed_")
43
+ if status and status.startswith("failed_")
44
+ else None
45
+ )
46
+
47
+
48
+ def core_rejection_text(exc: HomeAssistantAPIError) -> str | None:
49
+ """Core's message for a 400 it answered, None for any other error."""
50
+ if exc.status_code != 400 or not isinstance(exc.response_data, dict):
51
+ return None
52
+ message = exc.response_data.get("message")
53
+ return message if isinstance(message, str) and message else None
54
+
55
+
56
+ async def failed_section_from_core(client: Any, config: dict[str, Any]) -> str | None:
57
+ """Name the failed section with Core's ``validate_config``; best effort.
58
+
59
+ When every section Core checks is valid, the root schema (or the
60
+ blueprint) is what failed.
61
+ """
62
+ sections = {}
63
+ for plural, singular in (
64
+ ("triggers", "trigger"),
65
+ ("conditions", "condition"),
66
+ ("actions", "action"),
67
+ ):
68
+ value = config.get(plural, config.get(singular))
69
+ if value is not None:
70
+ sections[plural] = value
71
+ if sections:
72
+ try:
73
+ result = await client.send_websocket_message(
74
+ {"type": "validate_config", **sections}
75
+ )
76
+ except HomeAssistantError as exc:
77
+ logger.debug("validate_config got no answer: %s", exc)
78
+ return None
79
+ verdicts = result.get("result") if result.get("success") else None
80
+ if not isinstance(verdicts, dict):
81
+ return None
82
+ for section in sections:
83
+ if (verdicts.get(section) or {}).get("valid") is False:
84
+ return section
85
+ return "blueprint" if "use_blueprint" in config else "schema"
86
+
87
+
88
+ async def _subscription_first_event(client: Any, command: str) -> dict[str, Any] | None:
89
+ try:
90
+ ws = await get_websocket_client(
91
+ url=client.base_url,
92
+ token=client.token,
93
+ verify_ssl=getattr(client, "verify_ssl", None),
94
+ )
95
+ sub_id, queue = await ws.subscribe_command(command)
96
+ except (HomeAssistantError, OSError, ConnectionClosed) as exc:
97
+ logger.debug("%s failed: %s", command, exc)
98
+ return None
99
+ try:
100
+ message = await asyncio.wait_for(queue.get(), timeout=_DESCRIPTIONS_TIMEOUT_S)
101
+ except TimeoutError:
102
+ return None
103
+ finally:
104
+ await ws.release_subscription(sub_id)
105
+ event = message.get("event") if isinstance(message, dict) else None
106
+ return event if isinstance(event, dict) else None
107
+
108
+
109
+ async def platform_descriptions(
110
+ client: Any, kind: Literal["trigger", "condition"]
111
+ ) -> dict[str, Any] | None:
112
+ """Core's description of every registered trigger or condition, by key."""
113
+ descriptions = await automation_describe(client, kind)
114
+ if descriptions is not None:
115
+ return descriptions
116
+ return await _subscription_first_event(client, f"{kind}_platforms/subscribe")
117
+
118
+
119
+ def closest_matches(key: str, candidates: list[str]) -> list[str]:
120
+ """Registered keys nearest to ``key``.
121
+
122
+ Searched within the key's domain when Core registers one: the domain is
123
+ the part a caller has right, and a renamed key's replacement lives there
124
+ (``schedule.turned_on`` is now ``schedule.block_started``, which no
125
+ lookalike from another domain would surface). Across every domain
126
+ otherwise, which also serves a misspelt domain. A key nothing comes close
127
+ to gets no hint: the domain's other keys are not corrections.
128
+ """
129
+ domain, dot, _ = key.partition(".")
130
+ if dot and (same := [c for c in candidates if c.startswith(f"{domain}.")]):
131
+ return difflib.get_close_matches(key, same, n=3, cutoff=0.5)
132
+ return difflib.get_close_matches(key, candidates, n=3, cutoff=0.5)
133
+
134
+
135
+ def _platform_condition(config: dict[str, Any]) -> bool:
136
+ conditions = config.get("conditions", config.get("condition"))
137
+ items = conditions if isinstance(conditions, list) else [conditions]
138
+ return any(
139
+ isinstance(c, dict) and "platform" in c and "condition" not in c for c in items
140
+ )
141
+
142
+
143
+ def _text_suggestions(core_text: str, config: dict[str, Any]) -> list[str]:
144
+ """Targeted hints for Core rejections agents commonly cause."""
145
+ lowered = core_text.lower()
146
+ suggestions = []
147
+ if "unexpected keyword argument" in lowered:
148
+ suggestions.append(
149
+ "A root-level field such as alias, triggers or conditions is inside "
150
+ "an action step."
151
+ )
152
+ elif "'variables'" in core_text and "dictionary" in core_text:
153
+ suggestions.append(
154
+ "variables must be a dict mapping names to values, "
155
+ 'e.g. {"variables": {"my_var": 42}}'
156
+ )
157
+ if "unexpected value for condition" in lowered and _platform_condition(config):
158
+ suggestions.append(
159
+ "A condition uses 'platform' (trigger syntax); conditions use "
160
+ "'condition', e.g. {'condition': 'state', ...}."
161
+ )
162
+ return suggestions
163
+
164
+
165
+ async def raise_core_rejection(
166
+ client: Any,
167
+ core_text: str,
168
+ config: dict[str, Any],
169
+ *,
170
+ failed_section: str | None,
171
+ context: dict[str, Any],
172
+ bp_warnings: list[str],
173
+ ) -> NoReturn:
174
+ """Raise VALIDATION_FAILED with Core's text and the hints it supports."""
175
+ error_context: dict[str, Any] = {**context, "failed_section": failed_section}
176
+ suggestions = _text_suggestions(core_text, config)
177
+ match = _INVALID_KEY.search(core_text)
178
+ if match:
179
+ kind = cast(Literal["trigger", "condition"], match.group(1))
180
+ key = match.group(2)
181
+ descriptions = await platform_descriptions(client, kind) or {}
182
+ matches = closest_matches(key, sorted(descriptions))
183
+ if matches:
184
+ error_context["closest_matches"] = matches
185
+ description = descriptions.get(matches[0])
186
+ if isinstance(description, dict):
187
+ error_context["platform_description"] = description
188
+ suggestions.insert(
189
+ 0,
190
+ f"Home Assistant has no {kind} '{key}'. Registered {kind}s "
191
+ f"closest to it: {', '.join(matches)}.",
192
+ )
193
+ suggestions.append("Use ha_get_skill_guide for automation examples")
194
+ if bp_warnings:
195
+ suggestions.append(
196
+ "Config had best-practice issues that may be related: "
197
+ + "; ".join(bp_warnings)
198
+ )
199
+ raise_tool_error(
200
+ create_error_response(
201
+ ErrorCode.VALIDATION_FAILED,
202
+ f"{REJECTION_PREFIX}{core_text}",
203
+ suggestions=suggestions,
204
+ context=error_context,
205
+ )
206
+ )
@@ -145,22 +145,6 @@ _TARGET_FIELDS = ("entity_id", "device_id", "area_id", "floor_id", "label_id")
145
145
  # ``service:`` (legacy) and ``action:`` (modern, 2024+) for the same field.
146
146
  _SERVICE_KEYS = ("service", "action")
147
147
 
148
- # Purpose-specific trigger/condition keys renamed in HA 2026.7 — the old keys
149
- # no longer load (home-assistant/core#174463).
150
- _RENAMED_TRIGGER_KEYS = {
151
- "battery.low": "battery.became_low",
152
- "battery.not_low": "battery.no_longer_low",
153
- "lawn_mower.docked": "lawn_mower.returned_to_dock",
154
- "schedule.turned_on": "schedule.block_started",
155
- "schedule.turned_off": "schedule.block_ended",
156
- "timer.time_remaining": "timer.remaining_time_reached",
157
- "update.update_became_available": "update.became_available",
158
- "vacuum.docked": "vacuum.returned_to_dock",
159
- }
160
- _RENAMED_CONDITION_KEYS = {
161
- "climate.target_temperature": "climate.is_target_temperature",
162
- "climate.target_humidity": "climate.is_target_humidity",
163
- }
164
148
  # Trigger ``options.behavior`` values renamed in HA 2026.7: any→each,
165
149
  # last→all (home-assistant/core#173259). The old values still load but raise
166
150
  # an HA repair issue and face removal. Condition ``options.behavior`` keeps
@@ -202,10 +186,8 @@ def check_automation_config(
202
186
 
203
187
  warnings = BestPracticeCheckResult()
204
188
 
205
- # Read the canonical 2024.10+ plural root keys, falling back to the singular
206
- # aliases. The internal pipeline always pre-normalizes to plural, so the
207
- # fallback is defensive for direct/public callers of check_automation_config
208
- # (HA accepts both forms). Mirrors _check_triggers' platform/trigger tolerance.
189
+ # The config is checked as the caller wrote it, so either root form may
190
+ # carry the lists.
209
191
  # Condition templates
210
192
  _check_condition_templates(
211
193
  config.get("conditions", config.get("condition", [])), warnings, skill_prefix
@@ -267,23 +249,6 @@ def _check_condition_templates(
267
249
  # Shorthand template condition
268
250
  _check_template_string(cond, warnings, skill_prefix, "condition")
269
251
  elif isinstance(cond, dict):
270
- # 2026.7 renamed purpose-specific condition keys — old keys no
271
- # longer load.
272
- condition_key = cond.get("condition")
273
- renamed_condition = (
274
- _RENAMED_CONDITION_KEYS.get(condition_key)
275
- if isinstance(condition_key, str)
276
- else None
277
- )
278
- if renamed_condition:
279
- _emit(
280
- warnings,
281
- f"Condition key `{condition_key}` was renamed to "
282
- f"`{renamed_condition}` in HA 2026.7 and the old key no "
283
- f"longer loads — use `condition: {renamed_condition}`.",
284
- skill_prefix,
285
- "triggers-and-conditions.md#native-conditions",
286
- )
287
252
  if cond.get("condition") == "template":
288
253
  vt = cond.get("value_template", "")
289
254
  if isinstance(vt, str):
@@ -690,10 +655,9 @@ def _check_triggers(
690
655
  ) -> None:
691
656
  """Check triggers for device_id and template anti-patterns.
692
657
 
693
- Per-trigger detection is split into focused helpers (renamed-key check,
694
- deprecated-behavior check, template-trigger check, numeric_state-trigger
695
- check) purely to keep this function's complexity low. They run in the
696
- same order as before.
658
+ Per-trigger detection is split into focused helpers (deprecated-behavior
659
+ check, template-trigger check, numeric_state-trigger check) purely to keep
660
+ this function's complexity low.
697
661
  """
698
662
  for trigger in _as_list(triggers):
699
663
  if not isinstance(trigger, dict):
@@ -701,7 +665,6 @@ def _check_triggers(
701
665
 
702
666
  platform = trigger.get("platform", trigger.get("trigger", ""))
703
667
 
704
- _check_renamed_trigger_key(platform, warnings, skill_prefix)
705
668
  _check_deprecated_trigger_behavior(trigger, warnings, skill_prefix)
706
669
 
707
670
  # Device trigger → prefer entity_id-based triggers
@@ -727,24 +690,6 @@ def _check_triggers(
727
690
  _check_numeric_state_trigger(trigger, warnings, skill_prefix)
728
691
 
729
692
 
730
- def _check_renamed_trigger_key(
731
- platform: Any, warnings: BestPracticeCheckResult, skill_prefix: str | None
732
- ) -> None:
733
- """Flag HA 2026.7 purpose-specific trigger key renames (old keys no longer load)."""
734
- renamed_trigger = (
735
- _RENAMED_TRIGGER_KEYS.get(platform) if isinstance(platform, str) else None
736
- )
737
- if renamed_trigger:
738
- _emit(
739
- warnings,
740
- f"Trigger key `{platform}` was renamed to `{renamed_trigger}` "
741
- "in HA 2026.7 and the old key no longer loads — use "
742
- f"`trigger: {renamed_trigger}`.",
743
- skill_prefix,
744
- "triggers-and-conditions.md#trigger-types",
745
- )
746
-
747
-
748
693
  def _check_deprecated_trigger_behavior(
749
694
  trigger: dict[str, Any], warnings: BestPracticeCheckResult, skill_prefix: str | None
750
695
  ) -> None: