ha-mcp-dev 9.1.0.dev3282__tar.gz → 9.1.0.dev3285__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 (827) hide show
  1. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_manager.py +8 -9
  5. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/rest_client.py +32 -33
  6. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/websocket_client.py +2 -2
  7. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/addon_connection_hints.py +23 -1
  8. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_api.py +18 -8
  9. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_dashboard_edit.py +5 -2
  10. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_todo.py +21 -8
  11. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_identity.py +6 -6
  12. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/registry.py +4 -3
  13. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_edit_errors.py +29 -1
  14. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_removal.py +14 -4
  15. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/helpers.py +17 -1
  16. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_logbook.py +16 -5
  17. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_addons.py +19 -27
  18. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_dashboards.py +2 -3
  19. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_entities.py +3 -3
  20. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/LICENSE +0 -0
  21. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/README.md +0 -0
  22. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/__init__.py +0 -0
  23. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/__main__.py +0 -0
  24. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_pypi_marker +0 -0
  25. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_rich_compat.py +0 -0
  26. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/__init__.py +0 -0
  27. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  28. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  29. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  30. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  31. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  32. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  33. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  34. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  35. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  36. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  37. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  38. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  39. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  42. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  45. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  46. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  47. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  48. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  102. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  103. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  105. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  106. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  107. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  108. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  109. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  110. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  111. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  112. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  113. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  114. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  115. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  117. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  119. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  121. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  123. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  125. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  126. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  129. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  130. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  132. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  134. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  136. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  138. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  149. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  211. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  214. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  217. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  221. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  223. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  234. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  279. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  282. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  284. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  285. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  287. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  289. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  290. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  291. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  294. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  296. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  302. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  303. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  304. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  305. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  306. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  307. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  308. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  309. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  310. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  311. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  312. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  313. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  314. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  315. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  316. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  317. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  318. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  326. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  327. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  328. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  329. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  339. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  342. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  345. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  349. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  351. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  362. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  432. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  433. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  434. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  435. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  436. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  437. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  438. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  439. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  440. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  441. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  442. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  443. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  444. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  445. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  446. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  447. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  448. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  449. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  450. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/requirements.txt +0 -0
  451. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  452. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  453. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  454. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  455. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  456. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  457. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  458. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  459. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  460. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  466. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  468. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  469. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  470. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  471. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  481. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  484. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  487. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  491. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  493. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  504. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_version.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/app_discovery.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/__init__.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/consent_form.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/iss_stamp.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/oidc_compat.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/provider.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_dashboards.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_diff.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_entities.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_entity_ids.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_helper_target.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_integrations.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_tags.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_todo.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_zones.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/browser_landing.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/__init__.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/admin_routes.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/error_log_journald.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/models.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/supervisor_client.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/websocket_listener.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_backup.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_meta.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_overrides.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_registry.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_settings.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/errors.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/ha_request_queue.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/http_transport.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/image_info.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/listen_sockets.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/llm_exposure.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/log_filters.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/mcp_client_context.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/__init__.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/approval_queue.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/decision_pin.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/decisions.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/editing.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/evaluator.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/events.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/handlers.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/middleware.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/model.py +0 -0
  563. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/mrtr.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/persistence.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/server_channels.py +0 -0
  566. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/value_sources.py +0 -0
  567. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/py.typed +0 -0
  568. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/read_only.py +0 -0
  569. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/redaction.py +0 -0
  570. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/renamed_tools.py +0 -0
  571. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  572. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  573. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  574. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  575. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  576. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  577. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  578. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  579. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  580. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  581. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  582. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  583. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  584. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  585. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  586. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  587. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  588. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server.py +0 -0
  589. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_instructions.py +0 -0
  590. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_lifespan.py +0 -0
  591. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_tool_text.py +0 -0
  592. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/__init__.py +0 -0
  593. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  594. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  595. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  596. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  597. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  598. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  599. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  600. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  601. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  602. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  603. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  604. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_theme.py +0 -0
  605. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  606. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  607. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  608. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  609. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  610. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  611. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  612. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  613. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  614. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  615. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  616. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  617. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  618. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  619. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  620. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  621. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  622. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  623. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings.css +0 -0
  624. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings.html +0 -0
  625. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  626. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  627. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  628. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  629. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  630. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  631. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  632. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  633. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  634. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  635. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/smoke_test.py +0 -0
  636. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  637. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/storage_helper_types.py +0 -0
  638. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/strict_bps.py +0 -0
  639. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tool_dispatch.py +0 -0
  640. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/__init__.py +0 -0
  641. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/area_messages.py +0 -0
  642. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/auto_backup.py +0 -0
  643. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup.py +0 -0
  644. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_access.py +0 -0
  645. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  646. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  647. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  648. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  649. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_result.py +0 -0
  650. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  651. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_write.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_config.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bulk_selector.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/coercion.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_config_entries.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_config_reads.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_devices.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_registries.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_write_errors.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/core_contract.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dev_backup.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/device_control.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/device_enrichment.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/energy_preferences.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_registration.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/hacs_backend.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/hacs_registration.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/helper_flows.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/history_response.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_common.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/__init__.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/base.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/matter.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/thread.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zwave.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/recorder_errors.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/reference_validator.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/registry.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/response_helpers.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/scene_discovery.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/__init__.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/base.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/component.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/entities.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/legacy.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/modes.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/overview.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/response.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/state.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/server_version.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_resets.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/system_restart.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tool_hints.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_areas.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_calendar.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_camera.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_categories.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_code.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_dev.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_energy.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_groups.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_hacs.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_history.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_integrations.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_labels.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_logs.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_radio.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_registry.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_resources.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_search.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_service.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_services.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_system.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_themes.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_todo.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_traces.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_updates.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_utility.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_zones.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/update_categories.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/util_helpers.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/validation_middleware.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/ws_waiters.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/__init__.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/categorized_search.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/compact_params.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/component_helpers.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/component_search.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transport_security.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/update_check.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/__init__.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/config_hash.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/config_write_lock.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/data_paths.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/domain_handlers.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/entity_membership.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/operation_manager.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/python_sandbox.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/skill_loader.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/usage_logger.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/__init__.py +0 -0
  822. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/config_files.py +0 -0
  823. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/enforcement.py +0 -0
  824. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  825. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/model.py +0 -0
  826. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/persistence.py +0 -0
  827. {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/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.dev3285
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.dev3285"
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.dev3285"
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)
@@ -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
  """
@@ -1955,12 +1956,11 @@ class HomeAssistantClient:
1955
1956
 
1956
1957
  max_retries = 2
1957
1958
  retry_delay = 0.5 # seconds
1959
+ # Whether an earlier attempt got past acquisition, so may have sent.
1960
+ sent_before = False
1958
1961
 
1959
1962
  for attempt in range(max_retries):
1960
1963
  # 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
1964
  acquiring = True
1965
1965
  try:
1966
1966
  # Use per-client WebSocket keyed to this client's credentials
@@ -1996,34 +1996,33 @@ class HomeAssistantClient:
1996
1996
  f"retrying after {retry_delay}s: {error_str}"
1997
1997
  )
1998
1998
  await asyncio.sleep(retry_delay)
1999
+ sent_before = sent_before or not acquiring
1999
2000
  continue
2000
2001
 
2001
2002
  # 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.
2003
+ # transport evidence whatever was raised: an auth failure or the
2004
+ # pool-lock guard's bare ``Exception`` is no no-answer class.
2005
+ # Past acquisition only those classes count (``send_command``
2006
+ # re-raises the original ``ConnectionClosed`` /
2007
+ # ``ConnectionResetError`` to keep writes at-most-once); anything
2008
+ # else is Home Assistant's own answer or a local bug.
2012
2009
  if acquiring or isinstance(e, _NO_ANSWER_ERRORS):
2013
2010
  # 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.
2011
+ # caller decides the policy. Callers that legitimately continue
2012
+ # on a missing answer catch this and say in ``warnings`` what
2013
+ # they skipped; callers whose output would read as a negative
2014
+ # finding let it propagate.
2020
2015
  logger.error(
2021
2016
  f"WebSocket transport failed ({message.get('type')}): {e}"
2022
2017
  )
2023
- if isinstance(e, HomeAssistantConnectionError):
2024
- # Already the right class — re-raise unchanged so
2025
- # subtypes (``HomeAssistantCommandNotSent``) and the
2026
- # original traceback survive.
2018
+ if acquiring and not sent_before:
2019
+ # No attempt obtained a client, so nothing was sent.
2020
+ raise HomeAssistantCommandNotSent(error_str) from e
2021
+ if isinstance(e, HomeAssistantConnectionError) and not (
2022
+ sent_before and isinstance(e, HomeAssistantCommandNotSent)
2023
+ ):
2024
+ # Re-raised unchanged so subtypes and the traceback
2025
+ # survive; not "never sent" once an attempt may have sent.
2027
2026
  raise
2028
2027
  raise HomeAssistantConnectionError(error_str) from e
2029
2028
 
@@ -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).
@@ -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(
@@ -158,11 +158,20 @@ class ComponentDiscoveryError(RuntimeError):
158
158
 
159
159
 
160
160
  def _checked_caps(
161
- client: Any, caps: ComponentCaps | None, strict: bool
161
+ client: Any,
162
+ caps: ComponentCaps | None,
163
+ strict: bool,
164
+ *,
165
+ cause: Exception | None = None,
162
166
  ) -> ComponentCaps | None:
163
- """Keep read fallbacks while exposing failed discovery to write callers."""
167
+ """Keep read fallbacks while exposing failed discovery to write callers.
168
+
169
+ ``cause`` is the exception that failed this call's own probe; a strict caller
170
+ gets it as ``__cause__``. A failure cached by an earlier call gets no cause:
171
+ the OAuth proxy client is one cache key for every user's token.
172
+ """
164
173
  if strict and (failure := _PROBE_FAILURES.get(client)):
165
- raise ComponentDiscoveryError(failure)
174
+ raise ComponentDiscoveryError(failure) from cause
166
175
  return caps
167
176
 
168
177
 
@@ -282,6 +291,7 @@ async def get_component_caps(
282
291
 
283
292
  With ``strict=True``, failed or malformed discovery raises
284
293
  ``ComponentDiscoveryError``, including failures cached by earlier read tools.
294
+ When this call's own probe failed, its exception is the ``__cause__``.
285
295
  A definitive unknown command, unsupported schema, or valid capability list
286
296
  without the requested command still permits legacy routing. The default
287
297
  retains best-effort read behavior. Inconclusive failures expire after 30
@@ -342,8 +352,8 @@ async def get_component_caps(
342
352
  else:
343
353
  _store_transient_negative(client)
344
354
  _PROBE_FAILURES[client] = f"{INFO_COMMAND} failed: {exc}"
345
- return _checked_caps(client, None, strict)
346
- except (HomeAssistantConnectionError, HomeAssistantCommandTimeout):
355
+ return _checked_caps(client, None, strict, cause=exc)
356
+ except (HomeAssistantConnectionError, HomeAssistantCommandTimeout) as exc:
347
357
  logger.debug(
348
358
  "%s probe skipped: WS unavailable", INFO_COMMAND, exc_info=True
349
359
  )
@@ -351,14 +361,14 @@ async def get_component_caps(
351
361
  _PROBE_FAILURES[client] = (
352
362
  f"{INFO_COMMAND} probe could not reach Home Assistant"
353
363
  )
354
- return _checked_caps(client, None, strict)
355
- except Exception:
364
+ return _checked_caps(client, None, strict, cause=exc)
365
+ except Exception as exc:
356
366
  # Read callers retain best-effort fallback; strict write callers
357
367
  # must not confuse an unexpected fault with capability absence.
358
368
  logger.debug("%s probe failed unexpectedly", INFO_COMMAND, exc_info=True)
359
369
  _store_transient_negative(client)
360
370
  _PROBE_FAILURES[client] = f"{INFO_COMMAND} probe failed unexpectedly"
361
- return _checked_caps(client, None, strict)
371
+ return _checked_caps(client, None, strict, cause=exc)
362
372
 
363
373
  caps = _parse_caps(response)
364
374
  if caps is not None and caps.schema_version != SUPPORTED_SCHEMA_VERSION:
@@ -14,7 +14,10 @@ from .component_api import (
14
14
  invalidate_caps,
15
15
  is_unknown_command,
16
16
  )
17
- from .dashboard_edit_errors import raise_dashboard_edit_error
17
+ from .dashboard_edit_errors import (
18
+ raise_dashboard_edit_error,
19
+ raise_dashboard_edit_unsent,
20
+ )
18
21
 
19
22
  WS_DASHBOARD_EDIT = "ha_mcp_tools/dashboard_edit"
20
23
  _LOGGER = logging.getLogger(__name__)
@@ -148,7 +151,7 @@ async def edit_dashboard_via_component(
148
151
  _LOGGER.warning(
149
152
  "Unable to prepare the dashboard edit connection", exc_info=True
150
153
  )
151
- raise_dashboard_edit_error(url_path, "load_failed", str(exc), False, action)
154
+ raise_dashboard_edit_unsent(exc, url_path, action, "load_failed")
152
155
 
153
156
  kwargs: dict[str, Any] = {"url_path": url_path}
154
157
  if expected_hash is not None:
@@ -5,24 +5,30 @@ todo services and reads the stored rows back from the list entity.
5
5
  ``todo_item`` returns ``None`` when the component did not run the action, so
6
6
  the caller uses Core's WebSocket commands instead: the capability is absent,
7
7
  the command was not sent, Core answered ``unknown_command``, or the component
8
- lacks Core's todo parts. A reply with ``success: False`` is the component's
9
- refusal: a check before the write, or Core's schema or validation error after
10
- which the list's rows were unchanged. The one exception is ``move_failed``: the
11
- update was applied and the move after it failed, as its message says.
8
+ lacks Core's todo parts. A command not sent because the token was rejected
9
+ raises instead, since those commands would resend the token. A reply with
10
+ ``success: False`` is the component's refusal: a check before the write, or
11
+ Core's schema or validation error after which the list's rows were unchanged.
12
+ The one exception is ``move_failed``: the update was applied and the move
13
+ after it failed, as its message says.
12
14
  """
