ha-mcp-dev 9.1.1.dev3370__tar.gz → 9.1.1.dev3378__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 (846) hide show
  1. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/PKG-INFO +2 -2
  2. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/README.md +1 -1
  3. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/pyproject.toml +1 -1
  4. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/__main__.py +3 -3
  6. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/websocket_client.py +36 -243
  7. ha_mcp_dev-9.1.1.dev3378/src/ha_mcp/client/websocket_state.py +231 -0
  8. ha_mcp_dev-9.1.1.dev3378/src/ha_mcp/tools/automation_registry_details.py +105 -0
  9. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_api.py +132 -43
  10. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/hacs_backend.py +45 -5
  11. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/response_helpers.py +7 -6
  12. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_config_automations.py +12 -62
  13. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_hacs.py +63 -7
  14. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/LICENSE +0 -0
  15. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/__init__.py +0 -0
  16. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_pypi_marker +0 -0
  17. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_rich_compat.py +0 -0
  18. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/__init__.py +0 -0
  19. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  20. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  21. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  22. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  23. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  24. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  25. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  26. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  27. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  28. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  29. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  30. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  31. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  32. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  33. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  34. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  35. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  36. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  37. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  38. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  39. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  40. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  41. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  42. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  43. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  44. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  45. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  46. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  47. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  48. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  49. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  50. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  51. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  52. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  53. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  54. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  55. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  56. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  57. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  58. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  59. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  60. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  61. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  62. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  63. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  64. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  65. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  66. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  67. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  68. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  69. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  70. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  71. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  72. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  73. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  74. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  75. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  76. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  77. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  78. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  79. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  80. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  81. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  82. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  83. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  84. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  85. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  86. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  87. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  88. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  89. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  90. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  91. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  92. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  93. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  94. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  95. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  96. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  97. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  98. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  99. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  100. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  101. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  102. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  103. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  104. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  105. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  106. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  107. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  108. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  109. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  110. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  111. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  112. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  113. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  114. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  115. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  116. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  117. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  118. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  119. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  120. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  121. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  122. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  123. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  124. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  125. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  126. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  127. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  128. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  129. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  130. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  131. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  132. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  133. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  134. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  135. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  136. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  137. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  138. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  139. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  140. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  141. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  142. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  143. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  144. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  145. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  146. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  147. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  148. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  149. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  150. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  151. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  152. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  153. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  154. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  155. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  156. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  157. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  158. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  159. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  160. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  161. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  162. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  163. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  164. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  165. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  166. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  167. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  168. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  169. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  170. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  171. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  172. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  173. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  174. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  175. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  176. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  177. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  178. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  179. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  180. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  181. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  182. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  183. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  184. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  185. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  186. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  187. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  188. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  189. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  190. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  191. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  192. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  193. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  194. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  195. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  196. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  197. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  198. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  199. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  200. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  201. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  202. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  203. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  204. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  205. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  206. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  207. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  208. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  209. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  210. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  211. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  212. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  213. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  214. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  215. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  216. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  217. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  218. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  219. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  220. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  221. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  222. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  223. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  224. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  225. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  226. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  227. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  228. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  229. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  230. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  231. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  232. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  233. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  234. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  235. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  236. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  237. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  238. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  239. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  240. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  241. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  242. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  243. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  244. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  245. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  246. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  247. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  248. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  249. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  250. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  251. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  252. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  253. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  254. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  255. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  256. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  257. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  258. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  259. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  260. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  261. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  262. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  263. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  264. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  265. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  266. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  267. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  268. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  269. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  270. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  271. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  272. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  273. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  274. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  275. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  276. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  277. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  278. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  279. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  280. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  281. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  282. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  283. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  284. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  285. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  286. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  287. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  288. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  289. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  290. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  291. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  292. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  293. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  294. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  295. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  296. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  297. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  298. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  299. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  300. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  301. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  302. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  303. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  304. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  305. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  306. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  307. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  308. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  309. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  310. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  311. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  312. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  313. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  314. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  315. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  316. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  317. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  318. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  319. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  320. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  321. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  322. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  323. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  324. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  325. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  326. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  327. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  328. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  329. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  330. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  331. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  332. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  333. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  334. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  335. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  336. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  337. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  338. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  339. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  340. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  341. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  342. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  343. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  344. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  345. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  346. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  347. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  348. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  349. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  350. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  351. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  352. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  353. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  354. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  355. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  356. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  357. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  358. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  359. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  360. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  361. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  362. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  363. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  364. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  365. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  366. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  367. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  368. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  369. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  370. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  371. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  372. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  373. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  374. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  375. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  376. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  377. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  378. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  379. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  380. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  381. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  382. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  383. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  384. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  385. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  386. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  387. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  388. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  389. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  390. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  391. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  392. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  393. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  394. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  395. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  396. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  397. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  398. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  399. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  400. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  401. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  402. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  403. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  404. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  405. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  406. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  407. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  408. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  409. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  410. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  411. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  412. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  413. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  414. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  415. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  416. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  417. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  418. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  419. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  420. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  421. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  422. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  423. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  424. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  425. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  426. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  427. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  428. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  429. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  430. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  431. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  432. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  433. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  434. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  435. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  436. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  437. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  438. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  439. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  440. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  441. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  442. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/requirements.txt +0 -0
  443. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  444. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  445. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  446. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  447. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  448. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  449. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  450. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  451. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  452. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  453. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  454. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  455. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  456. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  457. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  458. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  459. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  460. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  461. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  462. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  463. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  464. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  465. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  466. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  467. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  468. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  469. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  470. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  471. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  472. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  473. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  474. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  475. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  476. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  477. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  478. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  479. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  480. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  481. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  482. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  483. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  484. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  485. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  486. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  487. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  488. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  489. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  490. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  491. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  492. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  493. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  494. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  495. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  496. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  497. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  498. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  499. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/_version.py +0 -0
  500. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/app_discovery.py +0 -0
  501. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/auth/__init__.py +0 -0
  502. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/auth/consent_form.py +0 -0
  503. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/auth/iss_stamp.py +0 -0
  504. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/auth/oidc_compat.py +0 -0
  505. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/auth/provider.py +0 -0
  506. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_calendar.py +0 -0
  507. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_dashboards.py +0 -0
  508. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_diff.py +0 -0
  509. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_entities.py +0 -0
  510. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_entity_ids.py +0 -0
  511. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_helper_target.py +0 -0
  512. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_integrations.py +0 -0
  513. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_manager.py +0 -0
  514. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_tags.py +0 -0
  515. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_todo.py +0 -0
  516. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/backup_zones.py +0 -0
  517. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/browser_landing.py +0 -0
  518. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/__init__.py +0 -0
  519. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/admin_routes.py +0 -0
  520. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/config_entry_read.py +0 -0
  521. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/error_log_journald.py +0 -0
  522. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/event_listeners.py +0 -0
  523. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/models.py +0 -0
  524. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/rest_client.py +0 -0
  525. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/supervisor_client.py +0 -0
  526. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/client/websocket_listener.py +0 -0
  527. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config.py +0 -0
  528. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config_backup.py +0 -0
  529. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config_meta.py +0 -0
  530. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config_overrides.py +0 -0
  531. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config_registry.py +0 -0
  532. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/config_settings.py +0 -0
  533. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  534. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  535. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  536. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  537. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  538. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  539. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  540. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  541. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/errors.py +0 -0
  542. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/ha_request_queue.py +0 -0
  543. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  544. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/http_transport.py +0 -0
  545. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/image_info.py +0 -0
  546. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  547. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/listen_sockets.py +0 -0
  548. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/llm_exposure.py +0 -0
  549. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/log_filters.py +0 -0
  550. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/mcp_client_context.py +0 -0
  551. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/__init__.py +0 -0
  552. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/approval_queue.py +0 -0
  553. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/decision_pin.py +0 -0
  554. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/decisions.py +0 -0
  555. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/editing.py +0 -0
  556. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/evaluator.py +0 -0
  557. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/events.py +0 -0
  558. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/handlers.py +0 -0
  559. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/middleware.py +0 -0
  560. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/model.py +0 -0
  561. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/mrtr.py +0 -0
  562. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/persistence.py +0 -0
  563. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/server_channels.py +0 -0
  564. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/policy/value_sources.py +0 -0
  565. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/py.typed +0 -0
  566. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/read_only.py +0 -0
  567. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/redaction.py +0 -0
  568. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/renamed_tools.py +0 -0
  569. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  570. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  571. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  572. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  573. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  574. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  575. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  576. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  577. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  578. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  579. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  580. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  581. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  582. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  583. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  584. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  585. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  586. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/server.py +0 -0
  587. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/server_instructions.py +0 -0
  588. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/server_lifespan.py +0 -0
  589. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/server_tool_text.py +0 -0
  590. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/__init__.py +0 -0
  591. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  592. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  593. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  594. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  595. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  596. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  597. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  598. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  599. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  600. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  601. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  602. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_theme.py +0 -0
  603. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  604. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  605. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  606. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  607. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  608. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  609. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  610. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  611. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  612. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  613. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  614. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  615. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  616. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  617. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  618. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  619. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  620. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  621. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  622. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings.css +0 -0
  623. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings.html +0 -0
  624. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  625. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  626. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  627. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  628. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  629. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  630. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  631. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  632. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  633. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  634. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/smoke_test.py +0 -0
  635. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  636. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/storage_helper_types.py +0 -0
  637. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/strict_bps.py +0 -0
  638. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tool_catalog.py +0 -0
  639. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tool_dispatch.py +0 -0
  640. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/__init__.py +0 -0
  641. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  642. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/area_messages.py +0 -0
  643. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/auto_backup.py +0 -0
  644. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/automation_errors.py +0 -0
  645. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/backup.py +0 -0
  646. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/backup_access.py +0 -0
  647. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  648. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  649. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  650. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  651. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/best_practice_result.py +0 -0
  652. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  653. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  654. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  655. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/blueprint_write.py +0 -0
  656. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/bug_report_config.py +0 -0
  657. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  658. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  659. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  660. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/bulk_selector.py +0 -0
  661. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/coercion.py +0 -0
  662. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_automation.py +0 -0
  663. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_config_entries.py +0 -0
  664. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_config_reads.py +0 -0
  665. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  666. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_devices.py +0 -0
  667. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  668. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_registries.py +0 -0
  669. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  670. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/component_todo.py +0 -0
  671. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  672. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  673. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
  674. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  675. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  676. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  677. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
  678. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  679. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  680. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  681. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  682. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  683. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  684. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  685. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  686. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  687. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  688. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  689. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  690. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  691. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  692. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  693. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  694. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  695. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_write_errors.py +0 -0
  696. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  697. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/core_contract.py +0 -0
  698. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  699. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  700. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  701. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  702. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/dev_backup.py +0 -0
  703. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/device_control.py +0 -0
  704. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/device_enrichment.py +0 -0
  705. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  706. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/energy_preferences.py +0 -0
  707. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  708. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  709. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/entity_registration.py +0 -0
  710. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/entity_removal.py +0 -0
  711. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  712. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  713. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/event_call.py +0 -0
  714. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  715. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  716. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/flow_translations.py +0 -0
  717. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/hacs_registration.py +0 -0
  718. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/helper_flows.py +0 -0
  719. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/helpers.py +0 -0
  720. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/history_response.py +0 -0
  721. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/ignored_entries.py +0 -0
  722. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  723. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
  724. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/integration_schema.py +0 -0
  725. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
  726. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/log_common.py +0 -0
  727. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/log_sources.py +0 -0
  728. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  729. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  730. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  731. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/__init__.py +0 -0
  732. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/base.py +0 -0
  733. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/matter.py +0 -0
  734. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/thread.py +0 -0
  735. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  736. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/zwave.py +0 -0
  737. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  738. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/recorder_errors.py +0 -0
  739. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/reference_validator.py +0 -0
  740. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/registry.py +0 -0
  741. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  742. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/resource_codec.py +0 -0
  743. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/resource_patch.py +0 -0
  744. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/scene_discovery.py +0 -0
  745. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/__init__.py +0 -0
  746. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/base.py +0 -0
  747. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/component.py +0 -0
  748. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/entities.py +0 -0
  749. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/legacy.py +0 -0
  750. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/modes.py +0 -0
  751. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/overview.py +0 -0
  752. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/response.py +0 -0
  753. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/search/state.py +0 -0
  754. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/server_version.py +0 -0
  755. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  756. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  757. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  758. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  759. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  760. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  761. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  762. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  763. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  764. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  765. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  766. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  767. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/statistics_resets.py +0 -0
  768. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/system_restart.py +0 -0
  769. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tool_hints.py +0 -0
  770. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  771. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_addons.py +0 -0
  772. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_areas.py +0 -0
  773. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  774. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  775. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  776. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_calendar.py +0 -0
  777. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_camera.py +0 -0
  778. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_categories.py +0 -0
  779. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_code.py +0 -0
  780. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  781. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  782. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  783. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  784. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  785. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_dev.py +0 -0
  786. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_energy.py +0 -0
  787. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_entities.py +0 -0
  788. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  789. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_groups.py +0 -0
  790. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_history.py +0 -0
  791. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_integrations.py +0 -0
  792. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_labels.py +0 -0
  793. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_logs.py +0 -0
  794. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_radio.py +0 -0
  795. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_registry.py +0 -0
  796. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_resources.py +0 -0
  797. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_search.py +0 -0
  798. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  799. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_service.py +0 -0
  800. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_services.py +0 -0
  801. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_system.py +0 -0
  802. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_themes.py +0 -0
  803. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_todo.py +0 -0
  804. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_traces.py +0 -0
  805. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_updates.py +0 -0
  806. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_utility.py +0 -0
  807. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  808. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  809. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  810. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/tools_zones.py +0 -0
  811. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/update_categories.py +0 -0
  812. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/util_helpers.py +0 -0
  813. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/validation_middleware.py +0 -0
  814. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/tools/ws_waiters.py +0 -0
  815. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/__init__.py +0 -0
  816. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/categorized_search.py +0 -0
  817. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/compact_params.py +0 -0
  818. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/component_helpers.py +0 -0
  819. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/component_search.py +0 -0
  820. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  821. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  822. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/transport_security.py +0 -0
  823. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/update_check.py +0 -0
  824. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/__init__.py +0 -0
  825. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/config_hash.py +0 -0
  826. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/config_write_lock.py +0 -0
  827. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  828. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/data_paths.py +0 -0
  829. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  830. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/domain_handlers.py +0 -0
  831. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/entity_membership.py +0 -0
  832. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  833. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  834. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  835. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/operation_manager.py +0 -0
  836. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/python_sandbox.py +0 -0
  837. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  838. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/skill_loader.py +0 -0
  839. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/utils/usage_logger.py +0 -0
  840. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/__init__.py +0 -0
  841. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/config_files.py +0 -0
  842. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/enforcement.py +0 -0
  843. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  844. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/model.py +0 -0
  845. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/src/ha_mcp/visibility/persistence.py +0 -0
  846. {ha_mcp_dev-9.1.1.dev3370 → ha_mcp_dev-9.1.1.dev3378}/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.1.dev3370
