ha-mcp-dev 8.4.3.dev2648__tar.gz → 8.4.3.dev2652__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 (726) hide show
  1. {ha_mcp_dev-8.4.3.dev2648/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2652}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/pyproject.toml +91 -10
  3. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_reads.py +16 -26
  4. ha_mcp_dev-8.4.3.dev2652/src/ha_mcp/tools/entity_registration.py +133 -0
  5. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scenes.py +25 -57
  6. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scripts.py +46 -92
  7. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  8. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
  9. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/LICENSE +0 -0
  10. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/README.md +0 -0
  12. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/setup.cfg +0 -0
  13. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__init__.py +0 -0
  14. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__main__.py +0 -0
  15. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_pypi_marker +0 -0
  16. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_rich_compat.py +0 -0
  17. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/__init__.py +0 -0
  18. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  19. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  20. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  21. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  22. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  23. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  24. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  32. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  37. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  42. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  43. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  44. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  45. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  46. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  47. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  48. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  49. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  52. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  53. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  54. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  55. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  56. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  57. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  58. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  59. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  60. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  63. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  64. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  65. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  66. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  67. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  72. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  76. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  77. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  78. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  79. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  80. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  83. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  84. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  85. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  86. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  87. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  89. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  90. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  91. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  92. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  93. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  94. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  95. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  96. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  97. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  98. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  99. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  100. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  102. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  103. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  104. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  105. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  106. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  107. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  108. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  114. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  115. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  116. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  117. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  118. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  119. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  120. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  121. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  122. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  123. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  124. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  125. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  126. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  127. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  128. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  129. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  130. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  131. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  132. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  133. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  134. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  135. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  136. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  137. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  138. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  139. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  140. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  141. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  142. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  143. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  144. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  145. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  146. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  147. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  148. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  149. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  150. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  151. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  152. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  153. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  154. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  167. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  168. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  169. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  170. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  171. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  172. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  173. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  174. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  175. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  176. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  177. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  178. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  179. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  180. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  181. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  182. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  183. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  186. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  190. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  204. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  205. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  206. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  264. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  265. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  266. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  269. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  270. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  271. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  288. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  289. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  290. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  291. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  292. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  310. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  311. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  312. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  313. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  316. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  317. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  318. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  319. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  320. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  321. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  322. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  323. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  324. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  325. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  326. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  327. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  328. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  329. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  330. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  331. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  332. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  333. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  334. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  335. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  336. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  337. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  338. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  339. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  340. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  341. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  342. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  343. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  344. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  345. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  346. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  347. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  348. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  349. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  350. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  351. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  352. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  353. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  354. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  355. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  356. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  357. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  358. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  359. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  360. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  361. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  362. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  363. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  364. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  365. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  366. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  367. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  368. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  369. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  370. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  371. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  372. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  373. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  374. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  375. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  376. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  377. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  378. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  379. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  380. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  381. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  382. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  383. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  384. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  385. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  386. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  387. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  388. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  389. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  390. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  391. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  392. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  393. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  394. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  395. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  396. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  397. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  398. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  399. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  400. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  401. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  402. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  403. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  404. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  405. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  406. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  407. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  408. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  409. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  410. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  411. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  412. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  413. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  414. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  415. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  416. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  417. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  418. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  419. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  420. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  421. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  422. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  423. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  424. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  425. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  426. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  427. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  428. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/requirements.txt +0 -0
  429. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  430. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  431. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  432. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  433. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  434. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  435. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  436. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  437. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  438. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  439. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  440. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  441. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  442. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  443. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  444. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  445. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  446. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  447. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  448. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  449. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  450. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  451. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  452. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  453. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  454. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  455. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  456. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  457. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  458. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  459. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  460. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  461. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  462. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  463. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  464. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  465. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  466. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  467. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  468. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  469. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  470. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  471. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  472. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  473. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  474. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  475. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  476. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  477. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  478. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  479. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  480. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  481. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  482. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  483. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  484. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  485. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_version.py +0 -0
  486. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/__init__.py +0 -0
  487. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/consent_form.py +0 -0
  488. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/oidc_compat.py +0 -0
  489. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/provider.py +0 -0
  490. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/backup_manager.py +0 -0
  491. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/browser_landing.py +0 -0
  492. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/__init__.py +0 -0
  493. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/rest_client.py +0 -0
  494. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/supervisor_client.py +0 -0
  495. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_client.py +0 -0
  496. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_listener.py +0 -0
  497. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/config.py +0 -0
  498. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  499. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  500. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  501. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  502. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  503. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  504. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/errors.py +0 -0
  505. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/ha_request_queue.py +0 -0
  506. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  507. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/http_transport.py +0 -0
  508. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/llm_exposure.py +0 -0
  509. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/log_filters.py +0 -0
  510. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/__init__.py +0 -0
  511. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/approval_queue.py +0 -0
  512. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/editing.py +0 -0
  513. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/evaluator.py +0 -0
  514. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/handlers.py +0 -0
  515. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/middleware.py +0 -0
  516. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/model.py +0 -0
  517. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/persistence.py +0 -0
  518. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/value_sources.py +0 -0
  519. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/py.typed +0 -0
  520. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/read_only.py +0 -0
  521. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/redaction.py +0 -0
  522. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/renamed_tools.py +0 -0
  523. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  524. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  525. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  526. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  527. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  528. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  529. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  530. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  531. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  532. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  533. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  534. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  535. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  536. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  537. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  538. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  539. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  540. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  541. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  542. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  543. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  544. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  545. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  546. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  547. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  548. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  549. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  550. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  551. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  552. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  553. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  554. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  555. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  556. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  557. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  558. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  559. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  560. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  561. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  562. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  563. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  564. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/server.py +0 -0
  565. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/__init__.py +0 -0
  566. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  567. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  568. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  569. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  570. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  571. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  572. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  573. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  574. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  575. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  576. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_theme.py +0 -0
  577. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  578. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  579. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  580. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  581. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  582. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  583. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  584. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  585. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  586. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  587. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  588. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  589. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  590. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  591. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  592. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  593. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  594. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.css +0 -0
  595. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.html +0 -0
  596. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.js +0 -0
  597. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/smoke_test.py +0 -0
  598. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  599. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/strict_bps.py +0 -0
  600. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tool_dispatch.py +0 -0
  601. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/__init__.py +0 -0
  602. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/auto_backup.py +0 -0
  603. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/backup.py +0 -0
  604. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  605. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_result.py +0 -0
  606. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  607. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  608. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  609. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_write.py +0 -0
  610. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/bulk_selector.py +0 -0
  611. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_api.py +0 -0
  612. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_entries.py +0 -0
  613. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  614. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_devices.py +0 -0
  615. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registries.py +0 -0
  616. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  617. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  618. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  619. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  620. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  621. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  622. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  623. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  624. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  625. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/device_control.py +0 -0
  626. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  627. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/hacs_registration.py +0 -0
  628. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/helpers.py +0 -0
  629. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  630. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_common.py +0 -0
  631. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources.py +0 -0
  632. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  633. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  634. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/__init__.py +0 -0
  635. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/base.py +0 -0
  636. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/matter.py +0 -0
  637. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/thread.py +0 -0
  638. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  639. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zwave.py +0 -0
  640. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/reference_validator.py +0 -0
  641. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/registry.py +0 -0
  642. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  643. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  644. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  645. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  646. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  647. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  648. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  649. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  650. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  651. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  652. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  653. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  654. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_addons.py +0 -0
  655. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_areas.py +0 -0
  656. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  657. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  658. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  659. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_calendar.py +0 -0
  660. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_camera.py +0 -0
  661. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_categories.py +0 -0
  662. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_code.py +0 -0
  663. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  664. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  665. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  666. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  667. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dev.py +0 -0
  668. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_energy.py +0 -0
  669. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_entities.py +0 -0
  670. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  671. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_groups.py +0 -0
  672. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_hacs.py +0 -0
  673. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_history.py +0 -0
  674. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_integrations.py +0 -0
  675. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_labels.py +0 -0
  676. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_logs.py +0 -0
  677. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_radio.py +0 -0
  678. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_registry.py +0 -0
  679. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_resources.py +0 -0
  680. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_search.py +0 -0
  681. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  682. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_service.py +0 -0
  683. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_services.py +0 -0
  684. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_system.py +0 -0
  685. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_themes.py +0 -0
  686. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_todo.py +0 -0
  687. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_traces.py +0 -0
  688. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_updates.py +0 -0
  689. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_utility.py +0 -0
  690. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  691. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  692. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  693. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_zones.py +0 -0
  694. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/util_helpers.py +0 -0
  695. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/validation_middleware.py +0 -0
  696. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/__init__.py +0 -0
  697. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/categorized_search.py +0 -0
  698. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  699. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transport_security.py +0 -0
  700. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/update_check.py +0 -0
  701. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/__init__.py +0 -0
  702. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_hash.py +0 -0
  703. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_write_lock.py +0 -0
  704. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  705. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/data_paths.py +0 -0
  706. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  707. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/domain_handlers.py +0 -0
  708. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/entity_membership.py +0 -0
  709. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  710. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  711. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/operation_manager.py +0 -0
  712. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/python_sandbox.py +0 -0
  713. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/skill_loader.py +0 -0
  714. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/usage_logger.py +0 -0
  715. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/__init__.py +0 -0
  716. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/enforcement.py +0 -0
  717. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/model.py +0 -0
  718. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/persistence.py +0 -0
  719. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/resolver.py +0 -0
  720. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  721. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  722. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  723. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  724. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/tests/__init__.py +0 -0
  725. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/tests/test_constants.py +0 -0
  726. {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2648
3
+ Version: 8.4.3.dev2652
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.4.3.dev2648"
7
+ version = "8.4.3.dev2652"
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
@@ -258,36 +258,117 @@ ignore = [
258
258
 
259
259
  [tool.pytest.ini_options]
260
260
  testpaths = ["tests"]
261
- python_files = ["test_*.py", "*_test.py"]
261
+ python_files = ["test_*.py"]
262
262
  python_classes = ["Test*"]
263
263
  python_functions = ["test_*"]
264
- # See tests/pytest.ini: an empty parametrize list is a guard that stopped
265
- # running, and the default mark hides it as a skip the summary ignores.
264
+ # A parametrize list that resolves to nothing is a guard that silently stopped
265
+ # running: pytest reports "got empty parameter set", and the summary counts it
266
+ # as neither a failure nor a real skip. Make it a collection error instead.
266
267
  empty_parameter_set_mark = "fail_at_collect"
268
+
269
+ # Command line options
267
270
  addopts = [
268
271
  "--strict-markers",
269
272
  "--strict-config",
270
273
  "--verbose",
271
274
  "--tb=short",
275
+ "--maxfail=3",
276
+ "-ra",
277
+ "--durations=10",
272
278
  ]
279
+
280
+ # Test markers
273
281
  markers = [
274
- "slow: marks tests as slow (deselect with '-m \"not slow\"')",
275
- "integration: marks tests as integration tests",
276
- "unit: marks tests as unit tests",
282
+ # Test speed
283
+ "slow: marks tests as slow (use -m 'not slow' to skip)",
284
+ "addon_disruptive: restarts the server-under-test's own process (addon self-restart); must never run concurrently with other tests on lanes where the MCP server is out-of-process - the lane workflow runs these in a single-worker phase AFTER the parallel run",
285
+
286
+ # Test types
287
+ "unit: unit tests (isolated, fast)",
288
+ "integration: integration tests requiring external services",
289
+ "e2e: end-to-end tests with full system",
290
+ "performance: performance and load tests",
291
+
292
+ # E2E test categories
277
293
  "automation: automation lifecycle tests",
294
+ "blueprint: blueprint management tests",
278
295
  "calendar: calendar event management tests",
279
296
  "device: device control tests",
280
297
  "script: script orchestration tests",
281
298
  "helper: helper integration tests",
299
+ "integrations: integration management tests (config entries)",
300
+ "labels: label management tests",
301
+ "registry: entity and device registry tests",
302
+ "services: service discovery tests",
303
+ "todo: todo/shopping list management tests",
282
304
  "convenience: convenience tools tests (scene, weather, energy, docs)",
305
+ "updates: update management tools tests",
306
+ "system: system management tests (restart, reload, health)",
307
+ "themes: frontend theme management tests",
283
308
  "error_handling: error handling and edge case tests",
284
309
  "cleanup: tests that create entities needing cleanup",
285
- "performance: performance measurement and regression tests",
286
- "external_only: in-process-server tiers only; skips inaddon, stdio, container-embedded, and HAOS-embedded servers",
287
- "inaddon_only: only runs on HAOS inaddon tier",
310
+ "area: area management tests",
311
+ "floor: floor management tests",
312
+ "zone: zone management tests",
313
+ "group: entity group management tests",
314
+ "hacs: HACS (Home Assistant Community Store) tests",
315
+ "update_path: component (stable tag + working tree) x new-server in-process update-path e2e (dedicated lane; runs only with E2E_UPDATE_PATH=1; #1783/#1785)",
316
+ "core: core tool tests (state, service, bulk control, history, templates)",
317
+ "config: configuration management tests (helpers, labels)",
318
+ "filesystem: filesystem access tools tests",
319
+ "haos_only: skip unless HAOS_TEST_IMAGE_PATH is set (HAOS-QEMU backend required; #1281)",
288
320
  "beta_haos_only: beta HAOS image lanes with Supervisor/Core version expectations configured",
321
+ "container_only: skip when HAOS backend is active (testcontainer-specific behavior; #1281)",
322
+ "embedded_only: only the embedded testcontainer backend (E2E_BACKEND=embedded), the one lane that installs ha-mcp into the HA image (#2245)",
323
+ "external_only: in-process-server tiers only - skip for inaddon, stdio, container-embedded, and HAOS-embedded servers; #1349, #1527, #2233",
324
+ "inaddon_only: HAOS inaddon mode only - exercises is_running_in_addon()=True paths; #1349",
325
+ "haos_stdio_only: HAOS stdio mode only - exercises the installed ha-mcp command over a real stdio subprocess transport; #2233",
326
+ "haos_tls: final HAOS embedded scenario that restarts Core with HTTPS in the existing worker VM, then restores HTTP; #2241",
327
+ "haos_embedded_only: HAOS embedded mode only (HAOS_TEST_MODE=embedded) - the server shares Home Assistant's process and event loop; #2357",
328
+ "not_on_embedded: skip on the embedded backend (E2E_BACKEND=embedded) - provably redundant with the lane's own in-process ha_mcp_server session backend; #1527",
329
+ "not_on_haos_embedded: skip on the haos_embedded backend (HAOS_TEST_MODE=embedded) - provably redundant with the lane's own session backend, which enables the entry once and drives the in-process server for the whole suite; #1527",
330
+ "requires_tools_entry: needs the File & YAML Tools config entry - skipped on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
331
+ "no_tools_only: runs only on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
289
332
  ]
333
+
334
+ # Async support - session-scoped loop lets session-scoped fixtures
335
+ # (mcp_server, mcp_client, ha_client) share one event loop with tests.
336
+ # Without this, each test gets a new loop and session-scoped httpx
337
+ # clients fail with "Event loop is closed".
290
338
  asyncio_mode = "auto"
339
+ asyncio_default_fixture_loop_scope = "session"
340
+ asyncio_default_test_loop_scope = "session"
341
+
342
+ # Per-test timeout (pytest-timeout). A stuck server-side await otherwise
343
+ # stalls the run silently until the JOB timeout - observed as a 22-minute
344
+ # hang in test_zone_search_discovery on the HAOS in-addon backend. 300s is
345
+ # ~10x the slowest legitimate test (~30s deliberate-timeout tests). The signal
346
+ # method interrupts only the hung test and raises inside the running coroutine,
347
+ # so the failure traceback names the exact stuck await.
348
+ timeout = 300
349
+ timeout_method = "signal"
350
+ # Bill the timeout to the TEST FUNCTION only. Session fixtures (container
351
+ # boot, the embedded backend's server bring-up, HAOS staging) legitimately
352
+ # exceed 300s and were being killed mid-setup on the first test per worker,
353
+ # preempting their own diagnostics. Runaway fixtures are still bounded by
354
+ # the CI job timeouts.
355
+ timeout_func_only = true
356
+
357
+ # Log capture
358
+ log_cli = true
359
+ log_cli_level = "INFO"
360
+ log_cli_format = "%(asctime)s [%(levelname)8s] %(name)s: %(message)s"
361
+ log_cli_date_format = "%Y-%m-%d %H:%M:%S"
362
+
363
+ # Treat warnings as errors to enforce clean tests
364
+ filterwarnings = [
365
+ "error",
366
+ # Allow specific non-critical warnings that don't affect functionality
367
+ "ignore::DeprecationWarning",
368
+ "ignore::PendingDeprecationWarning",
369
+ # Allow all ResourceWarnings, including those emitted during test cleanup
370
+ "ignore::ResourceWarning",
371
+ ]
291
372
 
292
373
  [dependency-groups]
293
374
  dev = [
@@ -3,19 +3,14 @@
3
3
  Two consumers in the automation/script/scene family pay for a whole-collection
4
4
  fetch to answer a single question:
5
5
 
6
- - The set/remove/post-write resolvers (``_resolve_scene_entity_id`` /
7
- ``_resolve_automation_entity_id``) map a storage id (a scene's ``unique_id``,
8
- an automation's config id) to its live ``entity_id`` — the scene resolver by
9
- dumping the ENTIRE ``config/entity_registry/list`` (with a 0.2 s sleep + retry
10
- to absorb post-upsert registration lag), the automation resolver by scanning
11
- the WHOLE ``get_states()`` state machine. When the component advertises
12
- ``entity_lookup``, a single ``ha_mcp_tools/entity_lookup(unique_id=, domain=)``
13
- frame returns just the matching registry entries — a hit is authoritative the
14
- instant it returns (no settle). An in-process read removes the network latency
15
- but NOT HA's async entity-registration lag, so the scene resolver still
16
- rechecks an EMPTY result ONCE after the same short delay before its naive
17
- fallback (the automation resolver has no post-upsert lag exposure — its only
18
- routed call site resolves an already-registered entity before a delete).
6
+ - Entity resolution maps storage keys to live registry entity IDs.
7
+ ``entity_registration.resolve_entity_id_after_write`` polls after scene/script
8
+ writes against one deadline. ``_resolve_scene_entity_id`` uses a single retry
9
+ before scene removal; ``_resolve_automation_entity_id`` resolves an existing
10
+ entity before deletion. The component's ``entity_lookup`` returns only matching
11
+ rows instead of a full registry/state listing. A hit is authoritative at once,
12
+ but an empty read can precede HA's asynchronous entity registration even when
13
+ performed in-process, so post-write callers must continue polling.
19
14
  - The reference validator (``validate_config_references``) fetches BOTH
20
15
  ``client.get_services()`` and ``client.get_states()`` on every automation/script
21
16
  write purely to build a name index. When the component advertises
@@ -40,16 +35,11 @@ path runs, NEVER propagated out of the read. Neither consumer's legacy path dies
40
35
  identically on a pooled-WS drop, so propagating would abort work the legacy path
41
36
  still completes:
42
37
 
43
- - ``fetch_entity_lookup_via_component``'s consumers degrade gracefully. The scene
44
- resolver's ``config/entity_registry/list`` dump rides
45
- ``client.send_websocket_message``, which answers a command HA rejected with
46
- ``{"success": False}``, so the resolver walks its retry loop to the naive
47
- ``scene.{id}`` fallback (a dead transport raises there instead, #1947) - and
48
- the automation resolver scans REST
49
- ``get_states()`` and additionally catches broadly → ``None``. Its only routed
50
- call sites run AFTER a scene/automation upsert commits or BEFORE a REST delete,
51
- so an escaping transport error would report a landed write as failed / abort a
52
- delete the REST path would have finished.
38
+ - ``fetch_entity_lookup_via_component`` consumers fall back to the legacy
39
+ WebSocket registry bridge or REST state reads. The post-write resolver catches
40
+ known API/transport failures and retains a best-effort entity ID; later wait
41
+ and category operations report any verification or assignment failure. Removal
42
+ resolvers retain their own error policies.
53
43
  - ``fetch_reference_data_via_component``'s legacy path is the REST
54
44
  ``get_services()`` / ``get_states()`` pair; an escaping transport error would
55
45
  make ``validate_config_references`` hit its swallow-all fetch guard and skip
@@ -58,9 +48,9 @@ still completes:
58
48
  **GET-path invariant:** the automation/script/scene *config-get* tools must never
59
49
  route through the component — their in-process ``raw_config`` freshness lags the
60
50
  config file between a write and the next completed reload. The resolvers gate the
61
- whole component branch (caps probe included) behind an explicit ``allow_component``
62
- flag that only the set/remove/post-write call sites pass, so a get never even
63
- probes caps. ``TestConfigGetSeam`` pins this.
51
+ whole component branch (caps probe included) behind ``allow_component`` for
52
+ removals. The dedicated post-write resolver is never called from a config-get.
53
+ ``TestConfigGetSeam`` pins this.
64
54
  """
65
55
 
66
56
  from __future__ import annotations
@@ -0,0 +1,133 @@
1
+ """Resolve storage keys after writes while Home Assistant registers entities."""
2
+
3
+ import asyncio
4
+ import logging
5
+ import time
6
+ from typing import Any, Literal
7
+
8
+ from ..client.rest_client import (
9
+ HomeAssistantAPIError,
10
+ HomeAssistantAuthError,
11
+ HomeAssistantConnectionError,
12
+ )
13
+ from .component_config_reads import fetch_entity_lookup_via_component
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+ # A bounded registration budget, not a fixed delay: existing entries return on
18
+ # the first lookup. Keep this separate from the subsequent state-availability
19
+ # wait, which cannot discover a name-derived or registry-renamed entity ID.
20
+ RESOLVE_TIMEOUT = 5.0
21
+
22
+
23
+ def _matching_entity_id(
24
+ entries: list[dict[str, Any]], storage_key: str, domain: Literal["scene", "script"]
25
+ ) -> str | None:
26
+ """UI scenes belong to platform homeassistant; scripts belong to script."""
27
+ platform = "homeassistant" if domain == "scene" else "script"
28
+ for entry in entries:
29
+ entity_id = entry.get("entity_id") or ""
30
+ if (
31
+ entry.get("unique_id") == storage_key
32
+ and entry.get("platform") == platform
33
+ and entity_id.startswith(f"{domain}.")
34
+ ):
35
+ return str(entity_id)
36
+ return None
37
+
38
+
39
+ async def _lookup_entity_id(
40
+ client: Any, storage_key: str, domain: Literal["scene", "script"]
41
+ ) -> str | None:
42
+ """Read once; an unavailable component falls back to the legacy registry."""
43
+ matches = await fetch_entity_lookup_via_component(
44
+ client, storage_key, domain=domain
45
+ )
46
+ if matches is None:
47
+ if domain == "script":
48
+ direct = await client.send_websocket_message(
49
+ {
50
+ "type": "config/entity_registry/get",
51
+ "entity_id": f"script.{storage_key}",
52
+ }
53
+ )
54
+ row = direct.get("result")
55
+ if direct.get("success") and isinstance(row, dict):
56
+ entity_id = _matching_entity_id([row], storage_key, domain)
57
+ if entity_id is not None:
58
+ return entity_id
59
+ listing = await client.send_websocket_message(
60
+ {"type": "config/entity_registry/list"}
61
+ )
62
+ if listing.get("success") is False:
63
+ raise HomeAssistantAPIError(
64
+ f"Entity registry lookup failed: {listing.get('error')} "
65
+ f"(code={listing.get('error_code')})"
66
+ )
67
+ matches = listing.get("result") or []
68
+ return _matching_entity_id(matches, storage_key, domain)
69
+
70
+
71
+ async def resolve_entity_id_after_write(
72
+ client: Any,
73
+ storage_key: str,
74
+ domain: Literal["scene", "script"],
75
+ *,
76
+ timeout: float | None = None,
77
+ poll_interval: float = 0.2,
78
+ fallback_entity_id: str | None = None,
79
+ ) -> str:
80
+ """Poll for the actual entity ID before a post-write wait/category update.
81
+
82
+ An empty registry read can precede asynchronous registration even inside
83
+ the component. Retry against one deadline, checking component availability
84
+ on every attempt. A positive budget includes in-flight lookups and sleeps;
85
+ zero requests one lookup without a time limit, for test fixtures. Known
86
+ API failures retain the best-effort fallback. Errors escaping the component
87
+ adapter propagate unless listed below; cancellation always propagates.
88
+ ``fallback_entity_id`` overrides the constructed ID on failure; registry
89
+ matching always uses the storage key.
90
+
91
+ Config reads and removals must use their existing resolution paths. Bulk
92
+ writes with neither a state wait nor a category update should skip this
93
+ helper entirely. The optional budget and interval support deterministic
94
+ tests without extending production waits.
95
+ """
96
+ storage_key = storage_key.removeprefix(f"{domain}.")
97
+ fallback = fallback_entity_id or f"{domain}.{storage_key}"
98
+ budget = RESOLVE_TIMEOUT if timeout is None else timeout
99
+ deadline = time.monotonic() + budget
100
+ try:
101
+ async with asyncio.timeout(budget if budget > 0 else None):
102
+ while True:
103
+ entity_id = await _lookup_entity_id(client, storage_key, domain)
104
+ if entity_id is not None:
105
+ return entity_id
106
+ remaining = deadline - time.monotonic()
107
+ if remaining <= 0:
108
+ break
109
+ await asyncio.sleep(min(poll_interval, remaining))
110
+ if time.monotonic() >= deadline:
111
+ break
112
+ except (
113
+ TimeoutError,
114
+ HomeAssistantAPIError,
115
+ HomeAssistantAuthError,
116
+ HomeAssistantConnectionError,
117
+ ) as exc:
118
+ logger.warning(
119
+ "Post-write registry resolve failed for %s.%s (%s: %s); using %s",
120
+ domain,
121
+ storage_key,
122
+ type(exc).__name__,
123
+ exc,
124
+ fallback,
125
+ )
126
+ else:
127
+ logger.debug(
128
+ "Post-write registry budget exhausted for %s.%s; using %s",
129
+ domain,
130
+ storage_key,
131
+ fallback,
132
+ )
133
+ return fallback
@@ -32,6 +32,7 @@ from ..utils.python_sandbox import (
32
32
  )
33
33
  from .auto_backup import with_auto_backup
34
34
  from .component_config_reads import fetch_entity_lookup_via_component
35
+ from .entity_registration import resolve_entity_id_after_write
35
36
  from .helpers import (
36
37
  exception_to_structured_error,
37
38
  log_tool_usage,
@@ -115,10 +116,8 @@ class ConfigSceneTools:
115
116
  def __init__(self, client: Any) -> None:
116
117
  self._client = client
117
118
 
118
- # Time to wait between the first and second registry-list query when the
119
- # scene was just upserted but hasn't yet been indexed. Exposed as a class
120
- # attribute so tests can patch it down to ``0`` instead of waiting 200 ms
121
- # in suite runs.
119
+ # Short retry retained for config reads and removals; post-write polling
120
+ # has its own deadline in entity_registration.
122
121
  _RESOLVE_RETRY_DELAY = 0.2
123
122
 
124
123
  @staticmethod
@@ -133,53 +132,19 @@ class ConfigSceneTools:
133
132
  async def _resolve_scene_entity_id(
134
133
  self, scene_id: str, *, allow_component: bool = False
135
134
  ) -> str:
136
- """Resolve a scene's actual entity_id via the entity registry.
137
-
138
- Unlike scripts (where ``entity_id == 'script.<storage_key>'``), HA
139
- derives a scene's entity_id from the ``name`` field. So a scene
140
- upserted with ``scene_id='night_light_led_desk_strip'`` and
141
- ``name='LED Desk Strip Night Light'`` lands at entity_id
142
- ``scene.led_desk_strip_night_light`` while the storage key (and the
143
- unique_id) stays ``night_light_led_desk_strip``.
144
-
145
- Naively assuming ``f"scene.{scene_id}"`` for the wait/category
146
- callsites surfaces a false-negative warning ("not yet queryable")
147
- whenever a name is supplied. This helper finds the actual entity_id
148
- by matching the scene_id to ``unique_id`` in the entity registry.
149
-
150
- On a freshly-upserted scene the registry can lag the storage write
151
- by tens to ~200 ms — the first query returns no match and the naive
152
- ``scene.{scene_id}`` fallback is then chased by
153
- ``wait_for_entity_registered`` to its phantom-404 timeout. Retry
154
- the registry list once after a short delay so the post-upsert
155
- callsites see the real entity_id instead of trailing the lookup
156
- with a phantom (issue #1168 R3 blocker 1).
157
-
158
- When ``allow_component`` (set/remove/post-write call sites only — a
159
- config-get must never route through the component, see
160
- ``component_config_reads`` and ``TestConfigGetSeam``) AND the component
161
- advertises ``entity_lookup``, one in-process
162
- ``entity_lookup(unique_id=scene_id, domain="scene")`` frame replaces the
163
- whole-registry dump. A hit returns immediately — the in-process read
164
- needs no settle. But an EMPTY result right after an upsert can be HA's
165
- async entity-registration lag (#1168) rather than a true absence: the
166
- in-process read removes the network latency, not the registration lag
167
- (the upsert and this resolve are separate round-trips). So an empty
168
- result is rechecked ONCE after ``_RESOLVE_RETRY_DELAY`` — the same delay
169
- the legacy path uses — before the naive ``scene.{scene_id}`` fallback. If the recheck answers
170
- AUTHORITATIVELY (component still available) its verdict is final: a hit is
171
- returned, a genuine empty falls to the naive guess. But if the recheck
172
- itself returns ``None`` (component went unavailable / errored / downgraded
173
- mid-retry) the first empty read is NOT authoritative, so resolution drops
174
- to the legacy list+retry path below (its own retry absorbs the same lag)
175
- rather than trusting the empty and guessing.
176
- The component unavailable / errored ⇒ the legacy list+retry path below
177
- runs unchanged; that is the FIRST-read case (issue #1813 Phase 2).
178
-
179
- Accepts a bare ``scene_id`` ("movie_night") or a fully-qualified
180
- ``entity_id`` ("scene.movie_night") — the leading ``scene.`` is
181
- stripped so callers don't accidentally produce ``scene.scene.movie_night``
182
- on fallback. Mirrors ``rest_client.resolve_scene_id`` ergonomics.
135
+ """Resolve the entity ID for config reads and removals, with one retry.
136
+
137
+ HA derives scene entity IDs from the name; the storage key remains
138
+ the registry unique_id. Match that key instead of assuming the slug.
139
+ Accept either a bare key or a key prefixed with ``scene.``.
140
+
141
+ Only removals enable ``allow_component``. Config reads use the legacy
142
+ registry path to preserve the GET-path invariant documented in
143
+ ``component_config_reads``. An empty component result is rechecked
144
+ once; component unavailability falls through to the legacy path.
145
+
146
+ Post-write waits and categories use ``resolve_entity_id_after_write``:
147
+ their registration window requires deadline-based polling (#2426).
183
148
  """
184
149
  scene_id = scene_id.removeprefix("scene.")
185
150
  if allow_component:
@@ -197,8 +162,7 @@ class ConfigSceneTools:
197
162
  non-authoritative (capability miss, or the recheck went
198
163
  unavailable/errored mid-retry), so the caller falls through to the
199
164
  legacy registry list+retry path. ``scene_id`` must already have its
200
- ``scene.`` prefix stripped; see ``_resolve_scene_entity_id`` for the
201
- full lag-vs-absence reasoning.
165
+ ``scene.`` prefix stripped.
202
166
  """
203
167
  matches = await fetch_entity_lookup_via_component(
204
168
  self._client, scene_id, domain="scene"
@@ -871,8 +835,10 @@ class ConfigSceneTools:
871
835
  # post-upsert finalisation the full-config branch runs. Without
872
836
  # these, ``wait`` and ``category`` are silently dropped on
873
837
  # python_transform calls.
874
- entity_id = await self._resolve_scene_entity_id(
875
- resolved_id, allow_component=True
838
+ entity_id = (
839
+ await resolve_entity_id_after_write(self._client, resolved_id, "scene")
840
+ if wait or category
841
+ else f"scene.{resolved_id}"
876
842
  )
877
843
  if wait:
878
844
  try:
@@ -1152,8 +1118,10 @@ class ConfigSceneTools:
1152
1118
  # Resolve actual entity_id via registry — HA derives scene
1153
1119
  # entity_ids from the 'name' slug, not the scene_id storage key,
1154
1120
  # so f"scene.{scene_id}" is wrong whenever a name is supplied.
1155
- entity_id = await self._resolve_scene_entity_id(
1156
- resolved_id, allow_component=True
1121
+ entity_id = (
1122
+ await resolve_entity_id_after_write(self._client, resolved_id, "scene")
1123
+ if wait or effective_category
1124
+ else f"scene.{resolved_id}"
1157
1125
  )
1158
1126
 
1159
1127
  # Wait for scene to be queryable