13
15
 
14
16
  from __future__ import annotations
15
17
 
16
18
  from typing import Any
17
19
 
18
- from ..client.rest_client import HomeAssistantCommandNotSent, HomeAssistantError
20
+ from ..client.rest_client import (
21
+ HomeAssistantAuthError,
22
+ HomeAssistantCommandNotSent,
23
+ HomeAssistantError,
24
+ )
19
25
  from ..errors import ErrorCode, create_error_response
20
26
  from .component_api import (
21
27
  component_supports,
22
28
  get_component_caps,
23
29
  invalidate_caps,
24
30
  )
25
- from .helpers import raise_tool_error
31
+ from .helpers import exception_to_structured_error, raise_tool_error
26
32
 
27
33
  WS_TODO_ITEM = "ha_mcp_tools/todo_item"
28
34
  CAPABILITY = "todo_item"
@@ -44,14 +50,18 @@ async def todo_item(
44
50
  """The component's reply to one action on ``entity_id``; None when it did
45
51
  not run it. A sent command that got no answer, or that the component
46
52
  failed to answer, raises ``HomeAssistantError``: a write's outcome is then
47
- unknown."""
53
+ unknown. A command not sent because the token was rejected raises
54
+ ``HomeAssistantCommandNotSent``."""
48
55
  if not component_supports(await get_component_caps(client), CAPABILITY):
49
56
  return None
50
57
  try:
51
58
  result = await client.send_websocket_message(
52
59
  {"type": WS_TODO_ITEM, "entity_id": entity_id, "action": action, **fields}
53
60
  )
54
- except HomeAssistantCommandNotSent:
61
+ except HomeAssistantCommandNotSent as exc:
62
+ if isinstance(exc.__cause__, HomeAssistantAuthError):
63
+ # Core's WebSocket commands would resend the rejected token.
64
+ raise
55
65
  return None
56
66
  if not result.get("success"):
57
67
  if result.get("error_code") == "unknown_command":
@@ -73,6 +83,9 @@ async def todo_call(
73
83
  sent without an answer is reported as unknown."""
74
84
  try:
75
85
  reply = await todo_item(client, entity_id, action, **fields)
86
+ except HomeAssistantCommandNotSent as e:
87
+ # Nothing was sent, so the outcome is known.
88
+ exception_to_structured_error(e, context={"entity_id": entity_id})
76
89
  except HomeAssistantError as e:
77
90
  if action == "resolve":
78
91
  raise
@@ -319,12 +319,12 @@ async def _registry_rows(
319
319
  type(err).__name__,
320
320
  err,
321
321
  )
322
- raise (
323
- err
324
- if isinstance(err, HomeAssistantConnectionError)
325
- else HomeAssistantConnectionError(
326
- f"{method_name} transport unavailable for {entry_id}"
327
- )
322
+ if isinstance(err, HomeAssistantConnectionError):
323
+ # Re-raised as is: chaining it to itself would drop its cause, such
324
+ # as the auth error behind a token rejected on reconnect.
325
+ raise
326
+ raise HomeAssistantConnectionError(
327
+ f"{method_name} transport unavailable for {entry_id}"
328
328
  ) from err
329
329
  if not isinstance(result, list) or any(not isinstance(row, dict) for row in result):
330
330
  raise HomeAssistantAPIError(
@@ -243,9 +243,10 @@ def _apply_registry_check(
243
243
  if fail_closed and not ok:
244
244
  if exc is not None:
245
245
  # The transport wrap re-raises acquisition failures as
246
- # HomeAssistantConnectionError ``from`` the original exception
247
- # (phase-before-type, pinned by
248
- # test_failure_to_acquire_a_client_raises), so an auth rejection
246
+ # HomeAssistantCommandNotSent (a plain HomeAssistantConnectionError
247
+ # once an earlier attempt obtained a client) ``from`` the original
248
+ # exception (phase-before-type, pinned by
249
+ # test_failure_to_acquire_a_client_is_not_sent), so an auth rejection
249
250
  # during connect survives only in the ``__cause__`` chain —
250
251
  # discriminate on it the same way the envelope branch below
251
252
  # discriminates on ``error_code``.
@@ -7,9 +7,14 @@ from typing import Any, NoReturn
7
7
 
8
8
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
9
9
 
10
+ from ..client.rest_client import HomeAssistantAuthError
10
11
  from ..errors import ErrorCode, create_error_response, get_error_code, get_error_message
11
12
  from .dashboard_read_errors import CONFIG_NOT_FOUND_CODE
12
- from .helpers import extract_tool_error_message, raise_tool_error
13
+ from .helpers import (
14
+ exception_to_structured_error,
15
+ extract_tool_error_message,
16
+ raise_tool_error,
17
+ )
13
18
 
14
19
  _MODE_SUGGESTIONS = [
15
20
  "Use a storage-mode dashboard created through the Home Assistant UI or API",
@@ -106,6 +111,29 @@ def raise_dashboard_edit_error(
106
111
  )
107
112
 
108
113
 
114
+ def raise_dashboard_edit_unsent(
115
+ exc: Exception, url_path: str | None, action: str, reason: str
116
+ ) -> NoReturn:
117
+ """Raise for an edit that failed before anything was sent; a token rejected
118
+ on connect (the error itself or its ``__cause__``) is reported as that auth
119
+ error instead of under the code ``reason`` maps to. That includes a token
120
+ rejected on this call's capability probe; a probe failure cached by an
121
+ earlier call arrives without a cause and keeps ``reason``'s code."""
122
+ auth = exc if isinstance(exc, HomeAssistantAuthError) else exc.__cause__
123
+ if isinstance(auth, HomeAssistantAuthError):
124
+ exception_to_structured_error(
125
+ auth,
126
+ context={
127
+ "action": action,
128
+ "url_path": url_path,
129
+ "reason": reason,
130
+ "write_committed": False,
131
+ "post_write_verified": False,
132
+ },
133
+ )
134
+ raise_dashboard_edit_error(url_path, reason, str(exc), False, action)
135
+
136
+
109
137
  def raise_dashboard_edit_fetch_error(
110
138
  exc: ToolError, url_path: str, action: str
111
139
  ) -> NoReturn:
@@ -12,10 +12,15 @@ from __future__ import annotations
12
12
  from collections.abc import Callable
13
13
  from typing import Any
14
14
 
15
- from ..client.rest_client import HomeAssistantConnectionError, HomeAssistantError
15
+ from ..client.rest_client import (
16
+ HomeAssistantCommandNotSent,
17
+ HomeAssistantConnectionError,
18
+ HomeAssistantError,
19
+ )
16
20
  from ..errors import ErrorCode
17
21
  from .config_helpers.listing import listed_items
18
22
  from .config_helpers.schemas import SIMPLE_HELPER_TYPES
23
+ from .helpers import exception_to_structured_error
19
24
 
20
25
 
21
26
  def _unread(entity_id: str, reason: Any) -> list[str]:
@@ -82,7 +87,8 @@ async def remove_registry_entries(
82
87
  ) -> dict[str, Any]:
83
88
  """Remove each id in turn; each lands in ``removed``, ``skipped`` (Core's
84
89
  not_found: already absent) or ``errors``. A lost connection stops the run
85
- and lists the ids it never reached, which are safe to retry."""
90
+ and lists the ids it never sent, which are safe to retry: the ones after the
91
+ failing id, and the failing id too when its command provably never left."""
86
92
  removed: list[str] = []
87
93
  skipped: list[str] = []
88
94
  errors: list[dict[str, str]] = []
@@ -93,14 +99,18 @@ async def remove_registry_entries(
93
99
  {"type": "config/entity_registry/remove", "entity_id": eid}
94
100
  )
95
101
  except HomeAssistantConnectionError as exc:
102
+ # CONNECTION_FAILED, CONNECTION_TIMEOUT for a timed-out command,
103
+ # or AUTH_* when the token was rejected on reconnect.
104
+ structured = exception_to_structured_error(exc, raise_error=False)
96
105
  errors.append(
97
106
  {
98
107
  "entity_id": eid,
99
- "code": ErrorCode.CONNECTION_FAILED.value,
108
+ "code": structured["error"]["code"],
100
109
  "message": str(exc),
101
110
  }
102
111
  )
103
- not_attempted = list(entity_ids[index + 1 :])
112
+ unsent = isinstance(exc, HomeAssistantCommandNotSent)
113
+ not_attempted = list(entity_ids[index if unsent else index + 1 :])
104
114
  break
105
115
  if result.get("success"):
106
116
  removed.append(eid)
@@ -22,6 +22,7 @@ from ..client.rest_client import (
22
22
  HomeAssistantAPIError,
23
23
  HomeAssistantAuthError,
24
24
  HomeAssistantCommandError,
25
+ HomeAssistantCommandTimeout,
25
26
  HomeAssistantConnectionError,
26
27
  )
27
28
  from ..client.websocket_client import HomeAssistantWebSocketClient
@@ -321,6 +322,10 @@ async def get_connected_ws_client(
321
322
  if isinstance(reason, str)
322
323
  else "WebSocket connection could not be established"
323
324
  )
325
+ if isinstance(ws_client.last_connect_exception, HomeAssistantAuthError):
326
+ return None, create_auth_error(
327
+ "Home Assistant rejected the WebSocket token", details=details
328
+ )
324
329
  return None, create_connection_error(
325
330
  "Failed to connect to Home Assistant WebSocket",
326
331
  details=details,
@@ -365,9 +370,20 @@ def _classify_exception(
365
370
 
366
371
  # Type-based classification
367
372
  match error:
373
+ case HomeAssistantConnectionError() if isinstance(
374
+ error.__cause__, HomeAssistantAuthError
375
+ ):
376
+ # send_websocket_message wraps a failure to obtain a client in a
377
+ # connection error raised from the original, so a token rejected
378
+ # on (re)connect arrives here wrapped: classify the cause by its
379
+ # own text.
380
+ cause = error.__cause__
381
+ return _classify_exception(cause, str(cause).lower(), error_msg, context)
368
382
  case HomeAssistantConnectionError():
383
+ # send_websocket_message raises a command timeout as the cause.
384
+ timeout = isinstance(error.__cause__, HomeAssistantCommandTimeout)
369
385
  result = create_connection_error(
370
- error_msg, timeout="timeout" in error_str, context=context
386
+ error_msg, timeout=timeout or "timeout" in error_str, context=context
371
387
  )
372
388
  case HomeAssistantAdminRequiredError():
373
389
  result = create_error_response(
@@ -24,6 +24,7 @@ from typing import Any, Literal, NoReturn
24
24
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
25
25
 
26
26
  from ..client.rest_client import (
27
+ HomeAssistantAuthError,
27
28
  HomeAssistantCommandError,
28
29
  HomeAssistantCommandTimeout,
29
30
  HomeAssistantConnectionError,
@@ -298,10 +299,12 @@ class LogbookLogSourceMixin:
298
299
  """Run the component's Core-processor command, or ``None`` to fall back.
299
300
 
300
301
  ``None`` means the component is absent, downgraded (``unknown_command``
301
- drops the cached capability) or the transport failed before Home
302
- Assistant saw the request. Core's own rejections surface unchanged, and
303
- a timeout surfaces instead of falling back — the recorder query is
304
- still running inside Home Assistant.
302
+ drops the cached capability) or the transport gave no answer: no
303
+ connection, or one that dropped before the reply. Core's own rejections
304
+ surface unchanged; a timeout (the recorder query still runs inside Home
305
+ Assistant) surfaces instead of falling back, and so does a token
306
+ rejected on the command itself. A token already rejected on the
307
+ capability probe falls back.
305
308
  """
306
309
  caps = await get_component_caps(self._client)
307
310
  if not component_supports(caps, LOGBOOK_EVENTS_CAPABILITY):
@@ -314,6 +317,9 @@ class LogbookLogSourceMixin:
314
317
  except HomeAssistantConnectionError as exc:
315
318
  if _wrapped_timeout(exc):
316
319
  self._raise_logbook_timeout(command["start_time"], command["end_time"])
320
+ if isinstance(exc.__cause__, HomeAssistantAuthError):
321
+ # The fallbacks would resend the rejected token.
322
+ exception_to_structured_error(exc)
317
323
  return None
318
324
  except HomeAssistantCommandError as exc:
319
325
  if not is_unknown_command(exc):
@@ -346,7 +352,12 @@ class LogbookLogSourceMixin:
346
352
  except HomeAssistantConnectionError as exc:
347
353
  if _wrapped_timeout(exc):
348
354
  self._raise_logbook_timeout(command["start_time"], command["end_time"])
349
- self._raise_logbook_ws_required(command.get("device_ids"))
355
+ if isinstance(exc.__cause__, HomeAssistantAuthError):
356
+ # A token rejected on connect is not a WebSocket outage.
357
+ exception_to_structured_error(
358
+ exc, context={"device_ids": command.get("device_ids")}
359
+ )
360
+ self._raise_logbook_ws_required(command.get("device_ids"), reason=str(exc))
350
361
  except HomeAssistantCommandError as exc:
351
362
  if not is_unknown_command(exc):
352
363
  raise