3
+ Version: 9.1.1.dev3378
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
@@ -442,7 +442,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
442
442
 
443
443
  Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
444
444
 
445
- > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
445
+ > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
446
446
 
447
447
  For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
448
448
 
@@ -381,7 +381,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
381
381
 
382
382
  Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
383
383
 
384
- > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
384
+ > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
385
385
 
386
386
  For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
387
387
 
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.1.dev3370"
7
+ version = "9.1.1.dev3378"
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.1.dev3370"
7
+ version = "9.1.1.dev3378"
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
@@ -65,8 +65,8 @@ class OAuthProxyClient:
65
65
  self._oauth_clients: dict[str, HomeAssistantClient] = {}
66
66
  self._lock = threading.Lock()
67
67
 
68
- def _get_oauth_client(self) -> "HomeAssistantClient":
69
- """Get the OAuth client for the current request context."""
68
+ def current_client(self) -> "HomeAssistantClient":
69
+ """The requesting user's client; per-user caches key on it, not the proxy."""
70
70
  from ha_mcp._vendor.fastmcp.server.dependencies import get_access_token
71
71
  from ha_mcp.client.rest_client import (
72
72
  HomeAssistantAuthError,
@@ -116,7 +116,7 @@ class OAuthProxyClient:
116
116
 
117
117
  def __getattr__(self, name: str) -> Any:
118
118
  """Forward all attribute access to the OAuth client."""
119
- client = self._get_oauth_client()
119
+ client = self.current_client()
120
120
  return getattr(client, name)
121
121
 
122
122
 
@@ -14,7 +14,6 @@ import json
14
14
  import logging
15
15
  import ssl
16
16
  import time
17
- from collections import defaultdict
18
17
  from collections.abc import Awaitable, Callable, Coroutine
19
18
  from typing import Any
20
19
  from urllib.parse import urlparse
@@ -37,6 +36,7 @@ from .rest_client import (
37
36
  HomeAssistantConnectionError,
38
37
  _is_ssl_error,
39
38
  )
39
+ from .websocket_state import WebSocketConnectionState
40
40
 
41
41
  logger = logging.getLogger(__name__)
42
42
 
@@ -136,229 +136,6 @@ def _extract_ws_error(error: Any) -> tuple[str, str | None]:
136
136
  return str(error), None
137
137
 
138
138
 
139
- class WebSocketConnectionState:
140
- """Encapsulates mutable state used by the WebSocket client."""
141
-
142
- def __init__(self) -> None:
143
- self.connected = False
144
- self.authenticated = False
145
- self._message_id = 0
146
- self._pending_requests: dict[int, asyncio.Future[dict[str, Any]]] = {}
147
- self._auth_messages: dict[str, dict[str, Any]] = {}
148
- self._event_responses: dict[int, asyncio.Future[dict[str, Any]]] = {}
149
- self._event_handlers: dict[
150
- str, set[Callable[[dict[str, Any]], Awaitable[None]]]
151
- ] = defaultdict(set)
152
- # Continuous-subscription queues keyed by the subscribe command's
153
- # message_id. Long-lived subscriptions (e.g. HACS' ``hacs/subscribe``)
154
- # deliver many events sharing one id; the one-shot
155
- # ``_event_responses`` future can't handle that. When a queue is
156
- # registered for a given id, every event with that id is pushed
157
- # into it instead of going to ``event_type``-keyed handlers.
158
- self._subscription_queues: dict[int, asyncio.Queue[dict[str, Any]]] = {}
159
- # Ids of subscribe commands whose caller gave up before Home Assistant
160
- # acknowledged them. See ``take_abandoned_subscription``.
161
- self._abandoned_subscriptions: set[int] = set()
162
-
163
- def next_message_id(self) -> int:
164
- """Reserve the next available WebSocket message identifier."""
165
- self._message_id += 1
166
- return self._message_id
167
-
168
- def register_pending_request(
169
- self, message_id: int
170
- ) -> asyncio.Future[dict[str, Any]]:
171
- """Create and register a future for a pending command response."""
172
- future: asyncio.Future[dict[str, Any]] = (
173
- asyncio.get_running_loop().create_future()
174
- )
175
- self._pending_requests[message_id] = future
176
- return future
177
-
178
- def resolve_pending_request(
179
- self, message_id: int
180
- ) -> asyncio.Future[dict[str, Any]] | None:
181
- """Resolve and remove a pending request future."""
182
- return self._pending_requests.pop(message_id, None)
183
-
184
- def cancel_pending_request(self, message_id: int) -> None:
185
- """Remove a pending request future, cancelling it or draining its exception."""
186
- future = self._pending_requests.pop(message_id, None)
187
- if future and not future.done():
188
- future.cancel()
189
- elif future and not future.cancelled():
190
- # A done future may hold the exception reset_connection set on it;
191
- # retrieve it here so dropping the last reference doesn't log an
192
- # ERROR-level "Future exception was never retrieved" at GC.
193
- future.exception()
194
-
195
- def register_event_response(
196
- self, message_id: int
197
- ) -> asyncio.Future[dict[str, Any]]:
198
- """Create and register a future for a follow-up event."""
199
- future: asyncio.Future[dict[str, Any]] = (
200
- asyncio.get_running_loop().create_future()
201
- )
202
- self._event_responses[message_id] = future
203
- return future
204
-
205
- def resolve_event_response(
206
- self, message_id: int
207
- ) -> asyncio.Future[dict[str, Any]] | None:
208
- """Resolve a stored event future."""
209
- return self._event_responses.pop(message_id, None)
210
-
211
- def cancel_event_response(self, message_id: int) -> None:
212
- """Remove a pending event future, cancelling it or draining its exception."""
213
- future = self._event_responses.pop(message_id, None)
214
- if future and not future.done():
215
- future.cancel()
216
- elif future and not future.cancelled():
217
- # Same GC guard as cancel_pending_request above.
218
- future.exception()
219
-
220
- def mark_abandoned_subscription(self, message_id: int) -> None:
221
- """Record a subscribe command whose acknowledgement nobody awaits."""
222
- self._abandoned_subscriptions.add(message_id)
223
-
224
- def take_abandoned_subscription(self, message_id: int) -> bool:
225
- """Forget an abandoned subscribe command; True if it was one.
226
-
227
- Home Assistant may register a subscription only after the caller has
228
- given up and the immediate release answered ``not_found`` — a
229
- ``render_template`` setup waits out the template's own timeout first.
230
- Its late acknowledgement then arrives with no pending request, and
231
- this is how the dispatch recognises that it still has to release it.
232
- """
233
- if message_id in self._abandoned_subscriptions:
234
- self._abandoned_subscriptions.discard(message_id)
235
- return True
236
- return False
237
-
238
- def store_auth_message(self, message_type: str, data: dict[str, Any]) -> None:
239
- """Store an authentication handshake message."""
240
- self._auth_messages[message_type] = data
241
-
242
- def consume_auth_message(self, message_type: str) -> dict[str, Any] | None:
243
- """Retrieve and remove an authentication message if present."""
244
- return self._auth_messages.pop(message_type, None)
245
-
246
- def reset_connection(self, close_reason: str | None = None) -> None:
247
- """Reset connection-specific state while preserving handlers.
248
-
249
- Args:
250
- close_reason: Human-readable description of why the connection
251
- went away (e.g. a close code/reason pair), included in the
252
- error surfaced to any request still awaiting a response.
253
- """
254
- self.connected = False
255
- self.authenticated = False
256
- self._message_id = 0
257
-
258
- # ``future.cancel()`` makes awaiters see ``asyncio.CancelledError``,
259
- # a BaseException that skips every ``except Exception`` handler in
260
- # the tool layer and reaches the MCP SDK, which treats it as a
261
- # client-initiated cancellation, suppresses the response entirely,
262
- # and leaves the MCP client hanging until its own timeout (#1721).
263
- # ``set_exception`` with a normal exception propagates through
264
- # ``except Exception`` as expected instead.
265
- message = (
266
- "WebSocket connection to Home Assistant closed while waiting for a response"
267
- )
268
- if close_reason:
269
- message = f"{message} ({close_reason})"
270
-
271
- for future in self._pending_requests.values():
272
- if not future.done():
273
- # A fresh instance per future: sharing one exception object
274
- # across multiple ``set_exception`` calls means the second
275
- # raise attaches a traceback to an exception already
276
- # associated with another future's stack.
277
- future.set_exception(HomeAssistantConnectionError(message))
278
- self._pending_requests.clear()
279
-
280
- for future in self._event_responses.values():
281
- if not future.done():
282
- future.set_exception(HomeAssistantConnectionError(message))
283
- self._event_responses.clear()
284
-
285
- # Drop any subscription queues. ``shutdown`` rather than just clearing
286
- # the dict, so blocked ``queue.get()`` awaiters unblock instead of
287
- # hanging; not ``immediate``, so a reader still gets the events that
288
- # arrived before the close, then ``QueueShutDown`` (3.13).
289
- for queue in self._subscription_queues.values():
290
- queue.shutdown()
291
- self._subscription_queues.clear()
292
- # Subscriptions die with the socket, and ids restart on the next one.
293
- self._abandoned_subscriptions.clear()
294
-
295
- self._auth_messages.clear()
296
-
297
- def mark_connected(self) -> None:
298
- """Mark the socket as connected but not yet authenticated."""
299
- self.connected = True
300
- self.authenticated = False
301
-
302
- def mark_authenticated(self) -> None:
303
- """Mark the socket as authenticated and ready for commands."""
304
- self.authenticated = True
305
-
306
- def mark_disconnected(self, close_reason: str | None = None) -> None:
307
- """Reset connection state when the socket is closed."""
308
- self.reset_connection(close_reason)
309
-
310
- @property
311
- def is_ready(self) -> bool:
312
- """Whether the connection is active and authenticated."""
313
- return self.connected and self.authenticated
314
-
315
- def add_event_handler(
316
- self, event_type: str, handler: Callable[[dict[str, Any]], Awaitable[None]]
317
- ) -> None:
318
- """Register an async handler for a Home Assistant event type."""
319
- self._event_handlers[event_type].add(handler)
320
-
321
- def remove_event_handler(
322
- self, event_type: str, handler: Callable[[dict[str, Any]], Awaitable[None]]
323
- ) -> None:
324
- """Remove an event handler and prune empty handler sets."""
325
- if event_type in self._event_handlers:
326
- self._event_handlers[event_type].discard(handler)
327
- if not self._event_handlers[event_type]:
328
- self._event_handlers.pop(event_type, None)
329
-
330
- def get_event_handlers(
331
- self, event_type: str
332
- ) -> tuple[Callable[[dict[str, Any]], Awaitable[None]], ...]:
333
- """Return registered handlers for a given event type."""
334
- if event_type not in self._event_handlers:
335
- return ()
336
- return tuple(self._event_handlers[event_type])
337
-
338
- def register_subscription_queue(
339
- self, message_id: int
340
- ) -> asyncio.Queue[dict[str, Any]]:
341
- """Register a queue for continuous-subscription event delivery."""
342
- queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue()
343
- self._subscription_queues[message_id] = queue
344
- return queue
345
-
346
- def get_subscription_queue(
347
- self, message_id: int
348
- ) -> asyncio.Queue[dict[str, Any]] | None:
349
- """Return the queue for a subscription id, or None."""
350
- return self._subscription_queues.get(message_id)
351
-
352
- def unregister_subscription_queue(self, message_id: int) -> None:
353
- """Drop a subscription queue and wake any blocked readers."""
354
- queue = self._subscription_queues.pop(message_id, None)
355
- if queue is not None:
356
- # ``shutdown(immediate=True)`` raises ``QueueShutDown`` in any
357
- # pending ``get()`` so a waiter doesn't deadlock when the
358
- # caller decides to stop listening.
359
- queue.shutdown(immediate=True)
360
-
361
-
362
139
  class HomeAssistantWebSocketClient:
363
140
  """WebSocket client for Home Assistant real-time communication."""
364
141
 
@@ -1541,6 +1318,40 @@ class WebSocketManager:
1541
1318
  """Create a cache key from credentials."""
1542
1319
  return hashlib.sha256(f"{url.rstrip('/')}:{token}".encode()).hexdigest()
1543
1320
 
1321
+ def _pool_key(
1322
+ self, url: str | None, token: str | None, verify_ssl: bool | None
1323
+ ) -> tuple[str, str, str]:
1324
+ """The credentials a caller connects with, and their pool key."""
1325
+ if url and token:
1326
+ ws_url, ws_token = url, token
1327
+ else:
1328
+ settings = get_global_settings()
1329
+ ws_url = settings.homeassistant_url
1330
+ ws_token = settings.homeassistant_token
1331
+ # Key on the EFFECTIVE verification mode: a caller passing the
1332
+ # resolved settings default (send_websocket_message) must share
1333
+ # the pooled connection with callers that omit the argument
1334
+ # (listener, HACS, installer) — only a genuine override such as
1335
+ # verify_ssl=False gets its own isolated connection.
1336
+ key = (
1337
+ f"{self._client_key(ws_url, ws_token)}"
1338
+ f"|verify_ssl={self._effective_verify_ssl(verify_ssl)}"
1339
+ )
1340
+ return ws_url, ws_token, key
1341
+
1342
+ def pooled_client(
1343
+ self,
1344
+ url: str | None = None,
1345
+ token: str | None = None,
1346
+ verify_ssl: bool | None = None,
1347
+ ) -> HomeAssistantWebSocketClient | None:
1348
+ """The pool's client for these credentials, without connecting.
1349
+
1350
+ It may be disconnected: ``get_client`` replaces such a client only on
1351
+ its next call. None when the pool holds none for them.
1352
+ """
1353
+ return self._clients.get(self._pool_key(url, token, verify_ssl)[2])
1354
+
1544
1355
  @staticmethod
1545
1356
  def _effective_verify_ssl(verify_ssl: bool | None) -> bool:
1546
1357
  """Resolve the effective TLS-verification mode for the pool key."""
@@ -1653,25 +1464,7 @@ class WebSocketManager:
1653
1464
  self._current_loop = current_loop
1654
1465
  self._release_stale_clients(stale_clients, previous_loop)
1655
1466
 
1656
- # Determine credentials to use
1657
- if url and token:
1658
- ws_url = url
1659
- ws_token = token
1660
- else:
1661
- settings = get_global_settings()
1662
- ws_url = settings.homeassistant_url
1663
- ws_token = settings.homeassistant_token
1664
-
1665
- # Key on the EFFECTIVE verification mode: a caller passing the
1666
- # resolved settings default (send_websocket_message) must share
1667
- # the pooled connection with callers that omit the argument
1668
- # (listener, HACS, installer) — only a genuine override such as
1669
- # verify_ssl=False gets its own isolated connection.
1670
- effective_verify_ssl = self._effective_verify_ssl(verify_ssl)
1671
- key = (
1672
- f"{self._client_key(ws_url, ws_token)}"
1673
- f"|verify_ssl={effective_verify_ssl}"
1674
- )
1467
+ ws_url, ws_token, key = self._pool_key(url, token, verify_ssl)
1675
1468
 
1676
1469
  # Return existing connected client for these credentials
1677
1470
  existing = self._clients.get(key)
@@ -0,0 +1,231 @@
1
+ """Request, event and subscription bookkeeping for one WebSocket connection."""
2
+
3
+ import asyncio
4
+ from collections import defaultdict
5
+ from collections.abc import Awaitable, Callable
6
+ from typing import Any
7
+
8
+ from .rest_client import HomeAssistantConnectionError
9
+
10
+
11
+ class WebSocketConnectionState:
12
+ """Encapsulates mutable state used by the WebSocket client."""
13
+
14
+ def __init__(self) -> None:
15
+ self.connected = False
16
+ self.authenticated = False
17
+ self._message_id = 0
18
+ self._pending_requests: dict[int, asyncio.Future[dict[str, Any]]] = {}
19
+ self._auth_messages: dict[str, dict[str, Any]] = {}
20
+ self._event_responses: dict[int, asyncio.Future[dict[str, Any]]] = {}
21
+ self._event_handlers: dict[
22
+ str, set[Callable[[dict[str, Any]], Awaitable[None]]]
23
+ ] = defaultdict(set)
24
+ # Continuous-subscription queues keyed by the subscribe command's
25
+ # message_id. Long-lived subscriptions (e.g. HACS' ``hacs/subscribe``)
26
+ # deliver many events sharing one id; the one-shot
27
+ # ``_event_responses`` future can't handle that. When a queue is
28
+ # registered for a given id, every event with that id is pushed
29
+ # into it instead of going to ``event_type``-keyed handlers.
30
+ self._subscription_queues: dict[int, asyncio.Queue[dict[str, Any]]] = {}
31
+ # Ids of subscribe commands whose caller gave up before Home Assistant
32
+ # acknowledged them. See ``take_abandoned_subscription``.
33
+ self._abandoned_subscriptions: set[int] = set()
34
+
35
+ def next_message_id(self) -> int:
36
+ """Reserve the next available WebSocket message identifier."""
37
+ self._message_id += 1
38
+ return self._message_id
39
+
40
+ def register_pending_request(
41
+ self, message_id: int
42
+ ) -> asyncio.Future[dict[str, Any]]:
43
+ """Create and register a future for a pending command response."""
44
+ future: asyncio.Future[dict[str, Any]] = (
45
+ asyncio.get_running_loop().create_future()
46
+ )
47
+ self._pending_requests[message_id] = future
48
+ return future
49
+
50
+ def resolve_pending_request(
51
+ self, message_id: int
52
+ ) -> asyncio.Future[dict[str, Any]] | None:
53
+ """Resolve and remove a pending request future."""
54
+ return self._pending_requests.pop(message_id, None)
55
+
56
+ def cancel_pending_request(self, message_id: int) -> None:
57
+ """Remove a pending request future, cancelling it or draining its exception."""
58
+ future = self._pending_requests.pop(message_id, None)
59
+ if future and not future.done():
60
+ future.cancel()
61
+ elif future and not future.cancelled():
62
+ # A done future may hold the exception reset_connection set on it;
63
+ # retrieve it here so dropping the last reference doesn't log an
64
+ # ERROR-level "Future exception was never retrieved" at GC.
65
+ future.exception()
66
+
67
+ def register_event_response(
68
+ self, message_id: int
69
+ ) -> asyncio.Future[dict[str, Any]]:
70
+ """Create and register a future for a follow-up event."""
71
+ future: asyncio.Future[dict[str, Any]] = (
72
+ asyncio.get_running_loop().create_future()
73
+ )
74
+ self._event_responses[message_id] = future
75
+ return future
76
+
77
+ def resolve_event_response(
78
+ self, message_id: int
79
+ ) -> asyncio.Future[dict[str, Any]] | None:
80
+ """Resolve a stored event future."""
81
+ return self._event_responses.pop(message_id, None)
82
+
83
+ def cancel_event_response(self, message_id: int) -> None:
84
+ """Remove a pending event future, cancelling it or draining its exception."""
85
+ future = self._event_responses.pop(message_id, None)
86
+ if future and not future.done():
87
+ future.cancel()
88
+ elif future and not future.cancelled():
89
+ # Same GC guard as cancel_pending_request above.
90
+ future.exception()
91
+
92
+ def mark_abandoned_subscription(self, message_id: int) -> None:
93
+ """Record a subscribe command whose acknowledgement nobody awaits."""
94
+ self._abandoned_subscriptions.add(message_id)
95
+
96
+ def take_abandoned_subscription(self, message_id: int) -> bool:
97
+ """Forget an abandoned subscribe command; True if it was one.
98
+
99
+ Home Assistant may register a subscription only after the caller has
100
+ given up and the immediate release answered ``not_found`` — a
101
+ ``render_template`` setup waits out the template's own timeout first.
102
+ Its late acknowledgement then arrives with no pending request, and
103
+ this is how the dispatch recognises that it still has to release it.
104
+ """
105
+ if message_id in self._abandoned_subscriptions:
106
+ self._abandoned_subscriptions.discard(message_id)
107
+ return True
108
+ return False
109
+
110
+ def store_auth_message(self, message_type: str, data: dict[str, Any]) -> None:
111
+ """Store an authentication handshake message."""
112
+ self._auth_messages[message_type] = data
113
+
114
+ def consume_auth_message(self, message_type: str) -> dict[str, Any] | None:
115
+ """Retrieve and remove an authentication message if present."""
116
+ return self._auth_messages.pop(message_type, None)
117
+
118
+ def reset_connection(self, close_reason: str | None = None) -> None:
119
+ """Reset connection-specific state while preserving handlers.
120
+
121
+ Args:
122
+ close_reason: Human-readable description of why the connection
123
+ went away (e.g. a close code/reason pair), included in the
124
+ error surfaced to any request still awaiting a response.
125
+ """
126
+ self.connected = False
127
+ self.authenticated = False
128
+ self._message_id = 0
129
+
130
+ # ``future.cancel()`` makes awaiters see ``asyncio.CancelledError``,
131
+ # a BaseException that skips every ``except Exception`` handler in
132
+ # the tool layer and reaches the MCP SDK, which treats it as a
133
+ # client-initiated cancellation, suppresses the response entirely,
134
+ # and leaves the MCP client hanging until its own timeout (#1721).
135
+ # ``set_exception`` with a normal exception propagates through
136
+ # ``except Exception`` as expected instead.
137
+ message = (
138
+ "WebSocket connection to Home Assistant closed while waiting for a response"
139
+ )
140
+ if close_reason:
141
+ message = f"{message} ({close_reason})"
142
+
143
+ for future in self._pending_requests.values():
144
+ if not future.done():
145
+ # A fresh instance per future: sharing one exception object
146
+ # across multiple ``set_exception`` calls means the second
147
+ # raise attaches a traceback to an exception already
148
+ # associated with another future's stack.
149
+ future.set_exception(HomeAssistantConnectionError(message))
150
+ self._pending_requests.clear()
151
+
152
+ for future in self._event_responses.values():
153
+ if not future.done():
154
+ future.set_exception(HomeAssistantConnectionError(message))
155
+ self._event_responses.clear()
156
+
157
+ # Drop any subscription queues. ``shutdown`` rather than just clearing
158
+ # the dict, so blocked ``queue.get()`` awaiters unblock instead of
159
+ # hanging; not ``immediate``, so a reader still gets the events that
160
+ # arrived before the close, then ``QueueShutDown`` (3.13).
161
+ for queue in self._subscription_queues.values():
162
+ queue.shutdown()
163
+ self._subscription_queues.clear()
164
+ # Subscriptions die with the socket, and ids restart on the next one.
165
+ self._abandoned_subscriptions.clear()
166
+
167
+ self._auth_messages.clear()
168
+
169
+ def mark_connected(self) -> None:
170
+ """Mark the socket as connected but not yet authenticated."""
171
+ self.connected = True
172
+ self.authenticated = False
173
+
174
+ def mark_authenticated(self) -> None:
175
+ """Mark the socket as authenticated and ready for commands."""
176
+ self.authenticated = True
177
+
178
+ def mark_disconnected(self, close_reason: str | None = None) -> None:
179
+ """Reset connection state when the socket is closed."""
180
+ self.reset_connection(close_reason)
181
+
182
+ @property
183
+ def is_ready(self) -> bool:
184
+ """Whether the connection is active and authenticated."""
185
+ return self.connected and self.authenticated
186
+
187
+ def add_event_handler(
188
+ self, event_type: str, handler: Callable[[dict[str, Any]], Awaitable[None]]
189
+ ) -> None:
190
+ """Register an async handler for a Home Assistant event type."""
191
+ self._event_handlers[event_type].add(handler)
192
+
193
+ def remove_event_handler(
194
+ self, event_type: str, handler: Callable[[dict[str, Any]], Awaitable[None]]
195
+ ) -> None:
196
+ """Remove an event handler and prune empty handler sets."""
197
+ if event_type in self._event_handlers:
198
+ self._event_handlers[event_type].discard(handler)
199
+ if not self._event_handlers[event_type]:
200
+ self._event_handlers.pop(event_type, None)
201
+
202
+ def get_event_handlers(
203
+ self, event_type: str
204
+ ) -> tuple[Callable[[dict[str, Any]], Awaitable[None]], ...]:
205
+ """Return registered handlers for a given event type."""
206
+ if event_type not in self._event_handlers:
207
+ return ()
208
+ return tuple(self._event_handlers[event_type])
209
+
210
+ def register_subscription_queue(
211
+ self, message_id: int
212
+ ) -> asyncio.Queue[dict[str, Any]]:
213
+ """Register a queue for continuous-subscription event delivery."""
214
+ queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue()
215
+ self._subscription_queues[message_id] = queue
216
+ return queue
217
+
218
+ def get_subscription_queue(
219
+ self, message_id: int
220
+ ) -> asyncio.Queue[dict[str, Any]] | None:
221
+ """Return the queue for a subscription id, or None."""
222
+ return self._subscription_queues.get(message_id)
223
+
224
+ def unregister_subscription_queue(self, message_id: int) -> None:
225
+ """Drop a subscription queue and wake any blocked readers."""
226
+ queue = self._subscription_queues.pop(message_id, None)
227
+ if queue is not None:
228
+ # ``shutdown(immediate=True)`` raises ``QueueShutDown`` in any
229
+ # pending ``get()`` so a waiter doesn't deadlock when the
230
+ # caller decides to stop listening.
231
+ queue.shutdown(immediate=True)