ha-mcp-dev 8.4.3.dev2650__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.dev2650/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2652}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scenes.py +25 -57
  6. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scripts.py +46 -92
  7. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  8. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
  9. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/LICENSE +0 -0
  10. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/README.md +0 -0
  12. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/setup.cfg +0 -0
  13. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__init__.py +0 -0
  14. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__main__.py +0 -0
  15. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_pypi_marker +0 -0
  16. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_rich_compat.py +0 -0
  17. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/__init__.py +0 -0
  18. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  19. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  20. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  21. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  22. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  23. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  24. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  97. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  116. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  117. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  118. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  120. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  121. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  122. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  124. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  125. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  126. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  127. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  167. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  168. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  169. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  171. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  172. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  173. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  288. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  289. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  290. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  291. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  292. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  310. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  311. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  312. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  313. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  316. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  318. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  319. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  324. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  325. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  326. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  327. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  329. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  346. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  347. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  348. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  349. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  350. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  351. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  376. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  378. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  379. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  380. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  381. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  384. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  386. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  387. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  389. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  392. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  394. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  396. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  398. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  399. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  400. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  401. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  403. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  404. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  407. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  408. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  412. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  413. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  414. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  415. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  416. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  417. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  418. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  419. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  420. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  421. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  425. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  426. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  427. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  428. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/requirements.txt +0 -0
  429. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  430. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  431. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  432. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  433. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  434. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  435. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  436. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  437. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  438. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  439. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  440. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  441. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  442. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  443. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  444. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  445. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  446. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  447. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  448. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  450. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  451. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  452. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  453. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  454. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  455. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  456. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  457. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  458. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  459. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  460. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  461. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  462. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  463. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  464. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  465. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  466. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  467. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  468. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  469. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  470. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  471. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  472. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  473. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  474. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  475. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  476. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  477. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  478. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  479. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  480. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  481. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  482. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  483. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  484. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  485. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_version.py +0 -0
  486. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/__init__.py +0 -0
  487. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/consent_form.py +0 -0
  488. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/oidc_compat.py +0 -0
  489. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/provider.py +0 -0
  490. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/backup_manager.py +0 -0
  491. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/browser_landing.py +0 -0
  492. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/__init__.py +0 -0
  493. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/rest_client.py +0 -0
  494. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/supervisor_client.py +0 -0
  495. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_client.py +0 -0
  496. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_listener.py +0 -0
  497. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/config.py +0 -0
  498. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  499. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  500. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  501. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  502. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  503. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  504. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/errors.py +0 -0
  505. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/ha_request_queue.py +0 -0
  506. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  507. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/http_transport.py +0 -0
  508. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/llm_exposure.py +0 -0
  509. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/log_filters.py +0 -0
  510. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/__init__.py +0 -0
  511. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/approval_queue.py +0 -0
  512. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/editing.py +0 -0
  513. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/evaluator.py +0 -0
  514. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/handlers.py +0 -0
  515. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/middleware.py +0 -0
  516. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/model.py +0 -0
  517. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/persistence.py +0 -0
  518. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/value_sources.py +0 -0
  519. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/py.typed +0 -0
  520. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/read_only.py +0 -0
  521. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/redaction.py +0 -0
  522. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/renamed_tools.py +0 -0
  523. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  529. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  530. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  531. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  532. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  533. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/server.py +0 -0
  565. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/__init__.py +0 -0
  566. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  567. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  568. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  569. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  570. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  571. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  572. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  573. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  574. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  575. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  576. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_theme.py +0 -0
  577. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  578. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  579. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  580. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  581. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  582. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  583. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  584. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  585. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  586. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  587. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  588. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  589. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  590. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  591. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  592. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.css +0 -0
  595. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.html +0 -0
  596. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.js +0 -0
  597. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/smoke_test.py +0 -0
  598. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  599. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/strict_bps.py +0 -0
  600. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tool_dispatch.py +0 -0
  601. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/__init__.py +0 -0
  602. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/auto_backup.py +0 -0
  603. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/backup.py +0 -0
  604. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  605. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_result.py +0 -0
  606. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  607. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  608. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  609. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_write.py +0 -0
  610. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/bulk_selector.py +0 -0
  611. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_api.py +0 -0
  612. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_entries.py +0 -0
  613. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  614. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_devices.py +0 -0
  615. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registries.py +0 -0
  616. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  617. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  618. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  622. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  623. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  625. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/device_control.py +0 -0
  626. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  627. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/hacs_registration.py +0 -0
  628. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/helpers.py +0 -0
  629. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  630. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_common.py +0 -0
  631. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources.py +0 -0
  632. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  633. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  634. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/__init__.py +0 -0
  635. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/base.py +0 -0
  636. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/matter.py +0 -0
  637. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/thread.py +0 -0
  638. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  639. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zwave.py +0 -0
  640. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/reference_validator.py +0 -0
  641. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/registry.py +0 -0
  642. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  643. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  644. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  645. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  646. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  647. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  648. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  649. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  650. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  651. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  652. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  653. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_addons.py +0 -0
  655. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_areas.py +0 -0
  656. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  657. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  658. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  659. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_calendar.py +0 -0
  660. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_camera.py +0 -0
  661. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_categories.py +0 -0
  662. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_code.py +0 -0
  663. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  664. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  665. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  666. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  667. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dev.py +0 -0
  668. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_energy.py +0 -0
  669. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_entities.py +0 -0
  670. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  671. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_groups.py +0 -0
  672. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_hacs.py +0 -0
  673. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_history.py +0 -0
  674. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_integrations.py +0 -0
  675. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_labels.py +0 -0
  676. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_logs.py +0 -0
  677. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_radio.py +0 -0
  678. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_registry.py +0 -0
  679. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_resources.py +0 -0
  680. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_search.py +0 -0
  681. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  682. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_service.py +0 -0
  683. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_services.py +0 -0
  684. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_system.py +0 -0
  685. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_themes.py +0 -0
  686. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_todo.py +0 -0
  687. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_traces.py +0 -0
  688. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_updates.py +0 -0
  689. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_utility.py +0 -0
  690. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  691. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  692. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  693. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_zones.py +0 -0
  694. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/util_helpers.py +0 -0
  695. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/validation_middleware.py +0 -0
  696. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/__init__.py +0 -0
  697. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/categorized_search.py +0 -0
  698. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  699. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transport_security.py +0 -0
  700. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/update_check.py +0 -0
  701. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/__init__.py +0 -0
  702. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_hash.py +0 -0
  703. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_write_lock.py +0 -0
  704. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  705. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/data_paths.py +0 -0
  706. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  707. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/domain_handlers.py +0 -0
  708. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/entity_membership.py +0 -0
  709. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  710. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  711. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/operation_manager.py +0 -0
  712. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/python_sandbox.py +0 -0
  713. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/skill_loader.py +0 -0
  714. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/usage_logger.py +0 -0
  715. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/__init__.py +0 -0
  716. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/enforcement.py +0 -0
  717. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/model.py +0 -0
  718. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/persistence.py +0 -0
  719. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/resolver.py +0 -0
  720. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  723. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650 → ha_mcp_dev-8.4.3.dev2652}/tests/__init__.py +0 -0
  725. {ha_mcp_dev-8.4.3.dev2650 → ha_mcp_dev-8.4.3.dev2652}/tests/test_constants.py +0 -0
  726. {ha_mcp_dev-8.4.3.dev2650 → 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.dev2650
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.dev2650"
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
@@ -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
@@ -38,7 +38,7 @@ from .blueprint_substitute import (
38
38
  take_control_config,
39
39
  validate_write_modes,
40
40
  )
41
- from .component_config_reads import fetch_entity_lookup_via_component
41
+ from .entity_registration import resolve_entity_id_after_write
42
42
  from .helpers import (
43
43
  exception_to_structured_error,
44
44
  log_tool_usage,
@@ -793,6 +793,7 @@ class ConfigScriptTools:
793
793
  python_transform,
794
794
  bp_warnings,
795
795
  MandatoryBPS,
796
+ wait,
796
797
  effective_category,
797
798
  )
798
799
 
@@ -951,46 +952,44 @@ class ConfigScriptTools:
951
952
  )
