ha-mcp-dev 9.1.0.dev3282__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.dev3282 → ha_mcp_dev-9.1.0.dev3289}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_manager.py +10 -23
  5. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/rest_client.py +86 -104
  6. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_client.py +2 -2
  7. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_tool_text.py +7 -7
  8. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/addon_connection_hints.py +23 -1
  9. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/auto_backup.py +6 -6
  10. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/automation_errors.py +206 -0
  11. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_checker.py +5 -60
  12. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_substitute.py +2 -2
  13. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_api.py +18 -8
  14. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/component_automation.py +92 -0
  15. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_reads.py +17 -9
  16. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_dashboard_edit.py +5 -2
  17. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_todo.py +21 -8
  18. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_identity.py +6 -6
  19. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/registry.py +4 -3
  20. ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/config_write_errors.py +96 -0
  21. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_write_helpers.py +57 -41
  22. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_edit_errors.py +29 -1
  23. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_removal.py +14 -4
  24. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helpers.py +17 -1
  25. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_logbook.py +16 -5
  26. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/reference_validator.py +111 -33
  27. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_addons.py +19 -27
  28. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_blueprints.py +1 -1
  29. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_automations.py +630 -859
  30. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_dashboards.py +2 -3
  31. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scripts.py +1 -1
  32. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_entities.py +8 -8
  33. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_service.py +1 -1
  34. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_hash.py +1 -2
  35. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/identifier_aliases.py +4 -4
  36. ha_mcp_dev-9.1.0.dev3282/src/ha_mcp/tools/config_write_errors.py +0 -185
  37. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/LICENSE +0 -0
  38. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/README.md +0 -0
  39. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__init__.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__main__.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_pypi_marker +0 -0
  42. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_rich_compat.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/__init__.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  45. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  46. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  47. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  48. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  102. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  103. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  105. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  106. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  107. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  108. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  109. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  110. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  111. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  112. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  113. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  114. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  115. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  117. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  119. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  121. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  123. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  125. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  126. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  129. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  130. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  132. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  134. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  136. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  138. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  149. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  211. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  214. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  217. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  221. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  223. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  234. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  279. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  282. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  284. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  285. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  287. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  289. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  290. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  291. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  294. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  296. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  302. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  303. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  304. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  305. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  306. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  307. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  308. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  309. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  310. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  311. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  312. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  313. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  314. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  315. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  316. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  317. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  318. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  326. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  327. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  328. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  329. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  339. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  342. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  345. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  349. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  351. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  362. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  432. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  433. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  434. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  435. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  436. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  437. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  438. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  439. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  440. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  441. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  442. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  443. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  444. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  445. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  446. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  447. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  448. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  449. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  450. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  451. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  452. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  453. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  454. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  455. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  456. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  457. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  458. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  459. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  460. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  466. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/requirements.txt +0 -0
  468. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  469. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  470. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  471. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  481. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  484. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  487. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  491. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  493. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  504. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_version.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/app_discovery.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/__init__.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/consent_form.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/iss_stamp.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/oidc_compat.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/provider.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_dashboards.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_diff.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entities.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entity_ids.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_helper_target.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_integrations.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_tags.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_todo.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_zones.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/browser_landing.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/__init__.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/admin_routes.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/error_log_journald.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/models.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/supervisor_client.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_listener.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_backup.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_meta.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_overrides.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_registry.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_settings.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/errors.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ha_request_queue.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  563. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/http_transport.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/image_info.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  566. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/listen_sockets.py +0 -0
  567. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/llm_exposure.py +0 -0
  568. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/log_filters.py +0 -0
  569. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/mcp_client_context.py +0 -0
  570. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/__init__.py +0 -0
  571. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/approval_queue.py +0 -0
  572. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decision_pin.py +0 -0
  573. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decisions.py +0 -0
  574. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/editing.py +0 -0
  575. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/evaluator.py +0 -0
  576. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/events.py +0 -0
  577. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/handlers.py +0 -0
  578. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/middleware.py +0 -0
  579. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/model.py +0 -0
  580. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/mrtr.py +0 -0
  581. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/persistence.py +0 -0
  582. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/server_channels.py +0 -0
  583. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/value_sources.py +0 -0
  584. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/py.typed +0 -0
  585. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/read_only.py +0 -0
  586. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/redaction.py +0 -0
  587. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/renamed_tools.py +0 -0
  588. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  589. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  590. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  591. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  592. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  593. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  594. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  595. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  596. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  597. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  598. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  599. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  600. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  601. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  602. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  603. {ha_mcp_dev-9.1.0.dev3282 → 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
  604. {ha_mcp_dev-9.1.0.dev3282 → 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
  605. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server.py +0 -0
  606. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_instructions.py +0 -0
  607. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_lifespan.py +0 -0
  608. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/__init__.py +0 -0
  609. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  610. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  611. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  612. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  613. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  614. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  615. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  616. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  617. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  618. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  619. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  620. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_theme.py +0 -0
  621. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  622. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  623. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  624. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  625. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  626. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  627. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  628. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  629. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  630. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  631. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  632. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  633. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  634. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  635. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  636. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  637. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  638. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  639. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.css +0 -0
  640. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.html +0 -0
  641. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  642. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  643. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  644. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  645. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  646. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  647. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  648. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  649. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  650. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  651. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/smoke_test.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/storage_helper_types.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/strict_bps.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tool_dispatch.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/__init__.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/area_messages.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_access.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_result.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_write.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_config.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bulk_selector.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/coercion.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_entries.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_devices.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registries.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/core_contract.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dev_backup.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_control.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_enrichment.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/energy_preferences.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_registration.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_backend.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_registration.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helper_flows.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/history_response.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_common.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/__init__.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/base.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/matter.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/thread.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/recorder_errors.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/registry.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/response_helpers.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/scene_discovery.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/__init__.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/base.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/component.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/entities.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/legacy.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/modes.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/overview.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/response.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/state.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/server_version.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_resets.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/system_restart.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_hints.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_areas.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_calendar.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_camera.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_categories.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_code.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dev.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_energy.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_groups.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_hacs.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_history.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_integrations.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_labels.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_logs.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_radio.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_registry.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_resources.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_search.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_services.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_system.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_themes.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_todo.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_traces.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_updates.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_utility.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_zones.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/update_categories.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/util_helpers.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/validation_middleware.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/ws_waiters.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/__init__.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/categorized_search.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/compact_params.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_helpers.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_search.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transport_security.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/update_check.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/__init__.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_write_lock.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/data_paths.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/domain_handlers.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/entity_membership.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/operation_manager.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/python_sandbox.py +0 -0
  822. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  823. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/skill_loader.py +0 -0
  824. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/usage_logger.py +0 -0
  825. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/__init__.py +0 -0
  826. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/config_files.py +0 -0
  827. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/enforcement.py +0 -0
  828. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/model.py +0 -0
  829. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/persistence.py +0 -0
  830. {ha_mcp_dev-9.1.0.dev3282 → 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.dev3282
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.dev3282"
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.dev3282"
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
@@ -108,11 +108,12 @@ from .backup_todo import fetch_todo_item, restore_todo_item
108
108
  from .backup_todo import snapshot_item as todo_snapshot_item
109
109
  from .backup_zones import fetch_zone, restore_zone
110
110
  from .client.rest_client import (
111
+ HomeAssistantAuthError,
111
112
  HomeAssistantCommandError,
112
113
  HomeAssistantConnectionError,
113
114
  HomeAssistantError,
114
115
  )
115
- from .errors import ErrorCode
116
+ from .errors import ErrorCode, get_error_code
116
117
  from .storage_helper_types import SIMPLE_HELPER_TYPES
117
118
  from .utils.data_paths import get_data_dir
118
119
  from .utils.registry_update_lock import registry_update_lock
@@ -2021,9 +2022,8 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
2021
2022
  client.base_url, client.token, verify_ssl=client.verify_ssl
2022
2023
  )
2023
2024
  if error or ws_client is None:
2024
- # ``error`` is a structured-error envelope; the message can live
2025
- # under either error.error.message (nested) or error.message
2026
- # (flat, as ``create_error_response`` actually produces).
2025
+ # ``error`` is get_connected_ws_client's nested envelope; the flat
2026
+ # ``error["message"]`` read is a defensive fallback.
2027
2027
  if isinstance(error, dict):
2028
2028
  err_obj = error.get("error", error)
2029
2029
  msg = (
@@ -2031,11 +2031,10 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
2031
2031
  ) or error.get("message", "WS connect failed")
2032
2032
  else:
2033
2033
  msg = "WS connect failed"
2034
- # Typed connection error so the outer ``_CAPTURE_TRANSIENT_ERRORS``
2035
- # tuple catches it; a bare ``RuntimeError`` would propagate past
2036
- # ``maybe_snapshot``'s catch and break the wrapped write — exactly
2037
- # what the best-effort contract on the decorator forbids.
2038
- raise HomeAssistantConnectionError(msg)
2034
+ # Typed so ``_CAPTURE_TRANSIENT_ERRORS`` catches it (a bare ``RuntimeError``
2035
+ # would break the best-effort write); a rejected token reports AUTH_*.
2036
+ auth = str(get_error_code(error or {})).startswith("AUTH_")
2037
+ raise (HomeAssistantAuthError if auth else HomeAssistantConnectionError)(msg)
2039
2038
  try:
2040
2039
  cmd_type = message.pop("type")
2041
2040
  envelope = await ws_client.send_command(cmd_type, **message)
@@ -2071,25 +2070,13 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
2071
2070
 
2072
2071
 
2073
2072
  async def _fetch_automation(client: Any, entity_id: str) -> Any:
2074
- """Fetch an automation through the same path the get tool uses.
2075
-
2076
- Applies ``_normalize_config_for_roundtrip`` so the snapshot matches
2077
- what ``ha_config_get_automation`` returns and round-trips cleanly
2078
- back through ``ha_config_set_automation`` on restore. Imported lazily
2079
- to keep the manager import-cycle-free.
2080
- """
2081
- # Lazy import to avoid backup_manager → tools → backup_manager cycle.
2082
- from .tools.tools_config_automations import _normalize_config_for_roundtrip
2083
-
2073
+ """Fetch the stored body verbatim."""
2084
2074
  try:
2085
- raw = await client.get_automation_config(entity_id)
2075
+ return await client.get_automation_config(entity_id)
2086
2076
  except HomeAssistantError as err:
2087
2077
  if getattr(err, "status_code", None) == 404:
2088
2078
  return None
2089
2079
  raise
2090
- if not isinstance(raw, dict):
2091
- return raw
2092
- return _normalize_config_for_roundtrip(raw)
2093
2080
 
2094
2081
 
2095
2082
  async def _restore_automation(client: Any, entity_id: str, config: Any) -> Any:
@@ -90,16 +90,17 @@ class HomeAssistantConnectionError(HomeAssistantError):
90
90
  class HomeAssistantCommandNotSent(HomeAssistantConnectionError):
91
91
  """A WS command that provably never left the process.
92
92
 
93
- Raised by ``HomeAssistantWebSocketClient.send_command`` ONLY at its single
94
- provably-never-sent site: the entry-guard reject (socket not authenticated), where
95
- nothing is transmitted. Subclass of ``HomeAssistantConnectionError`` so every
96
- existing broad handler is unaffected, yet a write consumer can catch this type
97
- FIRST to fall back to the legacy path safely — the write provably never happened,
98
- so a legacy first fire cannot double-apply. A ``send_json_message`` failure is NOT
99
- this type: ``websocket.send()`` raising does not prove the frame was untransmitted
100
- (bytes may already be on the socket when the close surfaces), so send_command
101
- re-raises the original exception and the consumer treats it as ambiguous. A
102
- post-send socket close (mid-await) likewise raises a plain
93
+ Raised by ``HomeAssistantWebSocketClient.send_command``'s entry guard (socket not
94
+ authenticated) and by ``send_websocket_message`` when no attempt obtained a client
95
+ (raised from the acquisition error, so a rejected token survives as ``__cause__``).
96
+ A subclass of ``HomeAssistantConnectionError``, so broad handlers are unaffected,
97
+ yet a write consumer can catch it FIRST: the write provably never happened, so a
98
+ legacy first fire cannot double-apply. Check ``__cause__`` before such a fallback:
99
+ resending a rejected token over REST adds a 401 toward Home Assistant's IP ban. A
100
+ ``send_json_message`` failure is NOT this type: ``websocket.send()`` raising does
101
+ not prove the frame was untransmitted (bytes may already be on the socket when the
102
+ close surfaces), so send_command re-raises the original exception and the consumer
103
+ treats it as ambiguous. A post-send socket close (mid-await) likewise raises a plain
103
104
  ``HomeAssistantConnectionError`` (the close handler sets it on the pending future),
104
105
  so type alone distinguishes never-sent from sent-then-dropped/ambiguous.
105
106
  """
@@ -1376,40 +1377,44 @@ class HomeAssistantClient:
1376
1377
  # Automation Configuration Management
1377
1378
 
1378
1379
  async def _resolve_automation_id(self, identifier: str) -> str:
1379
- """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).
1380
1381
 
1381
- Args:
1382
- identifier: Either entity_id (automation.xxx) or unique_id
1383
-
1384
- Returns:
1385
- 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``.
1386
1385
 
1387
1386
  Raises:
1388
1387
  HomeAssistantAPIError: 404 if not found; other read failures propagate
1389
1388
  """
1390
- if identifier.startswith("automation."):
1391
- try:
1392
- state = await self.get_entity_state(identifier)
1393
- unique_id = state.get("attributes", {}).get("id")
1394
- if not unique_id:
1395
- raise HomeAssistantAPIError(
1396
- f"Automation {identifier} has no unique_id attribute",
1397
- status_code=404,
1398
- )
1399
- logger.debug(
1400
- f"Converted entity_id {identifier} to unique_id {unique_id}"
1401
- )
1402
- return str(unique_id)
1403
- except HomeAssistantAPIError as e:
1404
- if e.status_code != 404: # a failed read is not a missing one
1405
- raise
1406
- raise HomeAssistantAPIError(
1407
- f"Failed to resolve automation {identifier}: {str(e)}",
1408
- status_code=404,
1409
- ) from e
1410
- else:
1411
- # Assume it's already a unique_id
1389
+ if not identifier.startswith("automation."):
1412
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)
1413
1418
 
1414
1419
  async def get_automation_config(self, identifier: str) -> dict[str, Any]:
1415
1420
  """Get automation configuration by unique_id or entity_id.
@@ -1445,19 +1450,19 @@ class HomeAssistantClient:
1445
1450
  identifier: str | None = None,
1446
1451
  *,
1447
1452
  _resolved: bool = False,
1453
+ wait_for_entity: bool = False,
1448
1454
  ) -> dict[str, Any]:
1449
1455
  """
1450
1456
  Create new automation or update existing one.
1451
1457
 
1452
1458
  Args:
1453
- config: Automation configuration dictionary
1454
- identifier: Optional automation entity_id or unique_id (None = create new)
1455
- _resolved: When True, ``identifier`` is already the resolved unique_id
1456
- (the caller ran ``_resolve_automation_id``), so the redundant
1457
- entity_id→unique_id lookup is skipped. Ignored on the create path
1458
- (``identifier is None``). The #1404 config-id mismatch guard below
1459
- is unaffected — it still compares ``config['id']`` to the resolved
1460
- 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``.
1461
1466
 
1462
1467
  Returns:
1463
1468
  Result with automation unique_id and status
@@ -1465,19 +1470,14 @@ class HomeAssistantClient:
1465
1470
  Raises:
1466
1471
  HomeAssistantAPIError: If configuration invalid or API error
1467
1472
  """
1468
- # Generate unique_id for new automation if not provided
1469
1473
  if identifier is None:
1470
1474
  unique_id = str(int(time.time() * 1000))
1471
- operation = "created"
1472
- logger.debug(f"Creating new automation with unique_id: {unique_id}")
1473
1475
  else:
1474
1476
  unique_id = (
1475
1477
  identifier
1476
1478
  if _resolved
1477
1479
  else await self._resolve_automation_id(identifier)
1478
1480
  )
1479
- operation = "updated"
1480
- logger.debug(f"Updating automation with unique_id: {unique_id}")
1481
1481
 
1482
1482
  # Reject mismatch between resolved storage key and inner ``config["id"]``.
1483
1483
  # HA stores by the inner id field even though the URL carries one too —
@@ -1490,20 +1490,20 @@ class HomeAssistantClient:
1490
1490
  "Cannot create automation with explicit config['id']="
1491
1491
  f"{config_id!r}: Home Assistant stores by the inner id, "
1492
1492
  "which would silently overwrite an existing automation. "
1493
- "Omit 'id' from config to auto-generate, or pass identifier "
1493
+ "Omit 'id' from config to auto-generate, or pass entity_id "
1494
1494
  "to update an existing automation.",
1495
1495
  status_code=400,
1496
1496
  )
1497
1497
  raise HomeAssistantAPIError(
1498
- f"Mismatched automation id: identifier={identifier!r} resolves "
1499
- 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}. "
1500
1500
  "Refusing to write to prevent overwriting the wrong automation. "
1501
- 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 "
1502
1502
  f"({unique_id!r}).",
1503
1503
  status_code=400,
1504
1504
  )
1505
1505
 
1506
- # Add unique_id to config for updates
1506
+ # Core stores by the body's id, so it carries the target's.
1507
1507
  if unique_id and "id" not in config:
1508
1508
  config = {**config, "id": unique_id}
1509
1509
 
@@ -1512,10 +1512,9 @@ class HomeAssistantClient:
1512
1512
  "POST", f"/config/automation/config/{unique_id}", json=config
1513
1513
  )
1514
1514
 
1515
- # For new automations, query Home Assistant to get the actual entity_id that was assigned
1516
1515
  actual_entity_id = None
1517
1516
  entity_not_verified = False
1518
- if operation == "created":
1517
+ if wait_for_entity:
1519
1518
  actual_entity_id = await self._poll_for_automation_entity(unique_id)
1520
1519
  if not actual_entity_id:
1521
1520
  entity_not_verified = True
@@ -1524,7 +1523,6 @@ class HomeAssistantClient:
1524
1523
  "unique_id": unique_id,
1525
1524
  "entity_id": actual_entity_id,
1526
1525
  "result": response.get("result", "ok"),
1527
- "operation": operation,
1528
1526
  }
1529
1527
  if entity_not_verified:
1530
1528
  result["entity_not_verified"] = True
@@ -1532,7 +1530,9 @@ class HomeAssistantClient:
1532
1530
  except HomeAssistantAPIError as e:
1533
1531
  if e.status_code == 400:
1534
1532
  raise HomeAssistantAPIError(
1535
- 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,
1536
1536
  ) from e
1537
1537
  raise
1538
1538
 
@@ -1609,27 +1609,11 @@ class HomeAssistantClient:
1609
1609
  "operation": "deleted",
1610
1610
  }
1611
1611
  except HomeAssistantAPIError as e:
1612
- if e.status_code == 404:
1613
- raise HomeAssistantAPIError(
1614
- f"Automation not found: {identifier} (unique_id: {unique_id})",
1615
- status_code=404,
1616
- ) from e
1617
- elif e.status_code == 405:
1618
- raise HomeAssistantAPIError(
1619
- f"Cannot delete automation '{identifier}': The HTTP DELETE method is blocked. "
1620
- f"This typically occurs when running ha-mcp as a Home Assistant add-on, because "
1621
- f"the Supervisor ingress proxy only allows GET and POST requests. "
1622
- f"WORKAROUNDS: "
1623
- f"(1) Use ha-mcp via pip, Docker, or as an external MCP server instead of the add-on. "
1624
- f"(2) Use a long-lived access token to connect directly to Home Assistant's API. "
1625
- f"(3) As a fallback, disable the automation and rename it with a 'DELETE_' prefix "
1626
- f"(e.g., 'DELETE_{identifier}') so you can identify and manually delete it later "
1627
- f"via the Home Assistant UI (Settings > Automations & Scenes).",
1628
- status_code=405,
1629
- ) from e
1630
- raise
1631
- except Exception as e:
1632
- 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
+ ):
1633
1617
  raise HomeAssistantAPIError(
1634
1618
  f"Automation not found: {identifier} (unique_id: {unique_id})",
1635
1619
  status_code=404,
@@ -1955,12 +1939,11 @@ class HomeAssistantClient:
1955
1939
 
1956
1940
  max_retries = 2
1957
1941
  retry_delay = 0.5 # seconds
1942
+ # Whether an earlier attempt got past acquisition, so may have sent.
1943
+ sent_before = False
1958
1944
 
1959
1945
  for attempt in range(max_retries):
1960
1946
  # Whether the failure happened before a usable connection existed.
1961
- # Failing to obtain one is transport death whatever class the
1962
- # manager raises; an auth failure or the pool-lock guard's bare
1963
- # ``Exception`` is not a connection error; type cannot decide this.
1964
1947
  acquiring = True
1965
1948
  try:
1966
1949
  # Use per-client WebSocket keyed to this client's credentials
@@ -1996,34 +1979,33 @@ class HomeAssistantClient:
1996
1979
  f"retrying after {retry_delay}s: {error_str}"
1997
1980
  )
1998
1981
  await asyncio.sleep(retry_delay)
1982
+ sent_before = sent_before or not acquiring
1999
1983
  continue
2000
1984
 
2001
1985
  # Phase first, type second. Failing before a client exists is
2002
- # evidence about the transport whatever class was raised; an
2003
- # auth failure or the pool-lock guard's bare ``Exception`` is not
2004
- # a no-answer class, so that case cannot be decided by type.
2005
- # Past acquisition only the no-answer classes count:
2006
- # ``send_command`` deliberately re-raises the original
2007
- # ``ConnectionClosed`` / ``ConnectionResetError`` from the send
2008
- # rather than wrapping it, to keep at-most-once semantics for
2009
- # write callers, so those arrive here untranslated. Anything
2010
- # else (a ``ValueError`` from building the message, say) is a
2011
- # bug rather than evidence about the connection.
1986
+ # transport evidence whatever was raised: an auth failure or the
1987
+ # pool-lock guard's bare ``Exception`` is no no-answer class.
1988
+ # Past acquisition only those classes count (``send_command``
1989
+ # re-raises the original ``ConnectionClosed`` /
1990
+ # ``ConnectionResetError`` to keep writes at-most-once); anything
1991
+ # else is Home Assistant's own answer or a local bug.
2012
1992
  if acquiring or isinstance(e, _NO_ANSWER_ERRORS):
2013
1993
  # One error channel for "no answer came back" (#1947): the
2014
- # caller decides the policy, rather than every consumer
2015
- # having to notice a marker on an otherwise ordinary
2016
- # failure envelope. Callers that legitimately continue on a
2017
- # missing answer catch this and say in ``warnings`` what
2018
- # they skipped; callers whose output would read as a
2019
- # negative finding let it propagate.
1994
+ # caller decides the policy. Callers that legitimately continue
1995
+ # on a missing answer catch this and say in ``warnings`` what
1996
+ # they skipped; callers whose output would read as a negative
1997
+ # finding let it propagate.
2020
1998
  logger.error(
2021
1999
  f"WebSocket transport failed ({message.get('type')}): {e}"
2022
2000
  )
2023
- if isinstance(e, HomeAssistantConnectionError):
2024
- # Already the right class — re-raise unchanged so
2025
- # subtypes (``HomeAssistantCommandNotSent``) and the
2026
- # original traceback survive.
2001
+ if acquiring and not sent_before:
2002
+ # No attempt obtained a client, so nothing was sent.
2003
+ raise HomeAssistantCommandNotSent(error_str) from e
2004
+ if isinstance(e, HomeAssistantConnectionError) and not (
2005
+ sent_before and isinstance(e, HomeAssistantCommandNotSent)
2006
+ ):
2007
+ # Re-raised unchanged so subtypes and the traceback
2008
+ # survive; not "never sent" once an attempt may have sent.
2027
2009
  raise
2028
2010
  raise HomeAssistantConnectionError(error_str) from e
2029
2011
 
@@ -764,8 +764,8 @@ class HomeAssistantWebSocketClient:
764
764
  Response from Home Assistant
765
765
  """
766
766
  if not self._state.is_ready:
767
- # PRE-SEND and the ONLY provably-never-sent site: nothing is transmitted at
768
- # this entry guard. Raise the never-sent subtype so an at-most-once write
767
+ # PRE-SEND and send_command's only provably-never-sent site: nothing is
768
+ # transmitted here. Raise the never-sent subtype so an at-most-once write
769
769
  # consumer can fall back to legacy safely (a subclass of
770
770
  # HomeAssistantConnectionError, so every existing broad handler is
771
771
  # unaffected). A later send() failure is NOT never-sent (see below).
@@ -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."
@@ -1,7 +1,29 @@
1
- """Connection-failure guidance shared by app HTTP and WebSocket proxies."""
1
+ """Failure guidance for Supervisor calls and the app HTTP and WebSocket proxies."""
2
+
3
+ from typing import Any
2
4
 
3
5
  from .._version import is_running_in_addon
4
6
  from ..client.rest_client import HomeAssistantClient
7
+ from ..errors import ErrorCode
8
+
9
+ _SUPERVISOR_AVAILABILITY_SUGGESTION = (
10
+ "Check Home Assistant connection and Supervisor availability"
11
+ )
12
+ _APP_SUPPORT_SUGGESTION = "Check that this installation supports apps (add-ons)."
13
+
14
+
15
+ def add_supervisor_error_suggestions(error_details: dict[str, Any]) -> None:
16
+ """Add Supervisor guidance to a failed call's error; a refused token says
17
+ nothing about app support, so it gets none."""
18
+ code = str(error_details.get("code", ""))
19
+ if code == ErrorCode.RESOURCE_NOT_FOUND.value:
20
+ error_details["suggestion"] = _SUPERVISOR_AVAILABILITY_SUGGESTION
21
+ error_details["suggestions"] = [_SUPERVISOR_AVAILABILITY_SUGGESTION]
22
+ if not code.startswith("AUTH_"):
23
+ error_details["suggestions"] = [
24
+ *error_details.get("suggestions", []),
25
+ _APP_SUPPORT_SUGGESTION,
26
+ ]
5
27
 
6
28
 
7
29
  def addon_connection_failure_suggestions(
@@ -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(