952
953
  return transformed_config, resolved_id
953
954
 
954
- async def _resolve_script_entity_id(self, storage_key: str) -> str:
955
- """Resolve a script storage key to its current entity_id.
955
+ async def _finalize_script_write(
956
+ self,
957
+ result: dict[str, Any],
958
+ script_id: str,
959
+ resolved_key: str | None,
960
+ wait: bool,
961
+ category: str | None,
962
+ ) -> None:
963
+ """Resolve, wait, and apply a category for either script write mode.
956
964
 
957
- Normally ``script.<storage_key>``, but a registry rename decouples
958
- the entity_id from the storage key while the registry entry keeps
959
- ``unique_id == storage_key``. Component lookup first, then a
960
- registry-get fast path, then a registry-list scan; the constructed id
961
- is the last resort (fresh creates resolve here before registration).
965
+ Match the upsert's storage key, which can differ from the caller's
966
+ entity ID after a registry rename. Keep the caller's ID as fallback.
962
967
  """
963
- constructed = f"script.{storage_key}"
964
- try:
965
- matches = await fetch_entity_lookup_via_component(
966
- self._client, storage_key, domain="script"
967
- )
968
- if matches is not None:
969
- for match in matches:
970
- entity_id = match.get("entity_id") or ""
971
- if entity_id.startswith("script."):
972
- return str(entity_id)
973
- return constructed
974
- result = await self._client.send_websocket_message(
975
- {"type": "config/entity_registry/get", "entity_id": constructed}
976
- )
977
- if isinstance(result, dict) and result.get("success"):
978
- return constructed
979
- listing = await self._client.send_websocket_message(
980
- {"type": "config/entity_registry/list"}
968
+ if not wait and not category:
969
+ return
970
+ storage_key = result.get("script_id") or resolved_key or script_id
971
+ entity_id = await resolve_entity_id_after_write(
972
+ self._client,
973
+ storage_key,
974
+ "script",
975
+ fallback_entity_id=f"script.{script_id.removeprefix('script.')}",
976
+ )
977
+ if wait:
978
+ try:
979
+ registered = await wait_for_entity_registered(self._client, entity_id)
980
+ if not registered:
981
+ result.setdefault("warnings", []).append(
982
+ f"Script saved but {entity_id} not yet queryable. "
983
+ "It may take a moment to become available."
984
+ )
985
+ except (HomeAssistantConnectionError, HomeAssistantAuthError) as e:
986
+ result.setdefault("warnings", []).append(
987
+ f"Script saved but verification failed: {e}"
988
+ )
989
+ if category:
990
+ await apply_entity_category(
991
+ self._client, entity_id, category, "script", result, "script"
981
992
  )
982
- entries = (listing.get("result") or []) if isinstance(listing, dict) else []
983
- for entry in entries:
984
- if (
985
- isinstance(entry, dict)
986
- and entry.get("platform") == "script"
987
- and entry.get("unique_id") == storage_key
988
- and str(entry.get("entity_id", "")).startswith("script.")
989
- ):
990
- return str(entry["entity_id"])
991
- except Exception as e:
992
- logger.debug(f"Failed to resolve entity_id for script {storage_key}: {e}")
993
- return constructed
994
993
 
995
994
  async def _commit_script_transform(
996
995
  self,
@@ -1000,13 +999,10 @@ class ConfigScriptTools:
1000
999
  python_transform: str,
1001
1000
  bp_warnings: BestPracticeCheckResult,
1002
1001
  MandatoryBPS: bool,
1002
+ wait: bool,
1003
1003
  effective_category: str | None = None,
1004
1004
  ) -> dict[str, Any]:
1005
- """Upsert a transformed script config and build the tool response.
1006
-
1007
- Extracted verbatim from ``ha_config_set_script``'s python_transform
1008
- branch (the post-``_check_best_practices`` tail).
1009
- """
1005
+ """Upsert, refresh the hash, finalize wait/category, and build the response."""
1010
1006
  # Save transformed config. ``_fetch_and_verify_hash`` already
1011
1007
  # resolved the storage key; pass it as the write target so the
1012
1008
  # upsert skips the redundant re-resolve (issue #1813 Phase 0).
@@ -1020,18 +1016,9 @@ class ConfigScriptTools:
1020
1016
  # Re-fetch to get authoritative hash (HA may normalize after save)
1021
1017
  _, new_config_hash, _ = await self._get_script_config_internal(script_id)
1022
1018
 
1023
- # Apply category to entity registry if provided (parity with the
1024
- # full-config branch — issue #2159). Resolve the storage key first: a
1025
- # registry-renamed script no longer lives at script.<storage_key>.
1026
- if effective_category:
1027
- await apply_entity_category(
1028
- self._client,
1029
- await self._resolve_script_entity_id(script_id),
1030
- effective_category,
1031
- "script",
1032
- result,
1033
- "script",
1034
- )
1019
+ await self._finalize_script_write(
1020
+ result, script_id, resolved_id, wait, effective_category
1021
+ )
1035
1022
 
1036
1023
  response: dict[str, Any] = {
1037
1024
  "success": True,
@@ -1081,11 +1068,7 @@ class ConfigScriptTools:
1081
1068
  MandatoryBPS: bool,
1082
1069
  detached_blueprint: str | None = None,
1083
1070
  ) -> dict[str, Any]:
1084
- """Validate references, upsert, wait, and build the tool response.
1085
-
1086
- Extracted verbatim from ``ha_config_set_script``'s full-config branch
1087
- (the post-``_check_best_practices`` tail).
1088
- """
1071
+ """Validate references, upsert, finalize wait/category, and build the response."""
1089
1072
  # Cross-check literal service and entity references against
1090
1073
  # the live registries. Soft warnings only — the write still
1091
1074
  # happens, even when references don't resolve (#940).
@@ -1093,38 +1076,9 @@ class ConfigScriptTools:
1093
1076
 
1094
1077
  result = await self._upsert_script(config_dict, script_id, resolved_key)
1095
1078
 
1096
- # Resolve the storage key only when the entity_id is consumed (the
1097
- # wait poll or the category write): with wait=False and no category —
1098
- # the documented bulk path — the resolution round-trips would be pure
1099
- # cost. A registry-renamed script no longer lives at
1100
- # script.<storage_key>; fresh creates fall back to the constructed id.
1101
- if wait or effective_category:
1102
- entity_id = await self._resolve_script_entity_id(script_id)
1103
- else:
1104
- entity_id = f"script.{script_id}"
1105
- if wait:
1106
- try:
1107
- registered = await wait_for_entity_registered(self._client, entity_id)
1108
- if not registered:
1109
- result.setdefault("warnings", []).append(
1110
- f"Script saved but {entity_id} not yet queryable. "
1111
- "It may take a moment to become available."
1112
- )
1113
- except (HomeAssistantConnectionError, HomeAssistantAuthError) as e:
1114
- result.setdefault("warnings", []).append(
1115
- f"Script saved but verification failed: {e}"
1116
- )
1117
-
1118
- # Apply category to entity registry if provided
1119
- if effective_category and entity_id:
1120
- await apply_entity_category(
1121
- self._client,
1122
- entity_id,
1123
- effective_category,
1124
- "script",
1125
- result,
1126
- "script",
1127
- )
1079
+ await self._finalize_script_write(
1080
+ result, script_id, resolved_key, wait, effective_category
1081
+ )
1128
1082
 
1129
1083
  if bp_warnings:
1130
1084
  result["best_practice_warnings"] = list(bp_warnings)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2650
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
@@ -618,6 +618,7 @@ src/ha_mcp/tools/config_entry_reconfigure.py
618
618
  src/ha_mcp/tools/config_entry_reload_watch.py
619
619
  src/ha_mcp/tools/dashboard_edit_errors.py
620
620
  src/ha_mcp/tools/device_control.py
621
+ src/ha_mcp/tools/entity_registration.py
621
622
  src/ha_mcp/tools/error_log_parsing.py
622
623
  src/ha_mcp/tools/hacs_registration.py
623
624
  src/ha_mcp/tools/helpers.py